Hallo almal!
Mees onlangs, Waves Labs
Ons het die DAO-saak gekies omdat
Ons het begin met 'n eenvoudige voorbeeld in
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
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:
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:
οΏΌ
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].
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
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.
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:
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().
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
Ride4Dapps sluit nou 2 nuwe aantekeningtipes in:
- @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.
- @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.
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 (
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.
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 }]}))
Bob het 1.99 GOLWE oor. Dit wil sΓͺ, Bob het 0.01 WAVES-kommissie betaal
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.
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.
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
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.
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.
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.
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