Hola a todos!
Duela gutxi, Waves Labs
DAO kasua aukeratu dugulako
Adibide sinple batekin hasi gara
Ikus dezagun adibide hau, proba ditzagun hipotesiak eta ikus ditzagun bitxikeria batzuk:
Izan dezagun Alice - dApp Owner
Boob eta Cooper Alice-ko bazkideak dira, Alice-BC DAO-ren sortzaileak
Neli finantzaketa behar duen enpresa jabea da
Bankua - tokenak banatzen dituen bankua
1. etapa. Balantzeak hasieratzea
Olatuen proba sarean tokenak jasotzeko, harremanetan jarri behar duzu
Helbidea IDEan aurki dezakezu zure kontuaren xehetasunak irekita.
Bank 10 WAVES azpimarratzen dugu. Ondoren, blokeo eta transakzio arakatzailearen bidez iritsi direla egiaztatuko dugu:
Orain bana ditzagun tokenak bankutik gainontzeko partaideei. (Oharrak: waves sareko transakzio guztiak ez dira doakoak, beraz, parte-hartzaile guztiek transakzioak egiteko gutxieneko saldo positiboa behar da).
1 OLATU = 100000000 unitate (uhinak), kopuruak osoak baino ezin baitira izan
0.01 WAVES (Transakzio-kuota) = 1000000
Bankua -> [3 WAVES] -> Alice, TransferTransaction bidez (Mota: 4).
Transakzioak sinatzen diren env.SEED gure Bankuarekin bat datorrela egiaztatzen dugu:
οΏΌ
Ez baduzu bat datorren hazi esaldirik, aldatu Kontuak fitxan eta egiaztatu berriro.
Horren ostean, 3 WAVES Aliceren transferentziarako transakzio bat sortu, iragarri eta sinatzen dugu.
Aliceren datuak env.accounts aldagaiaren bidez ere aurki ditzakezu. Zenbakitzea 0tik hasten da, beraz, Alice env.accounts[1] da.
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Emaitza arakatzailean ere ikus daiteke, horretarako esteka bat itzuliko zaigu exekutatu eta berehala
Ziurtatzen dugu Aliceren saldoa 3 OLATUrekin betetzen dela, eta bankuko saldoa 10 - 3 - 0.01 = 0.699an geratzen dela.
Boob eta Cooper 3 OLATU bidaltzen diegu bakoitzari, eta Neli, Xena eta Mark 0.2 OLATU bakoitzari modu berean.
(Oharrak: karaktere bakarreko errore bat egin dugu eta Neli 0.02 OLATUAK bidali ditugu. Kontuz!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Parte hartzaile guztien saldoak bete ondoren, honako hauek ikusiko ditugu:
2. etapa. Sortu dApp kontu bat
Alice aplikazio deszentralizatuaren sortzailea eta jabea izango zela adostu genuen.
Joan Kontuak atalera, ezarri SEED gisa eta egiaztatu env.SEED bat datorrela Alice.
Saia gaitezen Aliceren kontuan ahalik eta script (kontratua) errazena instalatzen.
Waves-eko kontaktu adimentsuak baldintza jakin batzuetan irteerako edozein transakzio mota egitea debekatzen edo ahalbidetzen duten predikatuak dira. Kasu honetan, baldintza hau BETI da. Kontratuaren kodea egia da. Deitu deploy().
SetScript transakzio bakoitzeko kuota 1400000/100000000 = 0.014 WAVES. Alizi 2.986 OLATU geratzen zaizkio saldoan.
Saia gaitezen orain Alice kontuan deskribatutako kontratu adimendunaren logika konplexuagoa instalatzen
Ride4Dapps orain 2 ohar mota berri ditu:
- @Deigarria(i) β i parametro gisa hartzen du, transakzioa zein kontu deitu/sinatutakoari buruzko datuak. Funtzio horren emaitza da dApp kontuaren egoeraren aldaketa zehazten duena. Beste kontu batzuek transakzioak sortu eta funtzioak exekutatu ditzakete ohar honekin eta dApp kontuaren egoera alda dezakete.
- @Egiaztatzailea(tx) β Transakzio egiaztatzailea transakzio tx parametroarekin. RIDEren predikatu-logikari dagokio. Adierazpen honetan dApp kontuan kontratu adimendunen logikan aldaketa gehiago onartu edo debekatu ditzakezu.
Egin dezagun dApp kontua partaide guztien zorro komun gisa.
Zure kontuan zein kontratu aktibo dagoen egiaztatzeko, kontratu adimendunaren base64 kodea kopiatu dezakezu bloke esploratzailean eta deskonpiladore baten bidez ezagutu (
Kontratu adimendunaren logika espero dugunarekin bat datorrela ziurtatzen dugu.
Alizi 2.972 OLATU geratzen zaizkio saldoan.
DApp honek parte-hartzaile bakoitzak funts komunean zenbat ekarpen egiten duen kontrolatzen du mekanismo baten bidez datu-transakzioa β DataEntry (uneko gakoa, kantitate berria), non currentKey gordailu funtzioari deitzen dion kontua den eta newAmount berritutako saldoaren balioa den.
Boob eta Cooper-ek gordailuak egiten dituzte dApp kontuan 1 WAVE-rekin.
Akats bat egiten dugu eta transakzioa ez da aurrera egiten. Geroztik, Bob-en izenean transakzio bat egiten ari ginela sinetsita geunden arren, akats bat egin dugu indizean eta kontratu adimendun bat ez duen Banku-kontu bat adierazi dugu. Hemen puntu garrantzitsu bat aipatzea merezi du: transakzioak hasteko arrakastarik gabeko saiakerengatik kuota dago. ezin da kendu! Alizi 2.972 OLATU geratzen zaizkio saldoan. Bobek 3 OLATU ditu.
Bob-ek 1 WAVE bidali ditu dApp kontura.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bobi 1.99 OLATU geratzen zaizkio. Hau da, Bobek 0.01 WAVES komisioa ordaindu zuen
Alicek 2.972 OLATU zituen saldoan, orain 3.972 da. Alice kontuan transakzio bat ere erregistratu zen, baina ez zen komisiorik kobratu dApp kontutik (Alice).
Cooperek ere kontua bete ondoren, Aliceren saldoa 4.972 OLATU bihurtu zen.
Diru-zorro arruntean zenbat WAVE norena den jakin dezakezu bloke-esploratzailean Datuak fitxan.
Cooper-ek iritzia aldatu zuen 1 WAVES kopurua zorro orokorrean uzteari buruz eta afinitatearen erdia kentzea erabaki zuen. Horretarako, kendu funtzioari deitu behar dio.
Hala ere, berriro oker geunden, kentzeko funtzioak parametro guztiz desberdinak eta sinadura ezberdina dituelako. RIDE4DAPPS-en kontratu adimendunak diseinatzen dituzunean, arreta jarri beharko zenuke puntu honetan
Cooper-ek orain 2.48 OLATU ditu bere balantzean. Horren arabera, 3 OLATUAK - 1 - 0.01, eta gero + 0.5 - 0.01. Horren arabera, gordailatzeko eta ateratzeko dei bakoitzak 0.01 OLATU balio du. Ondorioz, dApps jabeen taulako sarrerak honela aldatu ziren.
Bob-ek diru-zorro partekatutik diru pixka bat ateratzea ere erabaki zuen, baina akats bat egin zuen eta 1.5 WAVES kentzen saiatu zen.
Hala ere, kontratu adimendunak egoera honen egiaztapena zuen.
Xena iruzurgilea da, kontu osotik 1 WAVE kentzen saiatu zen.
Berari ere ez zion balio.
Hurrengo zatian, Alice dApp kontuaren inperfekzioarekin lotutako arazo konplexuagoak aztertuko ditugu.
Iturria: www.habr.com