Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

Sveiki visiem!

Pavisam nesen Waves Labs paziņoja 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 Ventuary 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 Jautājumu un atbilžu sesijas un RIDE IDE - piemērs ar kopīgs maks.

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 krāns 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: recenzents

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:
Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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].
Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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 darījumiem.

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ācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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:
Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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 ().

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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ā piemērs

Ride4Dapps tagad ir iekļauti 2 jauni anotāciju veidi:

  1. @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.
  2. @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.
Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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 (piemēram)
Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)
Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)
Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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ācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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 }]}))

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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.

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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.

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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.

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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.

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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.

Mācīšanās rakstīt Waves viedos līgumus RIDE un RIDE4DAPPS. 1. daļa (vairāku lietotāju maks)

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

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster