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

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

Pozdrav!

Nedavno, Waves Labs najavio natjecanje za programere posvećeno izdanju jezičnog proširenja RIDE smart contract za decentralizirane aplikacije Ride4Dapps u testnu mrežu!

Izabrali smo DAO slučaj jer Ventuary planira razviti dApps s društvenim funkcijama: glasovanje, prikupljanje sredstava, upravljanje povjerenjem itd.
Počeli smo s jednostavnim primjerom u Sesije pitanja i odgovora i VOŽNJA IDE - primjer sa zajednički novčanik.

Pogledajmo ovaj primjer, testirajmo hipoteze i pogledajmo neke neobičnosti:

Dopustite nam Alice - vlasnicu dApp-a
Boob i Cooper su Alice partneri, suosnivači Alice-BC DAO
Neli je vlasnica tvrtke kojoj je potrebno financiranje
Banka - banka koja distribuira tokene

Faza 1. Inicijalizacija stanja

Kako biste dobili tokene na testnoj mreži waves, trebate kontaktirati pipa i navedite adresu na koju želite poslati tokene.
Adresu možete pronaći u IDE-u tako da otvorite podatke o svom računu.
Izdvajamo banku 10 WAVES. Zatim provjeravamo jesu li stigli kroz preglednik blokova i transakcija: recenzent

Sada podijelimo tokene iz banke ostalim sudionicima. (Napomene: Sve transakcije na mreži Waves nisu besplatne, stoga je za sve sudionike potreban minimalni pozitivni saldo za obavljanje transakcija).

1 VALOVI = 100000000 jedinica (wavelets), budući da iznosi mogu biti samo cijeli brojevi
0.01 WAVES (transakcijska naknada) = 1000000

Banka -> [3 VALA] -> Alice, putem TransferTransaction (Tip: 4).

Provjeravamo da env.SEED iz kojeg se potpisuju transakcije odgovara našoj banci:
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (novčanik za više korisnika)

Ako nemate odgovarajuću početnu frazu, samo se prebacite na nju u kartici Računi i provjerite ponovno.
Nakon toga kreiramo, najavljujemo i potpisujemo transakciju za prijenos 3 WAVES Alice.
Također možete saznati Aliceine podatke putem varijable env.accounts. Numeriranje počinje od 0, tako da je Alice env.accounts[1].
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (novčanik za više korisnika)

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

Rezultat se također može vidjeti u pregledniku, poveznica na njega bit će nam vraćena odmah nakon izvršenja transakcije.

Osiguravamo da se Alicein saldo nadopuni za 3 VALA, a saldo banke ostane na 10 - 3 - 0.01 = 0.699.
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (novčanik za više korisnika)

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

Boobu i Cooperu šaljemo po 3 VALA, a Neli, Xeni i Marku po 0.2 VALA na isti način.
(Napomene: napravili smo pogrešku od jednog znaka i poslali Neli 0.02 VALOVA. Budite oprezni!)

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

Nakon nadopunjavanja stanja svih sudionika, vidimo:
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (novčanik za više korisnika)

Faza 2. Napravite dApp račun

Dogovorili smo se da će Alice biti kreator i vlasnik decentralizirane aplikacije.
Idite na Računi, postavite ga kao SEED i provjerite env.SEED odgovara Alice.

Pokušajmo instalirati najjednostavniju moguću skriptu (ugovor) na Alicin račun.
Pametni kontakti u Wavesu su predikati koji zabranjuju ili dopuštaju bilo koju vrstu odlazne transakcije pod određenim uvjetima. U ovom slučaju, ovo stanje je UVIJEK. Kod ugovora je istinit. Poziv deploy().

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

Naknada po setScript transakciji 1400000/100000000 = 0.014 WAVES. Alice ima 2.986 VALOVA na saldu.

Pokušajmo sada instalirati složeniju logiku pametnog ugovora na račun Alice, opisanu u primjer

Ride4Dapps sada uključuje 2 nove vrste komentara:

  1. @Poziv(i) — kao parametar i uzima podatak o tome koji je račun pozvao/potpisao transakciju. Rezultat ove funkcije određuje promjenu stanja dApp računa. Drugi računi mogu stvarati transakcije i izvršavati funkcije s ovom napomenom i mijenjati stanje dApp računa.
  2. @Verifikator(tx) — Verifikator transakcije s parametrom transakcije tx. Odgovara logici predikata iz RIDE. Upravo u ovom izrazu možete dopustiti ili zabraniti daljnje promjene logike pametnih ugovora na dApp računu.

Učinimo dApp račun kao zajednički novčanik za sve sudionike.
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (novčanik za više korisnika)

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

Osiguravamo da logika pametnog ugovora odgovara onome što očekujemo.
Alice ima još 2.972 VALOVA na saldu.

Ova dApp prati koliko svaki sudionik doprinosi zajedničkom fondu putem mehanizma podatkovna transakcija — DataEntry(currentKey, newAmount), gdje je currentKey račun koji poziva funkciju depozita, a newAmount je vrijednost nadopunjenog stanja.

Boob i Cooper polažu svoje depozite na dApp račun s 1 WAVES.
Učenje pisanja Waves pametnih ugovora na RIDE i RIDE4DAPPS. 1. dio (novčanik za više korisnika)

Pogriješimo i transakcija ne prolazi. Budući da smo, unatoč tome što smo bili uvjereni da radimo transakciju u ime Boba, pogriješili u indeksu i naveli bankovni račun koji nema pametni ugovor. Ovdje vrijedi napomenuti važnu točku - postoji naknada za neuspješne pokušaje pokretanja transakcija ne može se ukloniti! Alice ima još 2.972 VALOVA na saldu. Bob ima 3 VALA.

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 (novčanik za više korisnika)

Bob ima još 1.99 VALOVA. To jest, Bob je platio 0.01 WAVES provizije

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

Alisa je imala 2.972 VALA na svom saldu, sada je 3.972. Također je evidentirana transakcija na Alice računu, ali nije naplaćena provizija s dApp računa (Alice).
Nakon što je i Cooper dopunio račun, Alicein saldo je postao 4.972 VALOVA.

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

Tko posjeduje koliko WAVES-a u zajedničkom novčaniku možete saznati u block exploreru na kartici Podaci.

Cooper se predomislio oko ostavljanja iznosa od 1 WAVES na općem novčaniku i odlučio povući polovicu afiniteta. Da bi to učinio, mora pozvati funkciju povlačenja.

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

No, opet smo bili u krivu, budući da funkcija povlačenja ima sasvim druge parametre i drugačiji potpis. Kada dizajnirate pametne ugovore na RIDE4DAPPS, trebali biste obratiti pozornost na ovu točku

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

Cooper sada ima 2.48 WAVES u svojoj bilanci. Prema tome, 3 VALA - 1 - 0.01, a zatim + 0.5 - 0.01. Sukladno tome, svaki poziv za uplatu i isplatu košta 0.01 WAVES. Kao rezultat toga, unosi u tablici vlasnika dApps promijenili su se na sljedeći način.

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

Bob je također odlučio podići nešto novca iz zajedničkog novčanika, ali je pogriješio i pokušao podići 1.5 VALOVA.

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

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

Xena je prevarant, pokušala je povući 1 WAVES s ukupnog računa.

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

Ni njoj to nije išlo.

U sljedećem ćemo dijelu pogledati složenija pitanja vezana uz nesavršenost Alice dApp računa.

Izvor: www.habr.com

Dodajte komentar