Ahoj všichni!
V poslední době Waves Labs
Vybrali jsme si případ DAO, protože
Začali jsme jednoduchým příkladem v
Pojďme se podívat na tento příklad, otestovat hypotézy a podívat se na některé zvláštnosti:
Nechte nás mít Alice - dApp Owner
Boob a Cooper jsou partneři Alice, spoluzakladatelé Alice-BC DAO
Neli je majitelka firmy, která potřebuje financování
Banka – banka, která distribuuje tokeny
Fáze 1. Inicializace zůstatků
Abyste mohli přijímat tokeny v testovací síti vln, musíte kontaktovat
Adresu najdete v IDE otevřením podrobností o svém účtu.
Zvýrazňujeme Bank 10 WAVES. Poté zkontrolujeme, že dorazily přes prohlížeč bloků a transakcí:
Nyní rozdáme tokeny z banky ostatním účastníkům. (Poznámky: Všechny transakce ve vlnové síti nejsou zdarma, takže pro všechny účastníky je pro provádění transakcí vyžadován minimální kladný zůstatek).
1 VLNY = 100000000 jednotek (vlnek), protože částky mohou být pouze celá
0.01 WAVES (poplatek za transakci) = 1000000
Banka -> [3 VLNY] -> Alice, přes TransferTransaction (Typ: 4).
Zkontrolujeme, zda env.SEED, ze kterého jsou transakce podepsány, odpovídá naší bance:

Pokud nemáte odpovídající počáteční frázi, stačí se na ni přepnout na kartě Účty a znovu zkontrolovat.
Poté vytvoříme, oznámíme a podepíšeme transakci pro převod 3 WAVES Alice.
Alicina data můžete také zjistit prostřednictvím proměnné env.accounts. Číslování začíná od 0, takže Alice je env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Výsledek lze sledovat i v prohlížeči, odkaz na něj se nám vrátí ihned po provedení
Dbáme na to, aby se Alicin zůstatek doplnil o 3 VLNY a bankovní zůstatek zůstal na 10 - 3 - 0.01 = 0.699.
Boobovi a Cooperovi posíláme každý 3 VLNY a Neli, Xena a Mark 0.2 VLNY každý stejným způsobem.
(Poznámky: Udělali jsme chybu o jeden znak a poslali jsme Neli 0.02 VLNY. Buďte opatrní!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Po doplnění zůstatků všech účastníků vidíme:
Fáze 2. Vytvořte si účet dApp
Dohodli jsme se, že Alice bude tvůrcem a vlastníkem decentralizované aplikace.
Přejděte na Účty, nastavte jej jako SEED a zkontrolujte, zda se env.SEED shoduje s Alicí.
Zkusme nainstalovat co nejjednodušší skript (smlouvu) na Alicin účet.
Inteligentní kontakty ve vlnách jsou predikáty, které za určitých podmínek zakazují nebo umožňují jakýkoli typ odchozí transakce. V tomto případě je tato podmínka VŽDY. Kód smlouvy je pravdivý. Zavolejte deploy().
Poplatek za transakci setScript 1400000/100000000 = 0.014 WAVES. Alici zbývá na zůstatku 2.986 WAVES.
Zkusme nyní nainstalovat složitější logiku smart contract na účet Alice, popsanou v
Ride4Dapps nyní obsahuje 2 nové typy anotací:
- @Callable(i) — bere jako parametr i údaj o tom, který účet transakci vyvolal/podepsal. Právě výsledek této funkce určuje změnu stavu účtu dApp. Jiné účty mohou vytvářet transakce a provádět funkce s touto anotací a měnit stav účtu dApp.
- @Verifier(tx) — Ověřovač transakce s parametrem tx transakce. Odpovídá predikátové logice z RIDE. Právě v tomto výrazu můžete povolit nebo zakázat další změny logiky smart kontraktů na účtu dApp.
Udělejme dApp účet jako společná peněženka pro všechny účastníky.
Chcete-li zkontrolovat, která smlouva je na vašem účtu aktuálně aktivní, můžete zkopírovat kód base64 chytré smlouvy v průzkumníku bloků a rozpoznat jej pomocí dekompilátoru (
Dbáme na to, aby logika chytré smlouvy odpovídala tomu, co očekáváme.
Alici zbývá na zůstatku 2.972 WAVES.
Tento dApp sleduje, kolik každý účastník přispívá do společného fondu prostřednictvím mechanismu datová transakce — DataEntry(currentKey, newAmount), kde currentKey je účet, který volá funkci vkladu, a newAmount je hodnota doplněného zůstatku.
Boob a Cooper vkládají své vklady na účet dApp s 1 WAVES.
Uděláme chybu a transakce neproběhne. Protože jsme i přes to, že jsme byli přesvědčeni, že provádíme transakci jménem Boba, udělali jsme chybu v indexu a uvedli jsme bankovní účet, který nemá smart kontrakt. Zde stojí za zmínku důležitý bod - za neúspěšné pokusy o zahájení transakcí je účtován poplatek nelze odstranit! Alici zbývá na zůstatku 2.972 WAVES. Bob má 3 VLNY.
Bob poslal 1 WAVES na účet dApp.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bobovi zbývá 1.99 WAVES. To znamená, že Bob zaplatil provizi 0.01 WAVES
Alice měla na svém účtu 2.972 WAVES, nyní je to 3.972. Na účtu Alice byla také zaregistrována transakce, ale z účtu dApp (Alice) nebyla účtována žádná provize.
Poté, co Cooper také doplnil účet, Alicův zůstatek se stal 4.972 WAVES.
Kdo vlastní kolik WAVES ve společné peněžence, zjistíte v průzkumníku bloků na záložce Data.
Cooper změnil názor na ponechání částky 1 WAVES na obecné peněžence a rozhodl se stáhnout polovinu afinity. K tomu musí zavolat funkci stažení.
Opět jsme se však mýlili, protože funkce stažení má úplně jiné parametry a jiný podpis. Když navrhujete chytré smlouvy na RIDE4DAPPS, měli byste věnovat pozornost tomuto bodu
Cooper má nyní ve své rozvaze 2.48 VLNY. V souladu s tím 3 VLNY - 1 - 0.01 a poté + 0.5 - 0.01. Každá výzva k uložení a výběru tedy stojí 0.01 WAVES. V důsledku toho se položky v tabulce vlastníků dApps změnily následovně.
Bob se také rozhodl vybrat nějaké peníze ze sdílené peněženky, ale udělal chybu a pokusil se vybrat 1.5 WAVES.
Chytrá smlouva však tuto situaci prověřovala.
Xena je podvodnice, pokusila se vybrat 1 VLNU z celkového účtu.
Ani jí to nevyšlo.
V příštím díle se podíváme na složitější problémy související s nedokonalostí Alice dApp Account.
Zdroj: www.habr.com