Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

Pozdrav svima!

Nedavno, Waves Labs najavljeno takmičenje za programere posvećeno izdavanju RIDE proširenja jezika pametnog ugovora za decentralizovane aplikacije Ride4Dapps u testnu mrežu!

Odabrali smo DAO slučaj jer Ventuary planira razvoj dApp-ova sa društvenim funkcijama: glasanje, prikupljanje sredstava, upravljanje povjerenjem itd.
Počeli smo s jednostavnim primjerom u Sesije pitanja i odgovora i unutra RIDE IDE - primjer sa zajednički novčanik.

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 slavina i naznačite adresu na koju treba poslati tokene.
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: recenzent

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:
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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].
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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 transakcije.

Osiguravamo da se Alisin saldo dopuni za 3 VALA, a da bankovni saldo ostane na 10 - 3 - 0.01 = 0.699.
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

Š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:
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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 primjer

Ride4Dapps sada uključuje 2 nove vrste bilješki:

  1. @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.
  2. @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.
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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 (na primjer)
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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.
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

Bobu je ostalo 1.99 TALASA. To jest, Bob je platio 0.01 WAVES proviziju

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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.

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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.

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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.

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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.

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

Međutim, pametni ugovor je imao ček za ovu situaciju.

Xena je prevarant, pokušala je da podigne 1 WAVES sa ukupnog računa.

Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (višekorisnički novčanik)

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

Dodajte komentar