Pozdrav svima!
Nedavno, Waves Labs
Odabrali smo DAO slučaj jer
Počeli smo s jednostavnim primjerom u
Pogledajmo ovaj primjer, testiramo hipoteze i pogledajmo neke neobičnosti:
Dajte nam Alice - vlasnika aplikacije
Boob i Cooper su Alice partneri, suosnivači Alice-BC DAO
Neli je vlasnica firme kojoj su potrebna finansijska sredstva
Banka - banka koja distribuira tokene
Faza 1. Inicijalizacija bilansa
Da biste dobili tokene na talasnoj test mreži, potrebno je da kontaktirate
Adresu možete pronaći u IDE-u tako što ćete otvoriti detalje svog naloga.
Izdvajamo Banku 10 WAVES. Zatim provjeravamo da li su stigli preko pretraživača blokova i transakcija:
Sada podijelimo tokene iz banke ostalim učesnicima. (Napomene: Sve transakcije na talasnoj mreži nisu besplatne, tako da je potreban minimalni pozitivan saldo za sve učesnike da bi izvršili transakcije).
1 TALAS = 100000000 jedinica (talasa), budući da iznosi mogu biti samo cijeli brojevi
0.01 WAVES (transakciona naknada) = 1000000
Banka -> [3 TALASA] -> Alice, preko TransferTransaction (Tip: 4).
Provjeravamo da li env.SEED iz kojeg se potpisuju transakcije odgovara našoj Banci:

Ako nemate odgovarajuću početnu frazu, jednostavno se prebacite na nju na kartici Računi i provjerite ponovo.
Nakon toga kreiramo, objavljujemo i potpisujemo transakciju za prijenos 3 WAVES Alice.
Alisine podatke možete saznati i putem varijable env.accounts. Numerisanje počinje od 0, tako da je Alisa env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Rezultat se takođe može posmatrati u pretraživaču, link do njega će nam biti vraćen odmah nakon izvršenja
Osiguravamo da se Alisin saldo dopuni za 3 VALA, a da bankovni saldo ostane na 10 - 3 - 0.01 = 0.699.
Šaljemo Boob i Cooper po 3 TALASA, a Neli, Xena i Mark po 0.2 TALASA na isti način.
(Napomene: Napravili smo grešku od jednog znaka i poslali Neli 0.02 WAVES. Budite oprezni!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Nakon dopune stanja svih učesnika, vidimo:
Faza 2. Kreirajte dApp nalog
Dogovorili smo se da Alice bude kreator i vlasnik decentralizovane aplikacije.
Idite na Računi, postavite ga kao SEED i provjerite env.SEED odgovara Alice.
Pokušajmo da instaliramo najjednostavniju moguću skriptu (ugovor) na Alisin nalog.
Pametni kontakti u Waves-u su predikati koji zabranjuju ili dozvoljavaju bilo koju vrstu odlazne transakcije pod određenim uslovima. U ovom slučaju, ovo stanje je UVIJEK. Šifra ugovora je tačna. Pozovite deploy().
Naknada po setScript transakciji 1400000/100000000 = 0.014 WAVES. Alice ima još 2.986 TALASA na svom saldu.
Pokušajmo sada da instaliramo složeniju logiku pametnog ugovora na Alice nalog, opisan u
Ride4Dapps sada uključuje 2 nove vrste bilješki:
- @Calable(i) — uzima kao parametar i podatke o tome koji račun je pozvao/potpisao transakciju. Rezultat ove funkcije određuje promjenu stanja dApp naloga. Drugi nalozi mogu kreirati transakcije i izvršavati funkcije s ovom napomenom i mijenjati stanje dApp računa.
- @Verifikator(tx) — Verifikator transakcije sa parametrom tx transakcije. Odgovara logici predikata iz RIDE. U ovom izrazu možete dozvoliti ili zabraniti dalje promjene logike pametnih ugovora na dApp računu.
Hajdemo dApp račun kao zajednički novčanik za sve učesnike.
Da biste provjerili koji je ugovor trenutno aktivan na vašem računu, možete kopirati base64 kod pametnog ugovora u block explorer i prepoznati ga pomoću dekompajlera (
Osiguravamo da logika pametnog ugovora odgovara onome što očekujemo.
Alice ima još 2.972 TALASA na svom saldu.
Ova dApp prati koliko svaki učesnik doprinosi zajedničkom fondu kroz mehanizam transakcija podataka — Data Entry(currentKey, newAmount), gdje je currentKey račun koji poziva funkciju depozita, a newAmount je vrijednost dopunjenog stanja.
Boob i Cooper uplaćuju svoje depozite na dApp račun sa 1 WAVES.
Napravili smo grešku i transakcija ne prolazi. Pošto smo, uprkos činjenici da smo bili uvjereni da obavljamo transakciju u ime Boba, napravili grešku u indeksu i naznačili bankovni račun koji nema pametni ugovor. Ovdje je vrijedno napomenuti važnu stvar - postoji naknada za neuspješne pokušaje pokretanja transakcija ne može se ukloniti! Alice ima još 2.972 TALASA na svom saldu. Bob ima 3 TALASA.
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 }]}))
Bobu je ostalo 1.99 TALASA. To jest, Bob je platio 0.01 WAVES proviziju
Alice je na svom saldu imala 2.972 TALASA, sada je 3.972. Transakcija je također registrirana na Alice računu, ali nije naplaćena provizija sa dApp računa (Alice).
Nakon što je i Cooper dopunio račun, Alicein bilans je postao 4.972 TALASA.
Možete saznati ko posjeduje koliko WAVES-a u zajedničkom novčaniku u pretraživaču blokova na kartici Podaci.
Cooper se predomislio da ostavi iznos od 1 WAVES na opštem novčaniku i odlučio da povuče polovinu afiniteta. Da bi to učinio, mora pozvati funkciju povlačenja.
Međutim, opet smo pogriješili, jer funkcija povlačenja ima potpuno drugačije parametre i drugačiji potpis. Kada dizajnirate pametne ugovore na RIDE4DAPPS, obratite pažnju na ovu tačku
Cooper sada ima 2.48 WAVES na svom bilansu. Prema tome, 3 TALASA - 1 - 0.01, a zatim + 0.5 - 0.01. U skladu s tim, svaki poziv za deponovanje i podizanje košta 0.01 WAVES. Kao rezultat toga, unosi u tabeli vlasnika dApps-a su se promijenili na sljedeći način.
Bob je takođe odlučio da podigne nešto novca iz zajedničkog novčanika, ali je pogrešio i pokušao da podigne 1.5 WAVES.
Međutim, pametni ugovor je imao ček za ovu situaciju.
Xena je prevarant, pokušala je da podigne 1 WAVES sa ukupnog računa.
Ni njoj to nije pošlo za rukom.
U sljedećem dijelu ćemo se osvrnuti na složenija pitanja vezana za nesavršenost Alice dApp računa.
izvor: www.habr.com