Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Pozdravljeni vsi!

Nedavno, Waves Labs napovedal tekmovanje za razvijalce, namenjeno izdaji jezikovne razširitve pametnih pogodb RIDE za decentralizirane aplikacije Ride4Dapps v testno omrežje!

Izbrali smo primer DAO, ker Ventuary načrtuje razvoj aplikacij dApp s socialnimi funkcijami: glasovanje, zbiranje sredstev, upravljanje zaupanja itd.
Začeli smo s preprostim primerom v Seje vprašanj in odgovorov in RIDE IDE - primer z skupna denarnica.

Poglejmo ta primer, preizkusimo hipoteze in poglejmo nekaj nenavadnosti:

Naj imamo Alice - lastnico dApp
Boob in Cooper sta partnerja Alice, soustanovitelja Alice-BC DAO
Neli je lastnica podjetja, ki potrebuje financiranje
Banka - banka, ki distribuira žetone

Faza 1. Inicializacija bilanc

Če želite prejeti žetone v testnem omrežju waves, se morate obrniti pipa in navedite naslov, na katerega želite poslati žetone.
Naslov najdete v IDE tako, da odprete podatke o svojem računu.
Izpostavljamo banko 10 WAVES. Nato preverimo, ali so prispeli prek brskalnika blokov in transakcij: recenzent

Sedaj pa razdelimo žetone iz banke ostalim udeležencem. (Opombe: Vse transakcije v omrežju Waves niso brezplačne, zato je za vse udeležence potrebno minimalno pozitivno stanje za transakcije).

1 VALOVI = 100000000 enot (wavelets), saj so lahko zneski samo cela števila
0.01 WAVES (transakcijska provizija) = 1000000

Banka -> [3 VALOVI] -> Alice, prek TransferTransaction (tip: 4).

Preverimo, ali se env.SEED, iz katerega se podpisujejo transakcije, ujema z našo banko:
Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Če nimate ujemajočega semenskega izraza, preprosto preklopite nanj v zavihku Računi in znova preverite.
Po tem ustvarimo, objavimo in podpišemo transakcijo za prenos 3 WAVES Alice.
Alicine podatke lahko najdete tudi prek spremenljivke env.accounts. Številčenje se začne z 0, zato je Alice env.accounts[1].
Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

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

Rezultat lahko opazujemo tudi v brskalniku, povezava do njega se nam vrne takoj po izvedbi transakcije.

Poskrbimo, da se Alicino stanje napolni s 3 VALOVI, bančno stanje pa ostane 10 - 3 - 0.01 = 0.699.
Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Boobu in Cooperju pošljemo po 3 VALOVE, Neli, Xeni in Marku pa na enak način po 0.2 VALOVA.
(Opombe: naredili smo napako z enim znakom in poslali Neli 0.02 WAVES. Bodite previdni!)

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

Po dopolnitvi stanja vseh udeležencev vidimo:
Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Faza 2. Ustvarite račun dApp

Dogovorili smo se, da bo Alice ustvarjalka in lastnica decentralizirane aplikacije.
Pojdite v Računi, ga nastavite kot SEED in preverite, ali se env.SEED ujema z Alice.

Poskusimo namestiti čim bolj preprosto skripto (pogodbo) na Alicin račun.
Pametni stiki v Waves so predikati, ki pod določenimi pogoji prepovedujejo ali dovoljujejo kakršno koli vrsto odhodne transakcije. V tem primeru je ta pogoj VEDNO. Koda pogodbe je resnična. Pokliči deploy().

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Provizija na transakcijo setScript 1400000/100000000 = 0.014 WAVES. Alice ima na stanju še 2.986 VALOV.

Poskusimo zdaj namestiti bolj zapleteno logiko pametnih pogodb na račun Alice, opisano v primer

