
Halló allir!
Nýlega, Waves Labs Keppni fyrir forritara sem fellur saman við útgáfu á prófunarnetinu á RIDE snjallsamningaviðbótinni fyrir dreifð forrit, Ride4Dapps!
Við völdum DAO-tilvikið vegna þess að hyggst þróa dApp með samfélagslegum eiginleikum: atkvæðagreiðslum, fjáröflun, trauststjórnun o.s.frv.
Við byrjuðum með einföldu dæmi í og - dæmi með .
Við skulum skoða þetta dæmi, prófa tilgáturnar og íhuga nokkur furðuleg atriði:
Segjum að við höfum Alice - dApp eiganda
Boob og Cooper eru samstarfsaðilar Alice og meðstofnendur Alice-BC DAO.
Neli er fyrirtækjaeigandi sem þarfnast fjármögnunar.
Banki — banki sem dreifir táknum
Skref 1. Upphafsstilling inneignar
Til að fá tákn á Waves prófunarnetinu þarftu að hafa samband við og tilgreina heimilisfangið sem á að senda táknin á.
Hægt er að finna heimilisfangið í IDE-inu með því að opna reikningsupplýsingarnar.
Við veljum Bank 10 WAVES. Síðan staðfestum við að þær hafi borist í gegnum blokkar- og færslukönnunarforritið:
Nú skulum við dreifa táknunum frá bankanum til þeirra þátttakenda sem eftir eru. (Athugið: Allar færslur á Waves netinu eru ekki ókeypis, þannig að lágmarks jákvæð innistæða er nauðsynleg fyrir alla þátttakendur til að framkvæma færslur.)
1 BYLGJUR = 100000000 einingar (bylgjur), þar sem upphæðir geta aðeins verið heiltölur.
0.01 WAVES (færslugjald) = 1000000
Banki -> [3 BYLGJUR] -> Alice, í gegnum millifærslu (tegund: 4).
Við athugum hvort env.SEED sem færslur eru undirritaðar frá passi við bankann okkar:


Ef þú ert ekki með samsvarandi fræorðasamband skaltu einfaldlega skipta yfir í það í flipanum Reikningar og athuga aftur.
Eftir þetta búum við til, tilkynnum og undirritum færslu til að flytja 3 WAVES til Alice.
Þú getur líka fundið gögn Alice með breytunni env.accounts. Númerasetningin byrjar á 0, þannig að Alice er env.accounts[1].

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))Niðurstöðuna er einnig hægt að sjá í vafranum, tengill á hana verður sendur til baka til okkar strax eftir keyrslu. .
Við tryggjum að innistæða Alice sé fyllt upp um 3 BYLGJUR og að bankastaðan sé 10 - 3 - 0.01 = 0.699.


Við sendum Boob og Cooper 3 BYLGJUR hvor og Neli, Xenu og Mark 0.2 BYLGJUR hvor á sama hátt.
(Athugið: Við gerðum mistök með einn staf og sendum Neli 0.02 BYLGJUR. Verið varkár!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))Eftir að hafa fyllt á innistæður allra þátttakenda sjáum við:

Skref 2: Stofna dApp reikning
Við vorum sammála um að Alice yrði höfundur og eigandi dreifðrar forritsins.
Í Accounts, farðu að setja það upp sem SEED og athugaðu að env.SEED passi við Alice.
Við skulum reyna að setja upp einfaldasta mögulega handritið (samning) á reikninginn hjá Alice.
Snjalltengiliðir í Waves eru forsendur sem koma í veg fyrir eða leyfa ákveðinni tegund af útleiðandi viðskiptum að eiga sér stað við ákveðnar aðstæður. Í þessu tilfelli er það skilyrði ALLTAF. Samningskóðinn er sannur. Við köllum á deploy().

