Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Pozdrav svima!

Nedavno su Waves Labs najavio organizovali konkurs za programere povodom lansiranja testne mreže proširenja jezika pametnih ugovora RIDE za decentralizovane aplikacije Ride4Dapps!

Odabrali smo DAO slučaj, jer Ventuary planira da se bavi razvojem dApp-a sa društvenim funkcijama: glasanje, prikupljanje sredstava, upravljanje poverljivošću itd.
Počeli smo s jednostavnim primerom u Q&A sesijama i u RIDE IDE — primer s zajedničkim novčanikom.

Hajde da analiziramo ovaj primer, proverimo hipoteze i razmotrimo neke neobičnosti:

Pretpostavimo da imamo Alice — vlasnika dApp-a
Boob i Cooper — partneri Alice, suosnivači Alice-BC DAO
Neli — vlasnik biznisa kojem je potrebna finansijska sredstva
Bank — banka koja deli tokene

Faza 1. Inicijalizacija bilansa

Da biste dobili tokene na testnoj mreži Waves, potrebno je obratiti se faucet i navesti adresu na koju će biti poslati tokeni.
Adresu možete saznati u IDE-u, otkrivajući podatke o računu.
Dodeljujemo Banku 10 WAVES. Nakon toga proveravamo da li su stigli putem preglednika blokova i transakcija: preglednik

Sada dodeljujemo tokene iz banke ostalim učesnicima. (Napomena: Sve transakcije na Waves mreži nisu besplatne, stoga svi učesnici moraju imati minimalni pozitivan balans da bi izvršavali transakcije).

1 WAVES = 100000000 jedinica (wavelets), jer amounts mogu biti samo celobrojni
0.01 WAVES (Naknada za transakciju) = 1000000

Bank -> [3 WAVES] -> Alice, putem TransferTransaction (Tip: 4).

Proveravamo da li env.SEED, od kojeg se potpisuju transakcije, odgovara našem Bank:
Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Ako nemate odgovarajući seed frazu, jednostavno prebacite se na njega u kartici Računi i proverite ponovo.
Nakon toga kreiramo, najavljujemo i potpisujemo transakciju o prenosu 3 WAVES Alice.
Podatke o Alici možete saznati i putem varijable env.accounts. Numerisanje počinje od 0, tako da je Alice env.accounts[1].
Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

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

Rezultat se takođe može posmatrati u pregledniku, link na njega biće nam vraćen odmah nakon izvršenja transakcije.

Poveravamo da je Alice-ov balans uvećan za 3 WAVES, dok je na balansu banke ostalo 10 — 3 — 0.01 = 0.699.
Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Šaljemo Boobu i Cooperu po 3 WAVES, a Neli, Xenai i Marku po 0.2 WAVES na isti način.
(Napomena: Napravili smo grešku na jedan znak i poslali Neli 0.02 WAVES. Budite oprezni!)

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

Nakon dopunjavanja balansa svih učesnika vidimo:
Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Faza 2. Kreiranje dApp računa

Dogovorili smo se da će kreator i vlasnik decentralizirane aplikacije biti Alice.
U Accounts prelazimo, postavljamo je kao SEED i provjeravamo da li env.SEED odgovara Alice.

Pokušajmo postaviti na račun Alice najjednostavniji skript (ugovor) koji je moguć.
Pametni ugovori u Waves su predikati koji zabranjuju ili dopuštaju izvršenje određenog tipa odlazne transakcije pod određenim uvjetima. U ovom slučaju uvjet je — ALWAYS. Kod ugovora — true. Pozivamo deploy().

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Naknada za setScript transakciju je 1400000/100000000 = 0.014 WAVES. Alice ima na računu još 2.986 WAVES.

Sada ćemo pokušati postaviti na račun Alice složeniju logiku pametnog ugovora, opisanu u primjeru

Ride4Dapps sada uključuje 2 nova tipa anotacija:

  1. @Callable(i) — prihvaća kao parametar i, podatke o tome koji je račun pozvao/potpisao transakciju. Upravo rezultat ove funkcije određuje promjenu stanja dApp računa. Drugi računi mogu kreirati transakcije i izvršavati funkcije s ovom anotacijom i mijenjati stanje dApp računa.
  2. @Verifier(tx) — Verifikator transakcije s parameterom tx transakcije. Odgovara logici predikata iz RIDE. Upravo u ovom izrazu možete dopustiti ili zabraniti daljnje promjene logike pametnih ugovora na dApp računu.

Hajde da učinimo dApp račun zajedničkim novčanikom za sve sudionike.
Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Kako bismo provjerili koji je trenutno aktivan ugovor na računu, možete u pretraživaču blokova kopirati base64 kod pametnog ugovora i prepoznati ga preko dekompilatora (na primjer)
Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)
Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)
Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Uvjereni smo da logika pametnog ugovora odgovara onome što očekujemo.
Alice ima na računu još 2.972 WAVES.

Ovaj dApp vodi evidenciju o tome koliko svaki od sudionika ulaže u zajednički fond putem mehanizma data transaction — DataEntry(currentKey, newAmount), gdje je currentKey račun koji poziva funkciju deposit, a newAmount je vrijednost dopunjenog stanja.

Bob i Cooper ulažu svoje depozite na dApp račun po 1 WAVES.
Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Pogriješimo i transakcija ne prolazi. Iako smo se uvjerili da radimo transakciju u ime Boba, pogriješili smo u indeksu i naveli račun Bank, na kojem nema pametnog ugovora. Ovdje valja naglasiti važnu stvar — za neuspješne pokušaje iniciranja transakcija naknada se ne naplaćuje! Alice ima na računu još 2.972 WAVES. Bob ima 3 WAVES.

Bob je poslao 1 WAVES na dApp račun.

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

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Bob ima 1.99 WAVES. To znači da je Bob platio 0.01 WAVES kao naknadu.

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Alice je imala 2.972 WAVES na svom računu, sada ima 3.972. Na računu Alice također je registrirana transakcija, međutim, s dApp računom (Alice) nije naplaćena nikakva naknada.
Nakon što je Cooper također uplatio novac, saldo Alice iznosi 4.972 WAVES.

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Informacije o tome koliko WAVES pripada svakom korisniku u zajedničkom novčaniku mogu se pronaći u pregledniku blokova pod karticom Podaci.

Cooper je odlučio ne ostavljati iznos od 1 WAVES u zajedničkom novčaniku i odlučio je povući polovicu sredstava. Za to mora pozvati funkciju withdraw.

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Međutim, opet smo pogriješili, jer funkcija withdraw ima sasvim druge parametre, drugačiju potpisu. Kada projektirate pametne ugovore na RIDE4DAPPS, trebate obratiti pažnju na ovu točku.

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Cooper ima 2.48 WAVES na svom računu. Dakle, 3 WAVES — 1 — 0.01, a zatim + 0.5 — 0.01. Tako da svaki poziv deposit i withdraw košta 0.01 WAVES. U konačnici, u tablici vlasnika dApps, zapisi su se promijenili na sljedeći način.

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Bob je također odlučio povući neki iznos iz zajedničkog novčanika, ali je pogriješio i pokušao je izvući 1.5 WAVES.

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Međutim, pametni ugovor imao je provjeru za takvu situaciju.

Xena je prevarantica, pokušala je izvući 1 WAVES iz zajedničkog računa.

Učimo pisati Waves pametne ugovore na RIDE i RIDE4DAPPS. Dio 1 (Višekorisnički novčanik)

Njoj također nije uspjelo.

U sljedećem dijelu razmotrit ćemo složenije aspekte povezane s nesavršenostima Alice dApp računa.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster