
Sveiki visiem!
Pavisam nesen Waves Labs izstrādātāju konkurss, kas veltīts RIDE viedā līguma valodas paplašinājuma izlaišanai decentralizētām lietojumprogrammām Ride4Dapps testa tīklā!
Mēs izvēlējāmies DAO lietu, jo plāno izstrādāt dApps ar sociālajām funkcijām: balsošanu, līdzekļu vākšanu, trasta pārvaldību utt.
Mēs sākām ar vienkāršu piemēru un - piemērs ar .
Apskatīsim šo piemēru, pārbaudīsim hipotēzes un apskatīsim dažas dīvainības:
Ļaujiet mums iegūt Alisi — dApp īpašnieci
Boob un Cooper ir Alises partneri, Alice-BC DAO līdzdibinātāji
Neli ir uzņēmuma īpašnieks, kuram nepieciešams finansējums
Banka - banka, kas izplata žetonus
1. posms. Atlikumu inicializācija
Lai saņemtu žetonus viļņu testa tīklā, jums jāsazinās un norādiet adresi, uz kuru sūtīt žetonus.
Adresi varat atrast IDE, atverot sava konta informāciju.
Mēs izceļam 10. banku VIĻŅUS. Pēc tam mēs pārbaudām, vai tie ieradās, izmantojot bloķēšanas un darījumu pārlūkprogrammu:
Tagad izdalīsim žetonus no bankas pārējiem dalībniekiem. (Piezīmes: visi darījumi viļņu tīklā nav bezmaksas, tāpēc visiem dalībniekiem ir nepieciešams minimālais pozitīvs atlikums, lai veiktu darījumus).
1 WAVES = 100000000 vienību (viļņu), jo summas var būt tikai veseli skaitļi
0.01 WAVES (darījuma maksa) = 1000000
Banka -> [3 VIĻŅI] -> Alise, izmantojot TransferTransaction (tips: 4).
Mēs pārbaudām, vai env.SEED, no kuras tiek parakstīti darījumi, atbilst mūsu bankai:


Ja jums nav atbilstošas sākuma frāzes, vienkārši pārslēdzieties uz to cilnē Konti un pārbaudiet vēlreiz.
Pēc tam mēs izveidojam, paziņojam un parakstām darījumu par 3 WAVES Alice nodošanu.
Varat arī uzzināt Alises datus, izmantojot mainīgo env.accounts. Numerācija sākas no 0, tāpēc Alise ir env.accounts[1].

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Rezultātu var novērot arī pārlūkprogrammā, saite uz to mums tiks atgriezta tūlīt pēc izpildes .
Mēs pārliecināmies, ka Alises bilance tiek papildināta par 3 WAVES un bankas atlikums paliek 10 - 3 - 0.01 = 0.699.


