Hello!
Újabban a Waves Labs
Azért választottuk a DAO esetet
Egy egyszerű példával kezdtük
Nézzük meg ezt a példát, teszteljük a hipotéziseket, és nézzünk meg néhány furcsaságot:
Legyen nekünk Alice – dApp tulajdonos
Boob és Cooper Alice partnerei, az Alice-BC DAO társalapítói
Neli cégtulajdonos, akinek finanszírozásra van szüksége
Bank - tokeneket forgalmazó bank
1. szakasz. Egyenlegek inicializálása
Ahhoz, hogy tokeneket kaphasson a waves teszthálózaton, kapcsolatba kell lépnie
A címet az IDE-ben találhatja meg, ha megnyitja fiókadatait.
Kiemeljük a Bank 10 WAVES-t. Ezután ellenőrizzük, hogy a blokk és tranzakció böngészőn keresztül érkeztek-e:
Most pedig osszuk ki a bank tokenjeit a többi résztvevőnek. (Megjegyzés: A waves hálózaton minden tranzakció nem ingyenes, ezért minden résztvevőnek minimális pozitív egyenleg szükséges a tranzakciók végrehajtásához).
1 WAVES = 100000000 egység (hullám), mivel az összegek csak egészek lehetnek
0.01 WAVES (Tranzakciós díj) = 1000000
Bank -> [3 WAVES] -> Alice, TransferTransaction (Típus: 4).
Ellenőrizzük, hogy az env.SEED, amelyről a tranzakciókat aláírják, megegyezik-e a bankunkkal:

Ha nem rendelkezik megfelelő kezdő kifejezéssel, váltson rá a Fiókok lapon, és ellenőrizze újra.
Ezt követően létrehozunk, meghirdetünk és aláírunk egy tranzakciót 3 WAVES Alice átruházására.
Alice adatait az env.accounts változón keresztül is megtudhatja. A számozás 0-tól kezdődik, így Alice env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Az eredmény a böngészőben is megfigyelhető, a végrehajtás után azonnal visszaküldjük a linket
Gondoskodunk arról, hogy Alice egyenlege 3 WAVE-val feltöltődjön, és a banki egyenleg 10 - 3 - 0.01 = 0.699 maradjon.
Boobnak és Coopernek 3-0.2, Nelinek, Xenának és Marknak egyaránt XNUMX HULLÁT küldünk.
(Megjegyzések: Egy karakteres hibát követtünk el, és Nelinek 0.02 WAVES-t küldtünk. Vigyázat!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Az összes résztvevő egyenlegének feltöltése után a következőket látjuk:
2. lépés: Hozzon létre egy dApp-fiókot
Megállapodtunk, hogy Alice lesz a decentralizált alkalmazás létrehozója és tulajdonosa.
Lépjen a Fiókok elemre, állítsa be SEED-re, és ellenőrizze, hogy az env.SEED egyezik-e Alice-szel.
Próbáljuk meg a lehető legegyszerűbb szkriptet (szerződést) telepíteni Alice fiókjába.
A Waves intelligens kapcsolatai olyan predikátumok, amelyek bizonyos feltételek mellett tiltják vagy lehetővé teszik bármilyen típusú kimenő tranzakciót. Ebben az esetben ez a feltétel MINDIG fennáll. A szerződés kódja igaz. Hívja meg a deploy().
SetScript-tranzakciónkénti díj 1400000/100000000 = 0.014 WAVES. Alice mérlegén 2.986 HULLÁM maradt.
Most próbáljunk meg bonyolultabb intelligens szerződési logikát telepíteni az Alice-fiókra, a leírásban leírtak szerint
Ride4Dapps most 2 új megjegyzéstípust tartalmaz:
- @Hívható(i) — i paraméterként veszi azt az adatot, hogy melyik számla hívta/aláírta a tranzakciót. Ennek a funkciónak az eredménye, amely meghatározza a dApp-fiók állapotának változását. Más fiókok tranzakciókat hozhatnak létre és funkciókat hajthatnak végre ezzel a megjegyzéssel, és módosíthatják a dApp-fiók állapotát.
- @Verifier(tx) — Tranzakcióellenőrző a tranzakció tx paraméterrel. Megfelel a RIDE predikátum logikájának. Ebben a kifejezésben engedélyezheti vagy tilthatja meg az intelligens szerződések logikájának további módosításait a dApp-fiókban.
Csináljuk DAPP fiókja közös pénztárca minden résztvevő számára.
Annak ellenőrzéséhez, hogy jelenleg melyik szerződés aktív a fiókjában, másolja be az intelligens szerződés base64 kódját a blokkböngészőbe, és ismerje fel egy decompiler segítségével (
Gondoskodunk arról, hogy az intelligens szerződés logikája megfeleljen az elvárásoknak.
Alice mérlegén 2.972 HULLÁM maradt.
Ez a dApp nyomon követi, hogy az egyes résztvevők mennyivel járulnak hozzá a közös alaphoz egy mechanizmuson keresztül adattranzakció — DataEntry (jelenlegi kulcs, új összeg), ahol a currentKey a betéti funkciót meghívó számla, a newAmount pedig a feltöltött egyenleg értéke.
Boob és Cooper 1 WAVES-al fizeti be a dApp számlájára.
Hibát követünk el, és a tranzakció nem megy végbe. Mivel annak ellenére, hogy meg voltunk győződve arról, hogy Bob nevében bonyolítunk tranzakciót, hibáztunk az indexben, és olyan bankszámlát jelöltünk meg, amelyen nincs okos szerződés. Itt érdemes megjegyezni egy fontos pontot - a sikertelen tranzakciók kezdeményezésére díjat kell fizetni nem távolítható el! Alice mérlegén 2.972 HULLÁM maradt. Bobnak 3 HULLÁMA 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 maradt. Vagyis Bob 0.01 WAVES jutalékot fizetett
Alice mérlegén 2.972 HULLÁM volt, most 3.972. Az Alice-számlán is regisztráltak egy tranzakciót, de a dApp-fiókból (Alice) nem számítottak fel jutalékot.
Miután Cooper is feltöltötte a számlát, Alice egyenlege 4.972 WAVES lett.
Az Adatok lapon található blokkböngészőben megtudhatja, hogy kinek hány WAVES van a közös pénztárcában.
Cooper meggondolta magát, hogy az 1 WAVES összegét az általános pénztárcán hagyja, és úgy döntött, hogy visszavonja az affinitás felét. Ehhez meg kell hívnia a visszavonási függvényt.
Azonban ismét tévedtünk, hiszen a visszavonási függvénynek teljesen más paraméterei és más aláírása van. Amikor intelligens szerződéseket tervez a RIDE4DAPPS-on, figyeljen erre a pontra
A Cooper mérlegében most 2.48 WAVES van. Ennek megfelelően 3 HULLÁM - 1 - 0.01, majd + 0.5 - 0.01. Ennek megfelelően minden befizetési és kifizetési hívás 0.01 WAVES-ba kerül. Ennek eredményeként a dApps tulajdonosok táblázatának bejegyzései az alábbiak szerint módosultak.
Bob is úgy döntött, hogy kivesz egy kis pénzt a közös pénztárcából, de hibázott és megpróbált 1.5 WAVES-t kivenni.
Az intelligens szerződés azonban ellenőrizte ezt a helyzetet.
Xena csaló, megpróbált 1 WAVES-t kivenni a teljes számláról.
Neki sem jött össze.
A következő részben az Alice dApp fiók tökéletlenségével kapcsolatos összetettebb problémákat fogjuk megvizsgálni.
Forrás: will.com