Hei kaikille!
Äskettäin Waves Labs
Valitsimme DAO-tapauksen, koska
Aloitimme yksinkertaisella esimerkillä
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ä
Löydät osoitteen IDE:stä avaamalla tilitietosi.
Korostamme Pankki 10 WAVES. Sitten tarkistamme, että ne saapuivat esto- ja tapahtumaselaimen kautta:
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:

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].
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
Varmistamme, että Alicen saldo täydentyy 3 WAVElla ja pankkisaldo pysyy 10 - 3 - 0.01 = 0.699.
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:
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().
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
Ride4Dapps sisältää nyt 2 uutta merkintätyyppiä:
- @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.
- @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.
Tarkistaaksesi, mikä sopimus on tällä hetkellä aktiivinen tililläsi, voit kopioida älysopimuksen base64-koodin lohkonhallintaohjelmassa ja tunnistaa sen kääntäjällä (
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.
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 }]}))
Bobilla on 1.99 AALTOA jäljellä. Eli Bob maksoi 0.01 WAVES-palkkiota
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.
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.
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
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.
Bob päätti myös nostaa rahaa jaetusta lompakosta, mutta teki virheen ja yritti nostaa 1.5 AALTOA.
Älykkäässä sopimuksessa oli kuitenkin tarkistus tähän tilanteeseen.
Xena on huijari, hän yritti nostaa 1 WAVESin kokonaistililtä.
Se ei toiminut hänellekään.
Seuraavassa osassa tarkastelemme monimutkaisempia Alice dApp -tilin epätäydellisyyteen liittyviä kysymyksiä.
Lähde: will.com