Ride4Dapps zdaj vključuje 2 novi vrsti opomb:

  1. @Callable(i) — kot parameter i vzame podatke o tem, kateri račun je poklical/podpisal transakcijo. Rezultat te funkcije je tisti, ki določa spremembo stanja računa dApp. Drugi računi lahko ustvarjajo transakcije in izvajajo funkcije s to opombo ter spremenijo stanje računa dApp.
  2. @Verifier(tx) — Preverjevalec transakcije s parametrom transakcije tx. Ustreza predikatni logiki iz RIDE. V tem izrazu lahko dovolite ali prepoveste nadaljnje spremembe logike pametnih pogodb na računu dApp.

Naredimo dApp račun kot skupna denarnica za vse udeležence.
Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Če želite preveriti, katera pogodba je trenutno aktivna na vašem računu, lahko kopirate kodo base64 pametne pogodbe v raziskovalcu blokov in jo prepoznate z dekompilatorjem (na primer)
Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)
Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)
Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Poskrbimo, da se logika pametne pogodbe ujema s tem, kar pričakujemo.
Alice ima na stanju še 2.972 VALOV.

Ta dApp preko mehanizma spremlja, koliko vsak udeleženec prispeva v skupni sklad podatkovna transakcija — DataEntry(currentKey, newAmount), kjer je currentKey račun, ki kliče funkcijo depozita, newAmount pa je vrednost dopolnjenega stanja.

Boob in Cooper nakažeta na račun dApp z 1 WAVES.
Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Naredimo napako in transakcija ne uspe. Ker smo kljub temu, da smo bili prepričani, da delamo transakcijo v imenu Boba, naredili napako v indeksu in navedli bančni račun, ki nima pametne pogodbe. Tukaj je treba omeniti pomembno točko - za neuspešne poskuse sprožitve transakcij se zaračuna pristojbina ni mogoče odstraniti! Alice ima na stanju še 2.972 VALOV. Bob ima 3 VALOVE.

Bob je poslal 1 WAVES na račun dApp.

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

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Bob ima še 1.99 WAVES. To pomeni, da je Bob plačal 0.01 provizije WAVES

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Alice je imela 2.972 WAVES na svojem ravnotežju, zdaj je 3.972. Transakcija je bila zabeležena tudi na računu Alice, vendar z računa dApp (Alice) ni bila zaračunana provizija.
Ko je tudi Cooper napolnil račun, je Alicino stanje postalo 4.972 WAVES.

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Kdo ima v lasti koliko WAVES v skupni denarnici, lahko ugotovite v raziskovalcu blokov na zavihku Podatki.

Cooper si je premislil, da bi znesek 1 WAVES pustil v splošni denarnici, in se odločil, da umakne polovico afinitete. Za to mora poklicati funkcijo umika.

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Vendar smo se spet zmotili, saj ima funkcija dviga popolnoma druge parametre in drugačen podpis. Ko oblikujete pametne pogodbe na RIDE4DAPPS, morate biti pozorni na to točko

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Cooper ima zdaj v svoji bilanci stanja 2.48 WAVES. V skladu s tem 3 VALOVI - 1 - 0.01 in nato + 0.5 - 0.01. V skladu s tem vsak klic za polog in dvig stane 0.01 WAVES. Posledično so se vnosi v tabeli lastnikov dApps spremenili na naslednji način.

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Tudi Bob se je odločil dvigniti nekaj denarja iz skupne denarnice, vendar je naredil napako in poskušal dvigniti 1.5 WAVES.

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Vendar je imela pametna pogodba ček za to situacijo.

Xena je prevarant, poskušala je dvigniti 1 WAVES s celotnega računa.

Učenje pisanja pametnih pogodb Waves na RIDE in RIDE4DAPPS. 1. del (večuporabniška denarnica)

Tudi njej se ni izšlo.

V naslednjem delu si bomo ogledali bolj zapletena vprašanja, povezana z nepopolnostjo računa Alice dApp.

Vir: www.habr.com

Dodaj komentar