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

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

Tere kÔigile!

Hiljuti teatas Waves Labs konkursist arendajatele, mis on seotud RIDE nutikontakti keele laienduse beta versiooni vÀljalaskmisega, et luua detsentraliseeritud rakendusi Ride4Dapps!

Valisime DAO juhtumi, kuna Ventuary plaanib arendada dApp-i sotsiaalsete funktsioonidega: hÀÀletamine, rahastamine, usalduslik haldamine jne.
Alustasime lihtsa nĂ€itena Q&A sessioonis ja RIDE IDE — nĂ€ide ĂŒldisest rahakotist. Vaatame seda nĂ€idet, kontrollime hĂŒpoteese ja kĂ€sitleme mĂ”ningaid eripĂ€rasid:.

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 faucet'i 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: vaatleja

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

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

Veenduge, et Alice'i saldo on lisandunud 3 WAVES, ja pangas on jÀÀnud 10 — 3 — 0.01 = 0.699.
Õpime kirjutama Wavesi nutikaid lepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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

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

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

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

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

Ride4Dapps kaasa arvatud 2 uut tĂŒĂŒpi annotatsioone:

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

Selleks, et kontrollida, milline leping on kontol aktiivne, saab blokki vaatlejasse kopeerida nutilepingu base64 koodi ja dekompileerida selle kaudu (nÀiteks)
Õpime kirjutama Wavesi nutikaid lepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)
Õpime kirjutama Wavesi nutikaid lepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)
Õpime kirjutama Wavesi nutikaid lepinguid RIDE ja RIDE4DAPPS. Osa 1 (Mitme kasutaja rahakott)

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

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

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

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

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

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.

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

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.

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

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.

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

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.

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

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

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

Kuid nutikas leping kontrollis sellist olukorda.

Xena on petis, kes ĂŒritas vĂ€lja vĂ”tta 1 WAVES-i ĂŒhiselt kontolt.

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

Temal ei Ônnestunud samuti midagi.

JĂ€rgmises osas vaatame keerukamaid teemasid, mis on seotud Alice dApp Accounti puudustega.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster