Ahoj všetci!
Nedávno Waves Labs
Vybrali sme si prípad DAO, pretože
Začali sme jednoduchým príkladom v
Pozrime sa na tento príklad, otestujme hypotézy a pozrime sa na niektoré zvláštnosti:
Majme Alice - vlastníka dApp
Boob a Cooper sú partneri Alice, spoluzakladatelia Alice-BC DAO
Neli je majiteľka firmy, ktorá potrebuje financovanie
Banka – banka, ktorá distribuuje tokeny
Fáza 1. Inicializácia zostatkov
Ak chcete získať tokeny v testovacej sieti vĺn, musíte kontaktovať
Adresu nájdete v IDE otvorením podrobností o svojom účte.
Zvýrazňujeme Bank 10 WAVES. Potom skontrolujeme, či prišli cez prehliadač blokov a transakcií:
Teraz rozdeľme tokeny z banky ostatným účastníkom. (Poznámky: Všetky transakcie vo vlnovej sieti nie sú bezplatné, takže na uskutočnenie transakcií sa od všetkých účastníkov vyžaduje minimálny kladný zostatok).
1 VLNY = 100000000 XNUMX XNUMX jednotiek (vlniek), pretože množstvá môžu byť len celé čísla
0.01 VLNY (Transakčný poplatok) = 1000000
Banka -> [3 VLNY] -> Alica, cez TransferTransaction (Typ: 4).
Skontrolujeme, či sa env.SEED, z ktorého sú transakcie podpísané, zhoduje s našou bankou:

Ak nemáte zodpovedajúcu počiatočnú frázu, jednoducho na ňu prepnite na karte Účty a znova skontrolujte.
Potom vytvoríme, oznámime a podpíšeme transakciu na prevod 3 WAVES Alice.
Alicine údaje môžete zistiť aj prostredníctvom premennej env.accounts. Číslovanie začína od 0, takže Alice je env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Výsledok je možné sledovať aj v prehliadači, odkaz naň sa nám vráti ihneď po vykonaní
Dbáme na to, aby sa Alicin zostatok doplnil o 3 VLNY a bankový zostatok zostal na úrovni 10 - 3 - 0.01 = 0.699.
Boobovi a Cooperovi posielame po 3 VLNY a Neli, Xene a Markovi 0.2 VLNY rovnakým spôsobom.
(Poznámky: Urobili sme chybu jedného znaku a poslali sme Neli 0.02 VLNY. Buďte opatrní!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Po doplnení zostatkov všetkých účastníkov vidíme:
Fáza 2. Vytvorte si účet dApp
Dohodli sme sa, že tvorcom a vlastníkom decentralizovanej aplikácie bude Alice.
Prejdite na Účty, nastavte ho ako SEED a skontrolujte, či sa env.SEED zhoduje s Alice.
Skúsme nainštalovať čo najjednoduchší skript (zmluvu) na Alicin účet.
Inteligentné kontakty vo vlnách sú predikáty, ktoré za určitých podmienok zakazujú alebo umožňujú akýkoľvek typ odchádzajúcej transakcie. V tomto prípade je táto podmienka VŽDY. Kód zmluvy je pravdivý. Zavolajte deploy().
Poplatok za transakciu setScript 1400000/100000000 = 0.014 VLNY. Alici zostáva v bilancii 2.986 XNUMX VLN.
Skúsme teraz nainštalovať zložitejšiu logiku inteligentnej zmluvy na účet Alice, opísanú v
Ride4Dapps teraz obsahuje 2 nové typy anotácií:
- @Callable(i) — berie ako parameter i údaj o tom, ktorý účet transakciu vyvolal/podpísal. Je to výsledok tejto funkcie, ktorý určuje zmenu stavu účtu dApp. Ostatné účty môžu vytvárať transakcie a vykonávať funkcie s touto anotáciou a meniť stav účtu dApp.
- @Verifier(tx) — Overovač transakcie s parametrom tx transakcie. Zodpovedá predikátovej logike z RIDE. Práve v tomto výraze môžete povoliť alebo zakázať ďalšie zmeny logiky smart kontraktov na účte dApp.
Poď robiť Dapp účet ako spoločnú peňaženku pre všetkých účastníkov.
Ak chcete skontrolovať, ktorá zmluva je momentálne aktívna na vašom účte, môžete skopírovať kód inteligentnej zmluvy base64 v prieskumníkovi blokov a rozpoznať ho pomocou dekompilátora (
Uisťujeme sa, že logika inteligentnej zmluvy zodpovedá tomu, čo očakávame.
Alici zostáva v bilancii 2.972 XNUMX VLN.
Tento dApp sleduje, koľko každý účastník prispieva do spoločného fondu prostredníctvom mechanizmu dátová transakcia — DataEntry(currentKey, newAmount), kde currentKey je účet, ktorý volá funkciu vkladu, a newAmount je hodnota doplneného zostatku.
Boob a Cooper vkladajú svoje vklady na účet dApp s 1 WAVES.
Urobíme chybu a transakcia neprebehne. Keďže sme napriek tomu, že sme boli presvedčení, že vykonávame transakciu v mene Boba, urobili sme chybu v indexe a označili sme bankový účet, ktorý nemá inteligentnú zmluvu. Tu stojí za zmienku dôležitý bod - za neúspešné pokusy o začatie transakcií sa účtuje poplatok nie je možné odstrániť! Alici zostáva v bilancii 2.972 3 VLN. Bob má XNUMX VLNY.
Bob odoslal 1 WAVES do účtu dApp.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bobovi zostáva 1.99 WAVES. To znamená, že Bob zaplatil províziu 0.01 WAVES
Alice mala na svojom zostatku 2.972 WAVES, teraz je to 3.972. Na účte Alice bola tiež zaregistrovaná transakcia, ale z účtu dApp (Alice) nebola účtovaná žiadna provízia.
Potom, čo Cooper tiež doplnil účet, Alicin zostatok sa stal 4.972 WAVES.
Komu patrí koľko WAVES v spoločnej peňaženke zistíte v prieskumníkovi blokov v záložke Údaje.
Cooper zmenil názor na ponechanie sumy 1 WAVES na všeobecnej peňaženke a rozhodol sa stiahnuť polovicu afinity. Na to musí zavolať funkciu stiahnutia.
Opäť sme sa však mýlili, keďže funkcia stiahnutia má úplne iné parametre a iný podpis. Pri navrhovaní inteligentných zmlúv na RIDE4DAPPS by ste mali venovať pozornosť tomuto bodu
Cooper má teraz vo svojej súvahe 2.48 VLNY. Podľa toho 3 VLNY - 1 - 0.01 a potom + 0.5 - 0.01. Každá výzva na vklad a výber teda stojí 0.01 VLNY. V dôsledku toho sa položky v tabuľke vlastníkov dApps zmenili nasledovne.
Bob sa tiež rozhodol vybrať nejaké peniaze zo zdieľanej peňaženky, no spravil chybu a pokúsil sa vybrať 1.5 VLNY.
Inteligentná zmluva však túto situáciu preverila.
Xena je podvodníčka, pokúsila sa vybrať 1 VLNU z celkového účtu.
Ani jej to nevyšlo.
V ďalšej časti sa pozrieme na zložitejšie problémy súvisiace s nedokonalosťou Alice dApp Account.
Zdroj: hab.com