
Tere kÔigile!
Alles hiljem Waves Labs konkurss arendajatele, mis on seotud RIDE nutilepingute keele laienduse testvÔrgule kÀivitamisega ja detsentraliseeritud rakenduste jaoks Ride4Dapps!
Valisime DAO juhtumi, kuna plaanib arendada sotsiaalsete funktsioonidega dAppâi: hÀÀletamine, rahastamine, usalduslik haldamine jne.
Alustasime lihtsa nĂ€ite uurimisega ja â nĂ€ites koos .
Uurime seda nĂ€idet, testime hĂŒpoteese ja vaatame mĂ”ningaid kummalisi asju:
Oletame, et meil on Alice â dApp omanik
Boob ja Cooper â Aliceâi partnerid, Alice-BC DAO kaasasutajad
Neli â Ă€riomanik, kellele on vajalik rahastus
Bank â pank, mis jagab mĂŒnte
Etapp 1. Balansside initsialiseerimine
Selleks, et testvĂ”rgus waves mĂŒnte saada, tuleb pöörduda ja mĂ€rkida aadress, kuhu mĂŒnte saata.
Aadressi saab IDEâs, avades konto andmed.
Laendame Bankâile 10 WAVES. SeejĂ€rel kontrollime, et need on seotud plokiahela ja tehingute vaataja kaudu:
NĂŒĂŒd jagame mĂŒnte pangast teistele osalejatele. (MĂ€rkused: KĂ”ik tehingud waves vĂ”rgus ei ole tasuta, seetĂ”ttu peavad kĂ”ik osalejad sooritama tehingute jaoks omama minimaalse positiivse saldo.)
1 WAVES = 100000000 ĂŒhikut (wavelets), kuna summad vĂ”ivad olla ainult tĂ€isarvud
0.01 WAVES (tehingutasu) = 1000000
Bank -> [3 WAVES] -> Alice, lĂ€bi TransferTransaction (TĂŒĂŒp: 4).
Kontrollime, et env.SEED, mille abil tehingud allkirjastatakse, vastaks meie Bankâile:

ïżŒ
Kui sul ei ole vastavust seed fraasidega, vaheta lihtsalt selle vahekaardile Accounts ja kontrolli veel kord.
SeejĂ€rel loome, kuulutame ja allkirjastame tehingu 3 WAVES edastamiseks Aliceâile.
Alice'i andmeid saab samuti leida muutuja env.accounts kaudu. Numbrimine algab 0-st, seega on Alice env.accounts[1].

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))Tulemust saab samuti jÀlgida vaatamisprogrammis, link sellele antakse meile kohe pÀrast tÀitmist .
Veendume, et Aliceâi saldo suurenes 3 WAVES vĂ”rra ning pangas jĂ€i 10 â 3 â 0.01 = 0.699.


Saadame Boobile ja Cooperile mÔlemale 3 WAVES ning Neli, Xena ja Mark saavad 0.2 WAVES sama meetodiga.
(MĂ€rkused: Me tegime vea ĂŒhe tĂ€he vĂ”rra ja saatsime Neli 0.02 WAVES. Ole ettevaatlik!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))PÀrast kÔigi osalejate balansside tÀiendamist nÀeme:

Etapp 2. dApp konto loomine
Me leppisime kokku, et detsentraliseeritud rakenduse loojaks ja omanikuks saab Alice.
Accounts menĂŒĂŒs seadistame selle SEED-iks ja kontrollime, et env.SEED vastab Alices.
Proovime Alices kontole installida kÔige lihtsama skripti (leping), mis vÔimalik.
Waves'is on nutilepingud predikaadid, mis keelavad vĂ”i lubavad teatud tĂŒĂŒpi vĂ€ljaminevate tehingute toimumise teatud tingimustel. Antud juhul on see tingimus - ALWAYS. Lepingu kood - true. Kutsub ĂŒles deploy().

