Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Hei kaikille!

Äskettäin Waves Labs ilmoitti kilpailu kehittäjille, jotka ovat omistautuneet RIDE-älykäs sopimuskielilaajennuksen julkaisemiseen hajautetuille sovelluksille Ride4Dapps testiverkkoon!

Valitsimme DAO-tapauksen, koska Ventuary aikoo kehittää dApppeja, joissa on sosiaalisia toimintoja: äänestäminen, varainhankinta, luottamuksen hallinta jne.
Aloitimme yksinkertaisella esimerkillä Q&A-istunnot ja RIDE IDE -esimerkki kanssa jaettu lompakko.

Katsotaanpa tätä esimerkkiä, testataan hypoteeseja ja tarkastellaan joitain omituisuuksia:

Anna meille Alice - dApp Owner
Boob ja Cooper ovat Alice-kumppaneita, Alice-BC DAO:n perustajia
Neli on yrittäjä, joka tarvitsee rahoitusta
Pankki - pankki, joka jakaa rahakkeita

Vaihe 1. Saldojen alustaminen

Jotta voit vastaanottaa rahakkeita waves-testiverkossa, sinun on otettava yhteyttä hana ja ilmoita osoite, johon tunnukset lähetetään.
Löydät osoitteen IDE:stä avaamalla tilitietosi.
Korostamme Pankki 10 WAVES. Sitten tarkistamme, että ne saapuivat esto- ja tapahtumaselaimen kautta: arvostelija

Jaetaan nyt rahakkeita pankista muille osallistujille. (Huom. Kaikki Was-verkon tapahtumat eivät ole ilmaisia, joten kaikilta osallistujilta vaaditaan vähintään positiivinen saldo tapahtumien suorittamiseen).

1 WAVES = 100000000 yksikköä (aaltoaaltoja), koska määrät voivat olla vain kokonaislukuja
0.01 WAVES (transaktiomaksu) = 1000000

Pankki -> [3 AALTOA] -> Alice, TransferTransactionin kautta (tyyppi: 4).

Tarkistamme, että env.SEED, josta tapahtumat allekirjoitetaan, vastaa pankkiamme:
Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Jos sinulla ei ole vastaavaa alkulauseketta, vaihda siihen Tilit-välilehdellä ja tarkista uudelleen.
Tämän jälkeen luomme, ilmoitamme ja allekirjoitamme 3 WAVES Alicen siirtotapahtuman.
Voit myös selvittää Alicen tiedot env.accounts-muuttujan kautta. Numerointi alkaa nollasta, joten Alice on env.accounts[0].
Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

Tulos on nähtävissä myös selaimessa, linkki siihen palautetaan meille välittömästi suorituksen jälkeen liiketoimia.

Varmistamme, että Alicen saldo täydentyy 3 WAVElla ja pankkisaldo pysyy 10 - 3 - 0.01 = 0.699.
Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Lähetämme Boobille ja Cooperille kumpikin 3 AALTOA ja Neli, Xena ja Mark kukin 0.2 AALTOA samalla tavalla.
(Huomautuksia: Teimme yhden merkin virheen ja lähetimme Nelille 0.02 AALTOA. Ole varovainen!)

broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))

Kun kaikkien osallistujien saldot on täydennetty, näemme:
Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Vaihe 2. Luo dApp-tili

Sovimme, että Alice on hajautetun sovelluksen luoja ja omistaja.
Siirry kohtaan Tilit, aseta se SEED:ksi ja tarkista, että env.SEED vastaa Alicea.

Yritetään asentaa yksinkertaisin mahdollinen skripti (sopimus) Alicen tilille.
Älykkäät yhteystiedot Wavesissa ovat predikaatteja, jotka estävät tai sallivat kaikenlaisen lähtevän tapahtuman tietyissä olosuhteissa. Tässä tapauksessa tämä ehto on AINA. Sopimuskoodi on totta. Kutsu deploy().

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Maksu per setScript-tapahtuma 1400000/100000000 = 0.014 AALTOA. Alicella on 2.986 XNUMX AALTOA jäljellä hänen tasapainossaan.

Yritetään nyt asentaa Alice-tilille monimutkaisempi älykäs sopimuslogiikka, joka on kuvattu kohdassa esimerkki

