Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Sveiki visi!

Visai neseniai „Waves Labs“. paskelbė konkursas kūrėjams, skirtas RIDE išmaniosios sutarties kalbos plėtinio, skirto decentralizuotoms programoms Ride4Dapps, išleidimui į bandomąjį tinklą!

Mes pasirinkome DAO bylą, nes Ventuary planuoja kurti dApps su socialinėmis funkcijomis: balsavimu, lėšų rinkimu, pasitikėjimo valdymu ir kt.
Pradėjome nuo paprasto pavyzdžio Klausimų ir atsakymų sesijos ir RIDE IDE - pavyzdys su bendra piniginė.

Pažiūrėkime į šį pavyzdį, patikrinkime hipotezes ir pažvelkime į keletą keistenybių:

Leiskite mums turėti Alisą – „dApp“ savininkę
Boob ir Cooper yra Alice partneriai, Alice-BC DAO įkūrėjai
Neli yra verslo savininkė, kuriai reikia finansavimo
Bankas – bankas, platinantis žetonus

1 etapas. Likučių inicijavimas

Norėdami gauti žetonus bangų testavimo tinkle, turite susisiekti čiaupas ir nurodykite adresą, kuriuo siųsti žetonus.
Adresą galite rasti IDE atidarę paskyros informaciją.
Išryškiname 10 BANGŲ banką. Tada patikriname, ar jie atvyko per blokavimo ir operacijų naršyklę: recenzentas

Dabar išdalinkime banko žetonus kitiems dalyviams. (Pastabos: visos operacijos bangų tinkle nėra nemokamos, todėl norint atlikti operacijas, visiems dalyviams reikalingas minimalus teigiamas likutis).

1 BANGOS = 100000000 vienetų (bangų), nes sumos gali būti tik sveikieji skaičiai
0.01 BANGOS (sandorio mokestis) = 1000000

Bankas -> [3 BANGOS] -> Alisa, naudojant pervedimo operaciją (tipas: 4).

Mes patikriname, ar env.SEED, iš kurio pasirašomos operacijos, atitinka mūsų banką:
Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Jei neturite atitinkamos pradinės frazės, tiesiog perjunkite į ją skirtuke Paskyros ir patikrinkite dar kartą.
Po to sukuriame, paskelbiame ir pasirašome 3 WAVE Alice perleidimo sandorį.
Alisos duomenis taip pat galite sužinoti naudodami kintamąjį env.accounts. Numeravimas prasideda nuo 0, todėl Alisa yra env.accounts[1].
Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

Rezultatą taip pat galima stebėti naršyklėje, nuoroda į jį mums bus grąžinta iškart po vykdymo sandorius.

Užtikriname, kad Alisos balansas būtų papildytas 3 BANGOS, o banko likutis išliktų 10 - 3 - 0.01 = 0.699.
Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Boob ir Cooper siunčiame po 3 BANGAS, o Neli, Xena ir Markas po 0.2 BANGOS tokiu pačiu būdu.
(Pastabos: padarėme vieno simbolio klaidą ir išsiuntėme Neli 0.02 BANGOS. Būkite atsargūs!)

broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))

Papildę visų dalyvių likučius, matome:
Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

2 etapas. Sukurkite dApp paskyrą

Sutarėme, kad Alisa bus decentralizuotos programos kūrėja ir savininkė.
Eikite į Paskyros, nustatykite kaip SEED ir patikrinkite, ar env.SEED atitinka Alisa.

Pabandykime Alisos paskyroje įdiegti kuo paprastesnį scenarijų (sutartį).
Išmanieji kontaktai programoje „Waves“ yra predikatai, kurie tam tikromis sąlygomis draudžia arba leidžia atlikti bet kokio tipo siunčiamas operacijas. Šiuo atveju ši sąlyga yra VISADA. Sutarties kodas yra teisingas. Skambinkite deploy ().

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Mokestis už setScript operaciją 1400000/100000000 = 0.014 BANGŲ. Alisos balanse liko 2.986 XNUMX BANGOS.

Dabar pabandykime Alice paskyroje įdiegti sudėtingesnę išmaniųjų sutarčių logiką, aprašytą pavyzdys