SetScript tehingu tasu on 1400000/100000000 = 0.014 WAVES. Alices jÀÀb kontole 2.986 WAVES.
Proovime nĂŒĂŒd Alices kontole installida keerukama nutilepingute loogika, mis on kirjeldatud
Ride4Dapps nĂŒĂŒd sisaldab 2 uut annotatsiooni tĂŒĂŒpi:
- @Callable(i) â vĂ”tab parametritena i, andmed selle kohta, milline konto kutsus/alla kirjutas tehingule. Just selle funktsiooni tulemus mÀÀrab dApp konto oleku muutuse. Teised kontod vĂ”ivad luua tehinguid ja tĂ€ita funktsioone, millel on see annotatsioon, muutes dApp konto olekut.
- @Verifier(tx) â Tehingu verifikaator parametritega tx tehingu kohta. Vasta RIDE predikaatide loogikale. Just selles avaldises saab lubada vĂ”i keelata nutilepingute loogika edasised muudatused dApp kontol.
Teeme dApp konto kĂ”igi osalejate ĂŒhise rahakotina.

Kuna soovime kontrollida, milline leping on kontol aktiivne, saame plokiahelate uurijas kopeerida base64 koodi nutilepingust ja tuvastada selle dekompilaatoriga ()



Veendume, et nutilepingute loogika vastab meie ootustele.
Alices jÀÀb kontole 2.972 WAVES.
See dApp jĂ€lgib, kui palju iga osaline ĂŒhisesse fondi panustab, kasutades mehhanismi data transaction â DataEntry(currentKey, newAmount), kus currentKey on konto, mis kutsub ĂŒles funktsiooni deposit, ja newAmount on lisatud tasakaalu vÀÀrtus.
Boob ja Cooper panustavad oma hoiuseid dApp kontole 1 WAVES.

Teeme vea ja tehing ei toimu. Kuigi me veendusime, et teeme tehingu Bob'i nimel, eksisime indeksis ja mÀÀrasime konto Bank, millel pole nutilepingut. Siinkohal on oluline mÀrkida, et ebaÔnnestunud tehingute algatamise eest teenustasu ei vÔeta! Alices jÀÀb kontole 2.972 WAVES. Bob'il 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 }]}))
Bob'il on jÀÀnud 1.99 WAVES. See tÀhendab, et Bob maksis 0.01 WAVES teenustasu.

Alice'il oli kontol algselt 2.972 WAVES, nĂŒĂŒd on 3.972. Alice'i kontol on samuti registreeritud tehing, kuid dApp Account (Alice) puhul ei olnud teenustasu maha arvatud.
PĂ€rast seda, kui Cooper ka tĂ€iendavalt Alice'ile raha kandis, on tema bilanss nĂŒĂŒd 4.972 WAVES.

Kellel on ĂŒldrahakotis kui palju WAVES'i, saab vaadata plokiahelat analĂŒsaatoris vahekaardilt Data.
Cooper otsustas mitte hoida 1 WAVES'i ĂŒldrahakotis ja soovis vĂ€lja vĂ”tta poole oma varadest. Selleks peab ta kutsuma funktsiooni withdraw.

Kuid me eksisime taas, kuna withdraw funktsioonil on hoopis teised parameetrid, teine allkiri. Kui kavandate RIDE4DAPPS'i nutilepinguid, tasub sellele tÀhelepanu pöörata.

Cooper'i bilanss on nĂŒĂŒd 2.48 WAVES. Seega 3 WAVES - 1 - 0.01, ja siis + 0.5 - 0.01. Iga deposit ja withdraw kutse maksab 0.01 WAVES. LĂ”puks muudeti dApps omanikeregistris andmed jĂ€rgmiselt.

Bob otsustas samuti ĂŒldrahakotist natuke raha vĂ€lja vĂ”tta, kuid eksis ja proovis vĂ€lja vĂ”tta 1.5 WAVES.

Kuid nutilepingus oli sellise olukorra jaoks kontroll.
Xena on petis, proovis vĂ€lja vĂ”tta 1 WAVES'i ĂŒldkontolt.

Tal ei tulnud samuti midagi vÀlja.
JĂ€rgmisel korral vaatame keerukamaid teemasid, mis on seotud Alice dApp Account'i puudustega.
Allikas: habr.com
