
Tere kÔigile!
Hiljuti teatas Waves Labs arendajatele, mis on seotud RIDE nutikontakti keele laienduse beta versiooni vÀljalaskmisega, et luua detsentraliseeritud rakendusi Ride4Dapps!
Valisime DAO juhtumi, kuna plaanib arendada dApp-i sotsiaalsete funktsioonidega: hÀÀletamine, rahastamine, usalduslik haldamine jne.
Alustasime lihtsa nĂ€itena ja â nĂ€ide ĂŒldisest rahakotist. .
Vaatame seda nĂ€idet lĂ€hemalt, kontrollime hĂŒpoteese ja arutame mĂ”ningaid kummalisi aspekte:
Oletame, et meil on Alice â dApp omaniku
Boob ja Cooper â Alice'i partnerid, Alice-BC DAO kaasasutajad
Neli â ettevĂ”tte omanik, kellele on vajalik rahastamine
Pank â pank, mis jagab tokenite.
Etapp 1. Balansside initsialiseerimine
Kuna testnetis Waves'i tokenite saamiseks tuleb pöörduda ja mÀrkida aadress, kuhu tokenid saata.
Aadressi saab teada IDE-st, avades konto andmed.
MÀÀrame Pangale 10 WAVES. SeejÀrel kontrollime, et need on saabunud plokiahela ja tehingute vaatleja kaudu:
NĂŒĂŒd jagame tokenid pangast ĂŒlejÀÀnud osalejatele. (MĂ€rkus: KĂ”ik tehingud Waves vĂ”rgus ei ole tasuta, seetĂ”ttu vajavad kĂ”ik osalejad miinimum positiivset saldo, et tehinguid teha).
1 WAVES = 100000000 ĂŒhikut (wavelets), kuna summad vĂ”ivad olla ainult tĂ€isarvud.
0,01 WAVES (tehingutasu) = 1000000
Pank -> [3 WAVES] -> Alice, TransferTransaction'i kaudu (TĂŒĂŒp: 4).
Kontrollime, et env.SEED, millega tehingud allkirjastatakse, vastab meie Pangale:

ïżŒ
Kui teil ei ole vastavat seed fraasi, lĂŒlitage lihtsalt Accounts vahekaardile ja kontrollige uuesti.
PĂ€rast seda loome, kuulutame ja allkirjastame tehingu 3 WAVES ĂŒlekandmiseks Alicele.
Alice'i andmeid saab samuti leida muutuja env.accounts kaudu. Numeratsioon algab 0-st, seega Alice on env.accounts[1].

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))Tulemust saab samuti jÀlgida sirvijas, link sellele tagastatakse meile kohe pÀrast tÀitmist. .
Veenduge, et Alice'i saldo on lisandunud 3 WAVES, ja pangas on jÀÀnud 10 â 3 â 0.01 = 0.699.


Saadame Boobile ja Cooperile poognas 3 WAVES, Neli, Xena ja Markile aga 0.2 WAVES samamoodi.
(MĂ€rkused: tegime ĂŒhe mĂ€rgiga vea ja saatsime Neli 0.02 WAVES. Olge ettevaatlikud!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))Kuna oleme kÔikide osalejate kontod tÀiendatud, nÀeme:

Etapp 2. dApp konto loomine
Oleme kokku leppinud, et detsentraliseeritud rakenduse looja ja omanik on Alice.
Accounts sektsioonis seadistame tema SEED-iks ja kontrollime, et env.SEED vastab Alicele.
Proovime seadistada Alice kontole kÔige lihtsama skripti (lepingu) vÔimalikest.
Wavesâi nutikontaktid on predikaadid, mis keelavad vĂ”i lubavad teatud tĂŒĂŒpi vĂ€ljuvate tehingute toimumist teatud tingimustel. Antud juhul on see tingimus â ALWAYS. Lepingu kood â true. Kutsume vĂ€lja deploy().

SetScript tehingu tasu 1400000/100000000 = 0.014 WAVES. Alicel on kontol jÀÀnud 2.986 WAVES.
Proovime nĂŒĂŒd seadistada Alice kontole keerukama nutikonto loogika, nagu on kirjeldatud
Ride4Dapps kaasa arvatud 2 uut tĂŒĂŒpi annotatsioone:
- @Callable(i) â vĂ”tab parameetrina i andmed selle kohta, milline konto kĂ€ivitas/aloitas tehingu. Just selle funktsiooni tulemus mÀÀrab dApp konto seisundi muutumise. Teised kontod saavad luua tehinguid ja tĂ€ita funktsioone selle annotatsiooni abil ning muuta dApp konto seisundit.
- @Verifier(tx) â Tehingu valideerija parameetriga tx. Vastab RIDE-st pĂ€rinevatele predikaatide loogikatele. Just selles vĂ€ljendis saab lubada vĂ”i keelata edasised muudatused nutilepingute loogikas dApp kontol.
Teeme dApp kontolt ĂŒhise rahakoti kĂ”igile osalejatele.

Selleks, et kontrollida, milline leping on kontol aktiivne, saab blokki vaatlejasse kopeerida nutilepingu base64 koodi ja dekompileerida selle kaudu ()



Veenduge, et nutilepingu loogika vastab sellele, mida me ootame.
Alisil on jÀÀnud 2,972 WAVES.
See dApp arvestab, kui palju iga osaleja panustab ĂŒhisesse fondi lĂ€bi mehhanismi data transaction â DataEntry(currentKey, newAmount), kus currentKey on konto, mis kutsub esile funktsiooni deposit, ja newAmount on tĂ€iendatud saldo vÀÀrtus.
Boob ja Cooper sisenevad oma hoiused dApp kontole 1 WAVES.

Teeme vea ja tehing ei toimi. Kuigi me veendusime, et teeme tehingu Bobi nimel, eksisime indeksiga ja nĂ€itasime Banki kontot, kus ei ole nutilepingut. Siin tasub mĂ€rkida oluline punkt â ebaĂ”nnestunud tehingute proovimise eest tasu ei vĂ”eta. Ei vĂ”eta! Alicel on jÀÀnud 2.972 WAVES. Bobil on 3 WAVES.
Bob saatis 1 WAVES dApp kontole.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bobil on jÀÀnud 1.99 WAVES. See tÀhendab, et Bob maksis 0.01 WAVES teenustasu.

Alicel oli 2.972 WAVES, nĂŒĂŒd on 3.972. Alice'i kontol on samuti registreeritud tehing, kuid dApp kontolt (Alice) ei ole mingit teenustasu maha arvatud.
PĂ€rast seda, kui Cooper samuti Alicele raha juurde kandis, on Alicel nĂŒĂŒd 4.972 WAVES.

Keda kui palju WAVES ĂŒldrahakotis kuulub, saab vaadata plokiahelate sirvijast vahekaartilt Andmed.
Cooper mĂ”tles ĂŒmber ja otsustas mitte jĂ€tta 1 WAVES summat ĂŒldrahakotti, vaid jĂ€tta pool rahast vĂ€lja vĂ”tta. Selleks peab ta kutsuma ĂŒles tĂ”mbamisfunktsiooni.

Kuid me eksisime taas, kuna withdraw funktsioonil on tÀiesti erinevad parameetrid ja signatuur. Kui kavandate RIDE4DAPPS-i jaoks nutikaid lepinguid, peaksite sellele tÀhelepanu pöörama.

Cooperil on nĂŒĂŒd saldo 2,48 WAVES. Seega 3 WAVES â 1 â 0,01 ja seejĂ€rel + 0,5 â 0,01. Iga deposit ja withdraw kutse maksab 0,01 WAVES. LĂ”puks muutus dAppide omanike tabelis kirjeid jĂ€rgnevalt.

Bob otsustas samuti ĂŒldrahakotist mĂ”ningat summat vĂ€lja vĂ”tta, kuid eksis ja ĂŒritas vĂ€lja vĂ”tta 1,5 WAVES-i.

Kuid nutikas leping kontrollis sellist olukorda.
Xena on petis, kes ĂŒritas vĂ€lja vĂ”tta 1 WAVES-i ĂŒhiselt kontolt.

Temal ei Ônnestunud samuti midagi.
JĂ€rgmises osas vaatame keerukamaid teemasid, mis on seotud Alice dApp Accounti puudustega.
Allikas: habr.com
