Õ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

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster