
Hello!
A Waves Labs nemrégiben... Egy fejlesztői verseny, amely egybeesik a RIDE intelligens szerződésnyelv-kiterjesztés decentralizált alkalmazásokhoz, a Ride4Dapps teszthálózati kiadásával!
Azért választottuk a DAO esetet, mert egy közösségi funkciókkal rendelkező dApp fejlesztését tervezi: szavazás, adománygyűjtés, vagyonkezelés stb.
Egy egyszerű példával kezdtük, és - példa a következővel: .
Nézzük meg ezt a példát, teszteljük a hipotéziseket, és vegyünk figyelembe néhány furcsaságot:
Tegyük fel, hogy van Alice - dApp Tulajdonosunk
Boob és Cooper Alice partnerei és az Alice-BC DAO társalapítói.
Neli egy vállalkozó, akinek finanszírozásra van szüksége.
Bank – tokeneket kiosztó bank
1. lépés. Mérlegek inicializálása
Ahhoz, hogy tokeneket kapjon a Waves teszthálózaton, fel kell vennie a kapcsolatot a következővel: és adja meg azt a címet, ahová a tokeneket küldeni kell.
A cím az IDE-ben a fiókadatok megnyitásával található meg.
Kiválasztjuk a Bank 10 WAVES-t. Ezután ellenőrizzük, hogy megérkeztek-e a blokk- és tranzakcióböngészőn keresztül:
Most osszuk szét a tokeneket a bankból a fennmaradó résztvevők között. (Megjegyzések: A Waves hálózaton végzett összes tranzakció nem ingyenes, ezért minimális pozitív egyenleg szükséges ahhoz, hogy minden résztvevő tranzakciókat hajtson végre.)
1 HULLÁM = 100 000 000 egység (wavelet), mivel a mennyiségek csak egész számok lehetnek
0.01 WAVES (tranzakciós díj) = 1000000
Bank -> [3 HULLÁM] -> Alice, TransferTransaction-ön keresztül (Típus: 4).
Ellenőrizzük, hogy az env.SEED, amelyből a tranzakciókat aláírjuk, megegyezik-e a bankunkkal:


Ha nincs egyező kezdőbetű-kifejezésed, egyszerűen válts rá a Fiókok lapon, és ellenőrizd újra.
Ezután létrehozunk, bejelentünk és aláírunk egy tranzakciót 3 WAVES Alice-nek történő átvitelére.
Alice adatait az env.accounts változón keresztül is megtalálhatod. A számozás 0-val kezdődik, tehát Alice az env.accounts[1].

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))Az eredmény a böngészőben is látható, a végrehajtás után azonnal kapunk egy linket hozzá. .
Gondoskodunk arról, hogy Alice egyenlege 3 HULLÁMMAL töltődjön fel, és a bankszámlaegyenleg 10 - 3 - 0.01 = 0.699 legyen.


Boobnak és Coopernek fejenként 3 HULLÁMOT, Nelinek, Xenának és Marknak pedig fejenként 0.2 HULLÁMOT küldünk ugyanígy.
(Megjegyzések: Hibáztunk egy karakterrel, és Nelinek 0.02 HULLÁMOT küldtünk. Vigyázz!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))Miután feltöltöttük az összes résztvevő egyenlegét, a következőket látjuk:

2. lépés: Hozz létre egy dApp fiókot
Megegyeztünk, hogy Alice lesz a decentralizált alkalmazás létrehozója és tulajdonosa.
A Fiókok részben válaszd a SEED telepítését, és ellenőrizd, hogy az env.SEED megegyezik-e Alice-szel.
Próbáljuk meg telepíteni a lehető legegyszerűbb szkriptet (szerződést) Alice fiókjára.
A Waves intelligens kontaktusai olyan predikátumok, amelyek bizonyos feltételek teljesülése esetén megakadályozzák vagy engedélyezik egy bizonyos típusú kimenő tranzakció létrejöttét. Ebben az esetben ez a feltétel MINDIG teljesül. A szerződéskód igaz. Meghívjuk a deploy() függvényt.