Mēs nosūtām Boobam un Kūperam katrs pa 3 VIĻŅIEM, kā arī Nelijai, Ksenai un Markam katram pa 0.2 VIĻŅIEM.
(Piezīmes: mēs pieļāvām vienas rakstzīmes kļūdu un nosūtījām Neli 0.02 VIĻŅUS. Esiet uzmanīgi!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Pēc visu dalībnieku atlikumu papildināšanas mēs redzam:

2. posms. Izveidojiet dApp kontu
Mēs vienojāmies, ka Alise būs decentralizētās lietojumprogrammas veidotāja un īpašniece.
Atveriet sadaļu Konti, iestatiet to kā SEED un pārbaudiet, vai env.SEED atbilst Alisei.
Mēģināsim Alises kontā uzstādīt pēc iespējas vienkāršāko skriptu (līgumu).
Viedie kontakti programmā Waves ir predikāti, kas noteiktos apstākļos aizliedz vai atļauj jebkāda veida izejošos darījumus. Šajā gadījumā šis nosacījums ir VIENMĒR. Līguma kods ir patiess. Izsauciet deploy ().

Maksa par setScript darījumu 1400000/100000000 = 0.014 WAVES. Alises bilancē ir palikuši 2.986 VIĻŅI.
Tagad mēģināsim Alises kontā instalēt sarežģītāku viedo līgumu loģiku, kas aprakstīta rakstā
Ride4Dapps tagad ir iekļauti 2 jauni anotāciju veidi:
- @Callable(i) — par parametru i ņem datus par to, kurš konts izsauca/parakstīja darījumu. Šīs funkcijas rezultāts nosaka dApp konta stāvokļa izmaiņas. Citi konti var izveidot darījumus un izpildīt funkcijas ar šo anotāciju un mainīt dApp konta stāvokli.
- @Verifier(tx) — Darījumu pārbaudītājs ar transakcijas tx parametru. Atbilst predikātu loģikai no RIDE. Šajā izteiksmē varat atļaut vai aizliegt turpmākas izmaiņas viedo līgumu loģikā dApp kontā.
Daram dApp kontu kā kopīgu maku visiem dalībniekiem.

Lai pārbaudītu, kurš līgums pašlaik ir aktīvs jūsu kontā, bloku pārlūkā varat kopēt viedā līguma base64 kodu un atpazīt to, izmantojot dekompilatoru ()



Mēs pārliecināmies, ka viedā līguma loģika atbilst tam, ko mēs sagaidām.
Alises bilancē ir palikuši 2.972 VIĻŅI.
Šī dApp reģistrē, cik daudz katrs dalībnieks iemaksā kopējā fondā, izmantojot mehānismu datu transakcija — DataEntry (pašreizējā atslēga, jauna summa), kur currentKey ir konts, kas izsauc depozīta funkciju, un newAmount ir papildinātā atlikuma vērtība.
Būs un Kūpers veic iemaksas dApp kontā ar 1 WAVES.

Mēs pieļaujam kļūdu un darījums nenotiek. Tā kā, neskatoties uz to, ka bijām pārliecināti, ka veicam darījumu Boba vārdā, mēs kļūdījāmies indeksā un norādījām Bankas kontu, kuram nav gudrā līguma. Šeit ir vērts atzīmēt svarīgu punktu - par neveiksmīgiem mēģinājumiem uzsākt darījumus ir jāmaksā. nevar noņemt! Alises bilancē ir palikuši 2.972 VIĻŅI. Bobam ir 3 VIĻŅI.
Bobs uz dApp kontu nosūtīja 1 WAVES.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

Bobam ir atlikuši 1.99 VIĻŅI. Tas ir, Bobs samaksāja 0.01 WAVES komisiju

Alises bilancē bija 2.972 VIĻŅI, tagad tas ir 3.972. Darījums tika reģistrēts arī Alises kontā, taču no dApp konta (Alise) komisijas maksa netika iekasēta.
Pēc tam, kad Kūpers arī papildināja kontu, Alises bilance kļuva 4.972 VIĻŅI.

Cilnes Dati bloku pārlūkā varat uzzināt, kam pieder, cik VIŅU kopējā makā.
Kūpers mainīja savas domas par 1 WAVES atstāšanu vispārējā makā un nolēma izņemt pusi no radniecības. Lai to izdarītu, viņam ir jāizsauc atsaukšanas funkcija.

Tomēr mēs atkal kļūdījāmies, jo izņemšanas funkcijai ir pavisam citi parametri un cits paraksts. Izstrādājot viedos līgumus RIDE4DAPPS, jums jāpievērš uzmanība šim punktam

Kūpera bilancē tagad ir 2.48 VIĻŅI. Attiecīgi 3 VIĻŅI - 1 - 0.01, un pēc tam + 0.5 - 0.01. Attiecīgi katrs zvans iemaksāt un izņemt maksā 0.01 VIĻŅU. Rezultātā ieraksti dApps īpašnieku tabulā mainījās šādi.

Bobs arī nolēma izņemt naudu no kopīgā maka, taču kļūdījās un mēģināja izņemt 1.5 VIĻŅUS.

Tomēr viedajam līgumam bija čeka šai situācijai.
Xena ir krāpniece, viņa mēģināja izņemt 1 WAVES no kopējā konta.

Arī viņai tas neizdevās.
Nākamajā daļā mēs apskatīsim sarežģītākus jautājumus, kas saistīti ar Alises dApp konta nepilnībām.
Avots: www.habr.com