Gjaldið fyrir setScript færsluna er 1400000/100000000 = 0.014 WAVES. Alice á 2.986 WAVES eftir á reikningnum sínum.
Við skulum nú reyna að setja upp flóknari snjallsamningsrökfræði á reikning Alice, eins og lýst er í
Ride4Dapps inniheldur nú tvær nýjar gerðir af skýringum:
- @Hægt að innkalla(i) — tekur sem breytu i þann reikning sem kallaði á/undirritaði færsluna. Niðurstaða þessarar aðgerðar ákvarðar breytinguna á dApp stöðu reikningsins. Aðrir reikningar geta búið til færslur og framkvæmt aðgerðir með þessari skýringu, sem breytir dApp stöðu reikningsins.
- @Staðfestingaraðili(tx) — Staðfestingarforrit fyrir færslur með tx færslubreytunni. Samsvarar forsendu rökfræði RIDE. Þessa segð er hægt að nota til að virkja eða slökkva á frekari breytingum á rökfræði snjallsamninga á dApp reikningi.
Gerum það dApp reikning sem sameiginlegt veski fyrir alla þátttakendur.

Til að athuga hvaða samningur er virkur á reikningi er hægt að afrita base64 kóðann fyrir snjallsamninginn í blokkakönnunarforritið og þekkja hann með afþýðanda ()



Við tryggjum að rökfræði snjallsamningsins samræmist því sem við væntum.
Alice á 2.972 BYLGJUR eftir á innistæðunni sinni.
Þetta dApp heldur utan um hversu mikið hver þátttakandi leggur af mörkum til sameiginlegs sjóðs í gegnum kerfi gagnafærsla — DataEntry(núverandi lykill, ný upphæð), þar sem currentKey er reikningurinn sem kallar á innlánsfallið og newAmount er gildi endurnýjaðrar innistæðu.
Boob og Cooper leggja hvor um sig 1 WAVES inn á dApp reikninginn.

Við gerum mistök og færslan mistekst. Þetta er vegna þess að þrátt fyrir að tryggja að við séum að framkvæma færsluna fyrir hönd Bobs, höfum við slegið inn rangt vísitöluna og tilgreint bankareikning sem er ekki með snjallsamning. Mikilvægt er að hafa í huga að það er gjald fyrir misheppnaðar tilraunir til að hefja færslur. það er ekki hægt að fjarlægja það! Alice á 2.972 BYLGJUR eftir á reikningnum sínum. Bob á 3 BYLGJUR.
Bob sendi 1 WAVES á dApp reikninginn.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bob á 1.99 WAVES eftir. Það þýðir að Bob greiddi 0.01 WAVES í þóknun.

Staða Alice var 2.972 WAVES, nú er hún 3.972. Einnig var færsla skráð á reikning Alice, en ekkert gjald var innheimt á dApp reikninginn (Alice).
Eftir að Cooper fyllti einnig á reikning Alice varð innistæðan hennar 4.972 BYLGUR.

Þú getur fundið út hver á hversu margar WAVES í sameiginlegu veskinu í flipanum Gögn í blokkakönnuninni.
Cooper skipti um skoðun um að skilja eftir 1 WAVES í sameiginlega veskinu og ákvað að taka út helminginn af affinities sínum. Til að gera þetta verður hann að kalla á withdraw fallið.

Hins vegar höfðum við rangt fyrir okkur aftur, þar sem úttektarfallið hefur gjörólíkar breytur og aðra undirskrift. Þegar snjallsamningar eru hannaðir á RIDE4DAPPS ætti að huga að þessu atriði.

Staða Coopers stendur nú í 2.48 WAVES. Þetta þýðir 3 WAVES - 1 - 0.01, og síðan + 0.5 - 0.01. Þar af leiðandi kostar hvert innlegg og úttekt 0.01 WAVES. Þar af leiðandi breyttust færslur í töflunni fyrir eiganda dApp á eftirfarandi hátt.

Bob ákvað einnig að taka út einhverja upphæð úr sameiginlega veskinu en gerði mistök og reyndi að taka út 1.5 WAVES.

Hins vegar innihélt snjallsamningurinn ávísun fyrir þessa stöðu.
Xena er svindlari sem reyndi að taka út 1 WAVES af almennum reikningi.

Henni mistókst líka.
Í næsta kafla munum við skoða flóknari mál sem tengjast ófullkomleika Alice dApp reikningsins.
Heimild: www.habr.com