Ride4Dapps sisältää nyt 2 uutta merkintätyyppiä:

  1. @Soitava(i) — ottaa parametriksi i tiedot siitä, mikä tili kutsui/allekirjoitti tapahtuman. Tämän toiminnon tulos määrittää dApp-tilin tilan muutoksen. Muut tilit voivat luoda tapahtumia ja suorittaa toimintoja tällä merkinnällä ja muuttaa dApp-tilin tilaa.
  2. @Verifier(tx) — Tapahtuman varmentaja tapahtuman tx-parametrilla. Vastaa RIDE:n predikaattilogiikkaa. Tällä lausekkeella voit sallia tai kieltää lisämuutokset älykkäiden sopimusten logiikkaan dApp-tilillä.

Tehdään DAPP tili kaikille osallistujille yhteisenä lompakona.
Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Tarkistaaksesi, mikä sopimus on tällä hetkellä aktiivinen tililläsi, voit kopioida älysopimuksen base64-koodin lohkonhallintaohjelmassa ja tunnistaa sen kääntäjällä (esimerkiksi)
Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)
Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)
Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Varmistamme, että älykkään sopimuksen logiikka vastaa odotuksiamme.
Alicella on 2.972 XNUMX AALTOA jäljellä hänen tasapainossaan.

Tämä dApp seuraa, kuinka paljon kukin osallistuja maksaa sijoitusrahastoon mekanismin kautta datatapahtuma — DataEntry(nykyinenAvain, uusiAmount), jossa currentKey on tili, joka kutsuu talletustoiminnon, ja newAmount on täydennetyn saldon arvo.

Boob ja Cooper tekevät talletuksensa dApp-tilille 1 WAVESilla.
Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Teemme virheen ja kauppa ei mene läpi. Koska siitä huolimatta, että olimme vakuuttuneita tekevämme tapahtuman Bobin puolesta, teimme virheen indeksissä ja ilmoitimme pankkitilin, jolla ei ole älykästä sopimusta. Tässä on syytä huomata tärkeä seikka - epäonnistuneista liiketoimien käynnistämisyrityksistä peritään maksu ei voi poistaa! Alicella on 2.972 3 AALTOA jäljellä hänen tasapainossaan. Bobilla on XNUMX AALTOA.

Bob lähetti 1 WAVES dApp-tilille.

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Bobilla on 1.99 AALTOA jäljellä. Eli Bob maksoi 0.01 WAVES-palkkiota

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Alicen saldossa oli 2.972 AALTOA, nyt se on 3.972. Tapahtuma rekisteröitiin myös Alice-tilille, mutta provisiota ei veloitettu dApp-tililtä (Alice).
Kun Cooper myös täydensi tiliä, Alicen saldoksi tuli 4.972 XNUMX AALTOA.

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Voit selvittää, kuka omistaa kuinka monta WAVES-yhteyttä yhteisessä lompakossa on Data-välilehden lohkoselvityksessä.

Cooper muutti mielensä jättäessään 1 WAVES:n yleiseen lompakkoon ja päätti vetää puolet affiniteetista. Tätä varten hänen on kutsuttava nostotoiminto.

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Olimme kuitenkin jälleen väärässä, koska poistotoiminnolla on täysin erilaiset parametrit ja erilainen allekirjoitus. Kun suunnittelet älykkäitä sopimuksia RIDE4DAPPSissa, sinun tulee kiinnittää huomiota tähän kohtaan

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Cooperin taseessa on nyt 2.48 AALTOA. Vastaavasti 3 AALTOA - 1 - 0.01 ja sitten + 0.5 - 0.01. Vastaavasti jokainen talletus- ja kotiutuspuhelu maksaa 0.01 AALTOA. Tämän seurauksena dApps-omistajien taulukon merkinnät muuttuivat seuraavasti.

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Bob päätti myös nostaa rahaa jaetusta lompakosta, mutta teki virheen ja yritti nostaa 1.5 AALTOA.

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Älykkäässä sopimuksessa oli kuitenkin tarkistus tähän tilanteeseen.

Xena on huijari, hän yritti nostaa 1 WAVESin kokonaistililtä.

Opi kirjoittamaan Waves-älysopimuksia RIDE- ja RIDE4DAPPS-palveluissa. Osa 1 (Monen käyttäjän lompakko)

Se ei toiminut hänellekään.

Seuraavassa osassa tarkastelemme monimutkaisempia Alice dApp -tilin epätäydellisyyteen liittyviä kysymyksiä.

Lähde: will.com

Lisää kommentti