Sveiki visi!
Visai neseniai „Waves Labs“.
Mes pasirinkome DAO bylą, nes
Pradėjome nuo paprasto pavyzdžio
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
Adresą galite rasti IDE atidarę paskyros informaciją.
Išryškiname 10 BANGŲ banką. Tada patikriname, ar jie atvyko per blokavimo ir operacijų naršyklę:
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ą:

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].
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
Užtikriname, kad Alisos balansas būtų papildytas 3 BANGOS, o banko likutis išliktų 10 - 3 - 0.01 = 0.699.
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:
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 ().
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ą
Ride4Dapps dabar yra 2 nauji komentarų tipai:
- @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ą.
- @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.
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ų (
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.
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 }]}))
Bobui liko 1.99 BANGOS. Tai yra, Bobas sumokėjo 0.01 WAVES komisinį
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.
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ą.
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ą
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.
Bobas taip pat nusprendė išimti šiek tiek pinigų iš bendros piniginės, tačiau padarė klaidą ir bandė atsiimti 1.5 BANGOS.
Tačiau išmanioji sutartis turėjo šios situacijos patikrinimą.
Xena yra sukčius, ji bandė išsiimti 1 WAVE iš visos sąskaitos.
Jai taip pat nepasiteisino.
Kitoje dalyje apžvelgsime sudėtingesnes problemas, susijusias su Alice dApp paskyros netobulumu.
Šaltinis: www.habr.com