Ride4Dapps dabar yra 2 nauji komentarų tipai:

  1. @Callable(i) — kaip parametrą i ima duomenis apie tai, kuri sąskaita iškvietė / pasirašė operaciją. Būtent šios funkcijos rezultatas lemia dApp paskyros būsenos pasikeitimą. Kitos paskyros gali kurti operacijas ir vykdyti funkcijas su šia anotacija ir keisti dApp paskyros būseną.
  2. @Verifier(tx) — Operacijų tikrintuvas su operacijos tx parametru. Atitinka predikato logiką iš RIDE. Būtent šia išraiška galite leisti arba uždrausti tolesnius išmaniųjų sutarčių logikos pakeitimus dApp paskyroje.

Padarykime dApp sąskaitą kaip bendrą piniginę visiems dalyviams.
Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Norėdami patikrinti, kuri sutartis šiuo metu yra aktyvi jūsų paskyroje, galite nukopijuoti išmaniosios sutarties base64 kodą blokų naršyklėje ir atpažinti jį naudodami dekompiliatorių (pavyzdžiui)
Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)
Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)
Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Užtikriname, kad išmaniosios sutarties logika atitiktų tai, ko tikimės.
Alisos balanse liko 2.972 XNUMX BANGOS.

Ši dApp seka, kiek kiekvienas dalyvis įneša į bendrąjį fondą per mechanizmą duomenų operacija – duomenų įvedimas (dabartinis raktas, nauja suma), kur currentKey yra sąskaita, kuri iškviečia indėlio funkciją, o newAmount yra papildyto likučio vertė.

Boob ir Cooper perveda į dApp sąskaitą su 1 WAVE.
Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Padarome klaidą ir sandoris neįvyksta. Kadangi, nepaisant to, kad buvome įsitikinę, kad atliekame operaciją Bobo vardu, padarėme klaidą indekse ir nurodėme banko sąskaitą, kurioje nėra išmaniosios sutarties. Čia verta atkreipti dėmesį į svarbų dalyką - už nesėkmingus bandymus inicijuoti operacijas taikomas mokestis negalima pašalinti! Alisos balanse liko 2.972 3 BANGOS. Bobas turi XNUMX BANGAS.

Bobas išsiuntė 1 WAVE į dApp paskyrą.

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Bobui liko 1.99 BANGOS. Tai yra, Bobas sumokėjo 0.01 WAVES komisinį

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Alisos balanse buvo 2.972 BANGOS, dabar – 3.972. Sandoris taip pat buvo užregistruotas Alisos sąskaitoje, tačiau iš „dApp“ paskyros (Alisa) nebuvo imtas joks komisinis mokestis.
Po to, kai Cooperis taip pat papildė sąskaitą, Alice likutis tapo 4.972 XNUMX BANGOS.

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Galite sužinoti, kam priklauso, kiek BANGŲ bendroje piniginėje, skirtuke Duomenys esančiame blokų naršyklėje.

Cooperis persigalvojo palikdamas 1 WAVE sumą bendroje piniginėje ir nusprendė atsiimti pusę giminystės. Norėdami tai padaryti, jis turi iškviesti atšaukimo funkciją.

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Tačiau mes vėl klydome, nes atšaukimo funkcija turi visiškai skirtingus parametrus ir skirtingą parašą. Kurdami išmaniąsias sutartis RIDE4DAPPS, turėtumėte atkreipti dėmesį į šį punktą

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Dabar Cooperio balanse yra 2.48 BANGOS. Atitinkamai, 3 BANGOS - 1 - 0.01, o tada + 0.5 - 0.01. Atitinkamai, kiekvienas skambutis įnešti ir išimti kainuoja 0.01 BANGOS. Dėl to dApps savininkų lentelės įrašai pasikeitė taip.

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Bobas taip pat nusprendė išimti šiek tiek pinigų iš bendros piniginės, tačiau padarė klaidą ir bandė atsiimti 1.5 BANGOS.

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Tačiau išmanioji sutartis turėjo šios situacijos patikrinimą.

Xena yra sukčius, ji bandė išsiimti 1 WAVE iš visos sąskaitos.

Mokymasis rašyti „Waves“ išmaniąsias sutartis RIDE ir RIDE4DAPPS. 1 dalis (Kelių naudotojų piniginė)

Jai taip pat nepasiteisino.

Kitoje dalyje apžvelgsime sudėtingesnes problemas, susijusias su Alice dApp paskyros netobulumu.

Šaltinis: www.habr.com

Добавить комментарий