Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Tere kõigile!

Hiljuti Waves Labs teatas konkurss arendajatele, mis on pühendatud detsentraliseeritud rakenduste Ride4Dapps RIDE nutika lepingu keelelaienduse testvõrku väljalaskmisele!

Valisime DAO juhtumi, kuna Ventuary plaanib arendada sotsiaalsete funktsioonidega dAppisid: hääletamine, raha kogumine, usalduse haldamine jne.
Alustasime lihtsa näitega aastal Q&A seansid ja RIDE IDE - näide koos jagatud rahakott.

Vaatame seda näidet, kontrollime hüpoteese ja vaatame mõningaid veidrusi:

Andke meile Alice - dApp omanik
Boob ja Cooper on Alice'i partnerid, Alice-BC DAO kaasasutajad
Neli on ettevõtte omanik, kes vajab rahastamist
Pank – žetoone jagav pank

1. etapp. Saldode initsialiseerimine

Lainetesti võrgus žetoonide saamiseks peate ühendust võtma kraan ja märkige aadress, kuhu märgid saata.
Aadressi leiate IDE-st, kui avate oma konto andmed.
Toome esile panga 10 LAINET. Seejärel kontrollime, kas need saabusid blokeerimis- ja tehingubrauseri kaudu: retsensent

Nüüd jagame pangast žetoone ülejäänud osalejatele. (Märkused: kõik lainevõrgu tehingud ei ole tasuta, seega on kõikidel osalejatel tehingute tegemiseks vajalik minimaalne positiivne saldo).

1 LAINE = 100000000 ühikut (lainet), kuna summad võivad olla ainult täisarvud
0.01 LAINET (tehingutasu) = 1000000

Pank -> [3 WAVES] -> Alice, TransferTransactioni kaudu (tüüp: 4).

Kontrollime, et env.SEED, millelt tehingud allkirjastatakse, ühtib meie pangaga:
Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Kui teil pole sobivat algfraasi, lülituge sellele vahekaardil Kontod ja kontrollige uuesti.
Pärast seda loome, kuulutame välja ja allkirjastame tehingu 3 WAVES Alice'i ülekandmiseks.
Alice'i andmed saate teada ka muutuja env.accounts kaudu. Nummerdamine algab 0-st, nii et Alice on env.accounts[1].
Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

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

Tulemust saab jälgida ka brauseris, selle link saadetakse meile kohe pärast täitmist tagasi tehingud.

Veendume, et Alice’i saldot täiendatakse 3 LAINE võrra ja pangasaldo jääb tasemele 10 - 3 - 0.01 = 0.699.
Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Saadame Boobile ja Cooperile kumbki 3 LAINET ning Neli, Xena ja Mark kumbki 0.2 LAINET samamoodi.
(Märkused: tegime ühe tähemärgi vea ja saatsime Nelile 0.02 LAINET. Olge ettevaatlik!)

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

Pärast kõigi osalejate saldode täiendamist näeme:
Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

2. etapp. Looge dApp konto

Leppisime kokku, et Alice on detsentraliseeritud rakenduse looja ja omanik.
Avage kontod, määrake see SEED-ks ja kontrollige, kas env.SEED vastab Alice'ile.

Proovime paigaldada Alice'i kontole võimalikult lihtsa skripti (lepingu).
Nutikad kontaktid rakenduses Waves on predikaadid, mis keelavad või lubavad teatud tingimustel mis tahes tüüpi väljuvaid tehinguid. Sel juhul on see tingimus ALATI. Lepingukood on tõene. Helista deploy().

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Tasu setScripti tehingu kohta 1400000/100000000 = 0.014 LAINET. Alice’i saldole on jäänud 2.986 LAINET.

Proovime nüüd installida Alice'i kontole keerukamat nutika lepingu loogikat, mida on kirjeldatud artiklis näide

Ride4Dapps sisaldab nüüd 2 uut märkuste tüüpi:

  1. @Callable(i) — võtab parameetrina i andmed selle kohta, milline konto tehingule helistas/allkirjastas. See on selle funktsiooni tulemus, mis määrab dApp konto oleku muutuse. Teised kontod saavad selle märkusega tehinguid luua ja funktsioone täita ning dApp konto olekut muuta.
  2. @Verifier(tx) — Tehingu kontrollija tehingu tx parameetriga. Vastab RIDE predikaatloogikale. Selle väljendiga saate lubada või keelata dApp konto nutikate lepingute loogika edasisi muudatusi.

Teeme dApp konto kõigi osalejate ühise rahakotina.
Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Et kontrollida, milline leping on teie kontol hetkel aktiivne, saate kopeerida plokiuurijas nutika lepingu koodi base64 ja tuvastada selle dekompilaatori abil (näiteks)
Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)
Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)
Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Hoolitseme selle eest, et nutika lepingu loogika vastaks meie ootustele.
Alice’i saldole on jäänud 2.972 LAINET.

See dApp jälgib, kui palju iga osaleja mehhanismi kaudu lepingulistesse fondidesse panustab andmetehing — andmesisestus (praegune võti, uus summa), kus currentKey on konto, mis kutsub deposiidifunktsiooni, ja newAmount on täiendatud saldo väärtus.

Boob ja Cooper teevad oma sissemaksed dApp kontole 1 WAVESiga.
Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Teeme vea ja tehing ei lähe läbi. Kuna vaatamata sellele, et olime veendunud, et teeme tehingu Bobi nimel, tegime indeksis vea ja märkisime Pangakonto, millel pole nutikat lepingut. Siinkohal väärib märkimist oluline punkt - ebaõnnestunud tehingute algatamise katsete eest tuleb tasuda ei saa eemaldada! Alice’i saldole on jäänud 2.972 LAINET. Bobil on 3 LAINET.

Bob saatis dApp kontole 1 LAINE.

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

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Bobil on jäänud 1.99 LAINET. See tähendab, et Bob maksis vahendustasu 0.01 WAVES

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Alice'i saldol oli 2.972 LAINET, nüüd on see 3.972. Tehing registreeriti ka Alice'i kontol, kuid dApp'i kontolt (Alice) vahendustasu ei võetud.
Pärast seda, kui Cooper ka kontot täiendas, muutus Alice'i saldoks 4.972 LAINET.

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Saate teada, kellele mitu LAINET ühises rahakotis kuulub, vahekaardil Andmed plokiuurijast.

Cooper muutis meelt, et jätta 1 WAVES üldrahakotti ja otsustas poole afiinsusest välja võtta. Selleks peab ta välja kutsuma tagasivõtmise funktsiooni.

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Kuid me eksisime taas, kuna väljavõtmise funktsioonil on täiesti erinevad parameetrid ja erinev signatuur. RIDE4DAPPSis nutikate lepingute kavandamisel peaksite sellele punktile tähelepanu pöörama

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Cooperil on nüüd bilansis 2.48 LAINET. Vastavalt sellele 3 LAINET - 1 - 0.01 ja seejärel + 0.5 - 0.01. Seega maksab iga sissemakse ja väljamakse kõne 0.01 LAINET. Selle tulemusena muutusid dAppsi omanike tabelis olevad kirjed järgmiselt.

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Bob otsustas ka jagatud rahakotist veidi raha välja võtta, kuid tegi vea ja üritas 1.5 LAINEt välja võtta.

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

Nutilepingul oli aga selle olukorra jaoks kontroll olemas.

Xena on pettur, ta üritas kogukontolt välja võtta 1 WAVES.

Õppige kirjutama Waves'i nutikaid lepinguid RIDE ja RIDE4DAPPS kaudu. 1. osa (mitme kasutaja rahakott)

See ei tulnud tal ka korda.

Järgmises osas vaatleme Alice dApp konto ebatäiuslikkusega seotud keerukamaid probleeme.

Allikas: www.habr.com

Lisa kommentaar