A setScript tranzakció díja 1400000/100000000 = 0.014 WAVES. Alice egyenlegén 2.986 WAVES maradt.
Most próbáljunk meg bonyolultabb intelligens szerződéses logikát telepíteni Alice fiókjára, a következőben leírtak szerint:
Ride4Dapps mostantól 2 új annotációtípust tartalmaz:
- @Callable(i) — paraméterként az i fiókot veszi fel, amely meghívta/aláírta a tranzakciót. A függvény eredménye határozza meg a fiók dApp állapotának változását. Más fiókok tranzakciókat hozhatnak létre és függvényeket hajthatnak végre ezzel az annotációval, megváltoztatva a fiók dApp állapotát.
- @Verifier(tx) — Egy tranzakció-ellenőrző a tx tranzakciós paraméterrel. Megfelel a RIDE predikátumlogikájának. Ez a kifejezés használható a dApp-fiók intelligens szerződéses logikájának további módosításainak engedélyezéséhez vagy letiltásához.
Csináljuk DAPP számla, mint közös pénztárca minden résztvevő számára.

Annak ellenőrzéséhez, hogy melyik szerződés aktív egy adott számlán, kimásolhatja az intelligens szerződés base64 kódját a blokkböngészőben, és felismerheti azt egy dekompilátorral ()



Gondoskodunk arról, hogy az intelligens szerződés logikája megfeleljen az elvárásainknak.
Alice egyenlegén 2.972 HULLÁM maradt.
Ez a dApp egy mechanizmuson keresztül nyomon követi, hogy az egyes résztvevők mennyivel járulnak hozzá a közös alaphoz adat tranzakció — DataEntry(aktuálisKulcs, újÖsszeg), ahol a currentKey a befizetési függvényt meghívó számla, az newAmount pedig a feltöltött egyenleg értéke.
Boob és Cooper egyaránt 1 WAVES-t fizetnek be a dApp számlára.

Hibát követünk el, és a tranzakció sikertelen. Ez azért van, mert annak ellenére, hogy biztosítottuk a tranzakció végrehajtását Bob nevében, elgépeltük az indexet, és olyan bankszámlát adtunk meg, amelyhez nem tartozik intelligens szerződés. Fontos megjegyezni: a sikertelen tranzakcióindítási kísérletekért díjat számítunk fel. azt nem lehet eltávolítani! Alice egyenlegén 2.972 HULLÁM maradt. Bobnak 3 HULLÁM van.
Bob 1 WAVES-t küldött a dApp fiókba.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bobnak 1.99 WAVES-e maradt. Ez azt jelenti, hogy Bob 0.01 WAVES-t fizetett díjként.

Alice egyenlege 2.972 WAVES volt, most 3.972. Egy tranzakciót regisztráltak Alice számláján is, de a dApp számlán (Alice) nem számítottak fel díjat.
Miután Cooper is feltöltötte Alice számláját, az egyenlege 4.972 HULLÁM lett.

A blokkböngésző Adatok fülén megtudhatod, hogy ki hány WAVE-t birtokol a megosztott tárcában.
Cooper meggondolta magát, és úgy döntött, hogy 1 WAVES-t hagy a megosztott tárcában, és kiveszi az affinitásai felét. Ehhez meg kell hívnia a withdraw függvényt.

Azonban ismét tévedtünk, mivel a withdraw függvénynek teljesen más paraméterei és eltérő aláírása van. Amikor okos szerződéseket tervezel a RIDE4DAPPS-on, erre a pontra érdemes odafigyelni.

Cooper egyenlege most 2.48 WAVES. Ez 3 WAVES-t jelent - 1 - 0.01, majd + 0.5 - 0.01. Következésképpen minden befizetés és kifizetés 0.01 WAVES-be kerül. Ennek eredményeként a dApp tulajdonos tábla bejegyzései a következőképpen változtak.

Bob úgy döntött, hogy kivesz valamennyit a megosztott tárcából, de hibázott, és megpróbált kivenni 1.5 WAVES-t.

Az intelligens szerződés azonban tartalmazott egy ellenőrzést erre a helyzetre.
Xena egy csaló, aki 1 WAVES-t próbált kivenni az általános számláról.

Ő is kudarcot vallott.
A következő részben az Alice dApp fiók tökéletlenségeivel kapcsolatos összetettebb problémákat vizsgáljuk meg.
Forrás: will.com
