Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

Ahoj všetci!

Nedávno Waves Labs oznámil súťaž pre vývojárov venujúcich sa uvoľneniu jazykového rozšírenia RIDE smart contract pre decentralizované aplikácie Ride4Dapps do testovacej siete!

Vybrali sme si prípad DAO, pretože Ventuary plánuje vyvinúť dApps so sociálnymi funkciami: hlasovanie, získavanie finančných prostriedkov, správa dôvery atď.
Začali sme jednoduchým príkladom v Otázky a odpovede a RIDE IDE - príklad s zdieľaná peňaženka.

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ť kohútik a uveďte adresu, na ktorú sa majú poslať tokeny.
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í: recenzent

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:
Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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].
Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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í transakcií.

Dbáme na to, aby sa Alicin zostatok doplnil o 3 VLNY a bankový zostatok zostal na úrovni 10 - 3 - 0.01 = 0.699.
Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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:
Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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().

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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 príklad

Ride4Dapps teraz obsahuje 2 nové typy anotácií:

  1. @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.
  2. @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.
Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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 (napríklad)
Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)
Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)
Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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.
Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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 }]}))

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

Bobovi zostáva 1.99 WAVES. To znamená, že Bob zaplatil províziu 0.01 WAVES

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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.

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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.

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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.

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

Bob sa tiež rozhodol vybrať nejaké peniaze zo zdieľanej peňaženky, no spravil chybu a pokúsil sa vybrať 1.5 VLNY.

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

Inteligentná zmluva však túto situáciu preverila.

Xena je podvodníčka, pokúsila sa vybrať 1 VLNU z celkového účtu.

Naučte sa písať Waves smart kontrakty na RIDE a RIDE4DAPPS. Časť 1 (Peňaženka pre viacerých používateľov)

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

Pridať komentár