Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Hallo almal!

Mees onlangs, Waves Labs aangekondig kompetisie vir ontwikkelaars wat toegewy is aan die vrystelling aan die toetsnetwerk van die RIDE-slimkontraktaaluitbreiding vir Ride4Dapps-gedesentraliseerde toepassings!

Ons het die DAO-saak gekies omdat Ventuarium beplan om 'n dApp met sosiale funksies te ontwikkel: stemming, fondsinsameling, trustbestuur, ens.
Ons het begin met 'n eenvoudige voorbeeld in V&A-sessies en RIT IDE - 'n voorbeeld met algemene beursie.

Kom ons ontleed hierdie voorbeeld, toets hipoteses en oorweeg 'n paar eienaardighede:

Laat ons Alice hΓͺ - dApp-eienaar
Boob en Cooper is vennote van Alice, medestigters van Alice-BC DAO
Neli is 'n besigheidseienaar wat finansiering nodig het
Bank - 'n bank wat tokens versprei

Stadium 1. Inisialisering van saldo's

Om tokens in die golwe-toetsnetwerk te ontvang, moet u kontak kraan en spesifiseer die adres waarheen die tokens gestuur moet word.
Die adres kan in die IDE gevind word deur die rekeningbesonderhede te openbaar.
Kies Bank 10 GOLWE. Nadat ons gekontroleer het dat hulle deur die blok- en transaksieverkenner gekom het: resensent

Kom ons versprei nou tokens van die bank aan die res van die deelnemers. (Nota: Alle transaksies op die golwe-netwerk is nie gratis nie, dus word 'n minimum positiewe saldo vir alle deelnemers vereis om transaksies te doen).

1 GOLWE = 100000000 eenhede (golwe) aangesien bedrae slegs heelgetal kan wees
0.01 GOLWE (Transaksiefooi) = 1000000

Bank -> [3 GOLWE] -> Alice, via Oordragtransaksie (tipe: 4).

Ons kyk of env.SEED, waaruit transaksies onderteken word, ooreenstem met ons Bank:
Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)
οΏΌ
As jy nie bypassende saadfrases het nie, skakel net daarna in die Rekeninge-oortjie en kyk weer.
Daarna skep, kondig en onderteken ons 'n transaksie oor die oordrag van 3 WAVES Alice.
Jy kan ook Alice se data uitvind deur die env.accounts veranderlike. Nommering begin vanaf 0, so Alice is env.accounts[1].
Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

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

Die resultaat kan ook in die blaaier waargeneem word, 'n skakel daarna sal onmiddellik na uitvoering aan ons teruggestuur word transaksies.

Ons maak seker dat Alice se balans aangevul word met 3 GOLWE, en 10 - 3 - 0.01 = 0.699 bly op die bank se balans.
Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Ons stuur Boob en Cooper met 3 GOLWE, en Neli, Xena en Mark met 0.2 GOLWE op dieselfde manier.
(Nota: Ons het 'n eenkarakterfout gemaak en vir Neli 0.02 GOLWE gestuur. Wees versigtig!)

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

Nadat ons die saldo's van alle deelnemers aangevul het, sien ons:
Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Fase 2. Skep 'n dApp-rekening

Ons het ooreengekom dat Alice die skepper en eienaar van die gedesentraliseerde toepassing sal wees.
In Rekeninge, gaan voort en stel dit as SEED en kyk env.SEED pas by Alice.

Kom ons probeer om die eenvoudigste moontlike skrif (kontrak) op Alice se rekening te installeer.
Slim kontakte in Waves is predikate wat verhoed of toelaat dat 'n soort uitgaande transaksie onder sekere voorwaardes uitgevoer word. In hierdie geval is daardie toestand ALTYD. Die kontrakkode is waar. Ons noem deploy().

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Fooi per setScript-transaksie 1400000/100000000 = 0.014 GOLWE. Alice het 2.986 GOLWE oor op haar balans.

Kom ons probeer nou om meer komplekse slimkontraklogika op Alice se rekening te installeer, beskryf in voorbeeld

Ride4Dapps sluit nou 2 nuwe aantekeningtipes in:

  1. @Oproepbaar(i) - neem as parameter i, data oor watter rekening die transaksie geroep/geteken het. Dit is die resultaat van hierdie funksie wat die verandering in die toestand van die dApp-rekening bepaal. Ander rekeninge kan transaksies skep en funksies uitvoer met hierdie aantekening en die toestand van die dApp-rekening verander.
  2. @Verifier(tx) β€” Transaksieverifieerder met transaksie-tx-parameter. Stem ooreen met die logika van predikate van RIDE. Dit is in hierdie uitdrukking dat jy verdere veranderinge in die logika van slim kontrakte op 'n dApp-rekening kan toelaat of verbied.

Kom ons doen dApp rekening as 'n gemeenskaplike beursie vir alle deelnemers.
Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Om te kyk watter kontrak tans aktief is op die rekening, kan jy die base64-kode van die slim kontrak in die blokverkenner kopieer en dit herken deur die decompiler (byvoorbeeld)
Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)
Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)
Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Ons maak seker dat die logika van die slim kontrak ooreenstem met wat ons verwag.
Alice het 2.972 GOLWE oor op haar balans.

Hierdie dApp hou tred met hoeveel elkeen van die deelnemers deur die meganisme tot die algemene fonds bydra datatransaksie - DataEntry (currentKey, newAmount), waar currentKey die rekening is wat die depositofunksie oproep, en newAmount is die waarde van die aangevul saldo.

Boob en Cooper deponeer 1 GOLWE in die dApp-rekening.
Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Ons maak 'n fout en die transaksie gaan nie deur nie. Aangesien ons, ten spyte van die feit dat ons oortuig was dat ons 'n transaksie namens Bob doen, 'n fout in die indeks gemaak het en 'n Bankrekening aangedui het wat nie 'n slim kontrak het nie. Hier is dit die moeite werd om op 'n belangrike punt te let - vir onsuksesvolle pogings om transaksies te begin, die kommissie nie verwyder nie! Alice het 2.972 GOLWE oor op haar balans. Bob het 3 GOLWE.

Bob het 1 WAVES na dApp-rekening gestuur.

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

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Bob het 1.99 GOLWE oor. Dit wil sΓͺ, Bob het 0.01 WAVES-kommissie betaal

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Alice het 2.972 GOLWE op haar balans gehad, dit het 3.972 geword. ’n Transaksie is ook op Alice se rekening geregistreer, maar geen kommissie is van dApp Account (Alice) gehef nie.
Nadat Cooper ook die rekening aangevul het, het Alice 4.972 GOLWE op haar balans gehad.

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Jy kan uitvind wie besit hoeveel GOLWE in die algemene beursie in die blokverkenner in die Data-oortjie.

Cooper het van plan verander om die bedrag van 1 WAVES op die algemene beursie te laat en het besluit om die helfte van die affiniteite te onttrek. Om dit te doen, moet dit die onttrek-funksie oproep.

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Ons het egter weer 'n fout gemaak, want die onttrekfunksie het heeltemal ander parameters, 'n ander handtekening. Wanneer jy slim kontrakte op RIDE4DAPPS ontwerp, moet jy aandag gee aan hierdie punt

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Cooper het 2.48 GOLWE op sy balansstaat. Onderskeidelik 3 GOLWE - 1 - 0.01, en dan + 0.5 - 0.01. Gevolglik kos elke oproep om te deponeer en te onttrek 0.01 GOLWE. As gevolg hiervan het die inskrywings in die tabel van dApps-eienaars soos volg verander.

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Bob het ook besluit om 'n bietjie geld uit die algemene beursie te trek, maar hy het 'n fout gemaak en probeer om 1.5 GOLWE te onttrek.

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

In die slim kontrak was daar egter 'n tjek vir so 'n situasie.

Xena is 'n swendelaar wat probeer het om 1 WAVES uit die algemene rekening te onttrek.

Leer hoe om Waves-slimkontrakte op RIDE en RIDE4DAPPS te skryf. Deel 1 (Multi-gebruiker-beursie)

Sy het ook misluk.

In die volgende deel sal ons meer komplekse kwessies oorweeg wat verband hou met die onvolmaaktheid van Alice dApp-rekening.

Bron: will.com

Voeg 'n opmerking