Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

Ahoj všichni!

V poslední době Waves Labs oznámil soutěž pro vývojáře věnované uvolnění jazykového rozšíření RIDE smart contract language pro decentralizované aplikace Ride4Dapps do testovací sítě!

Vybrali jsme si případ DAO, protože Ventuary plánuje vyvinout dApps se sociálními funkcemi: hlasování, fundraising, správa důvěry atd.
Začali jsme jednoduchým příkladem v Sezení otázek a odpovědí a RIDE IDE - příklad s sdílená peněženka.

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 kohoutek a uveďte adresu, na kterou chcete zaslat tokeny.
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í: recenzent

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:
Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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].
Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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

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.
Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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:
Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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 příklad

Ride4Dapps nyní obsahuje 2 nové typy anotací:

  1. @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.
  2. @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.
Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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 (například)
Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)
Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)
Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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.
Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

Bobovi zbývá 1.99 WAVES. To znamená, že Bob zaplatil provizi 0.01 WAVES

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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.

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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ě.

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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.

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

Chytrá smlouva však tuto situaci prověřovala.

Xena je podvodnice, pokusila se vybrat 1 VLNU z celkového účtu.

Naučte se psát chytré smlouvy Waves na RIDE a RIDE4DAPPS. Část 1 (Peněženka pro více uživatelů)

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

Přidat komentář