Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

Tere kÔigile!

Alles hiljem Waves Labs teatas konkurss arendajatele, mis on seotud RIDE nutilepingute keele laienduse testvÔrgule kÀivitamisega ja detsentraliseeritud rakenduste jaoks Ride4Dapps!

Valisime DAO juhtumi, kuna Ventuary plaanib arendada sotsiaalsete funktsioonidega dApp’i: hÀÀletamine, rahastamine, usalduslik haldamine jne.
Alustasime lihtsa nĂ€ite uurimisega Q&A seansid ja RIDE IDE — nĂ€ites koos ĂŒhisrahakotiga.

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 faucet 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: vaataja

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:
Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)
ïżŒ
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].
Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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 tehingu.

Veendume, et Alice’i saldo suurenes 3 WAVES vĂ”rra ning pangas jĂ€i 10 — 3 — 0.01 = 0.699.
Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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:
Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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().

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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 nĂ€ites

Ride4Dapps nĂŒĂŒd sisaldab 2 uut annotatsiooni tĂŒĂŒpi:

  1. @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.
  2. @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.
Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

Kuna soovime kontrollida, milline leping on kontol aktiivne, saame plokiahelate uurijas kopeerida base64 koodi nutilepingust ja tuvastada selle dekompilaatoriga (nÀiteks)
Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)
Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)
Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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.
Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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 }]}))

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

Bob'il on jÀÀnud 1.99 WAVES. See tÀhendab, et Bob maksis 0.01 WAVES teenustasu.

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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.

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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.

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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.

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

Kuid nutilepingus oli sellise olukorra jaoks kontroll.

Xena on petis, proovis vĂ€lja vĂ”tta 1 WAVES'i ĂŒldkontolt.

Õpime kirjutama Wavesi nutilepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

Tal ei tulnud samuti midagi vÀlja.

JĂ€rgmisel korral vaatame keerukamaid teemasid, mis on seotud Alice dApp Account'i puudustega.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster