Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Mindenkinek szia!

Nemrégiben a Waves Labs bejelentette versenyt hirdetett a fejlesztők számára a RIDE okos szerződés nyelv tesztelési hálózatra való kibővítése kapcsán, a decentralizált alkalmazásokhoz készült Ride4Dapps!

A DAO esettanulmányt választottuk, mert Ventuary tervez dApp fejlesztésével foglalkozni, amely társadalmi funkciókkal bír: szavazás, crowdfunding, bizalmi kezelés stb.
Egy egyszerű példával kezdtük a munkát Q&A ülések és a RIDE IDE — példa alapján közös tárca.

Nézzük meg ezt a példát, ellenőrizzük a hipotéziseket, és nézzük meg néhány furcsaságot:

Legyen Alice — dApp tulajdonos
Boob és Cooper — Alice partnerei, az Alice-BC DAO társalapítói
Neli — az üzlet tulajdonosa, aki finanszírozásra vágyik
Bank — a tokeneket kiosztó bank

1. lépés. A egyenlegek inicializálása

Ahhoz, hogy a waves teszt-hálózatban tokeneket kapjunk, meg kell keresni a faucet és megadni a címet, ahova a tokeneket küldeni kell.
A címet az IDE-ben lehet megtudni, az akkuntadatok kibővítésével.
Jelöljük ki a Bankot 10 WAVES-szel. Ezután ellenőrizzük, hogy megérkeztek-e a blokklánc és tranzakciók böngészőjén keresztül: böngésző

Most adjuk ki a tokeneket a bankból a többi résztvevőnek. (Megjegyzés: Minden tranzakció a waves hálózatában nem ingyenes, ezért minden résztvevőnek minimális pozitív egyensúllyal kell rendelkeznie, hogy tranzakciókat végezhessenek).

1 WAVES = 100000000 egység (wavelets), mivel az összeg csak egész szám lehet
0.01 WAVES (tranzakciós díj) = 1000000

Bank -> [3 WAVES] -> Alice, a TransferTransaction (Típus: 4) segítségével.

Ellenőrizzük, hogy az env.SEED, amivel a tranzakciókat aláírják, egyezik-e a Bank-kal:
Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Ha nincs megfelelő seed kifejezése, egyszerűen válts át rá az Accounts lapon, és ellenőrizd újra.
Ezután létrehozzuk, bejelentjük és aláírjuk a tranzakciót, amelyben 3 WAVES-t küldünk Alice-nak.
Alice adatait az env.accounts változón keresztül is meg lehet tudni. A számozás 0-ról indul, így Alice az env.accounts[1].
Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

Az eredményt a böngészőben is figyelemmel kísérhetjük, egy hivatkozást visszakapunk azonnal a tranzakció végrehajtása után. tranzakció.

Meggyőződünk róla, hogy Alice egyenlege 3 WAVES-szel nőtt, míg a bank egyenlege 10 — 3 — 0.01 = 0.699 maradt.
Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Küldjünk Boob-nak és Cooper-nek 3 WAVES-t, Nelinek, Xenának és Mark-nak 0.2 WAVES-t ugyanígy.
(Megjegyzés: Hibát vétettünk egy számjegyben és Nelinek 0.02 WAVES-t küldtünk. Legyetek figyelmesek!)

broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))

Miután minden résztvevő egyenlegét feltöltöttük, így állunk:
Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

2. lépés. dApp fiók létrehozása

Megállapodtunk abban, hogy a decentralizált alkalmazás létrehozója és tulajdonosa Alice lesz.
Az Accounts-ba lépve beállítjuk őt SEED-ként, és ellenőrizzük, hogy az env.SEED megfelel-e Alice-nak.

Próbáljuk meg telepíteni Alice fiókjára a lehető legegyszerűbb szkriptet (szerződést).
A Waves okos szerződései azokat a predikátumokat képviselik, amelyek megakadályozzák vagy lehetővé teszik egy adott kimenő tranzakciók végrehajtását bizonyos feltételek mellett. Ebben az esetben ez a feltétel: ALWAYS. A szerződés kódja: true. Hívjuk meg a deploy()-t.

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

A setScript tranzakció díja 1400000/100000000 = 0.014 WAVES. Alice egyenlegén 2.986 WAVES maradt.

Próbáljuk meg most egy bonyolultabb logikájú okos szerződést telepíteni Alice fiókjára, amely a példa

Ride4Dapps most két új típusú annotációt tartalmaz:

  1. @Callable(i) — i paraméterként fogadja el az adatokat arról, hogy melyik fiók indította/aláírta a tranzakciót. Ennek a funkciónak az eredménye határozza meg a dApp fiók állapotának megváltozását. Más fiókok tranzakciókat indíthatnak és végrehajthatják a funkciókat ezzel a megjegyzéssel, megváltoztatva a dApp fiók állapotát.
  2. @Verifier(tx) — Tranzakció verifikálója a tx tranzakció paraméterrel. A RIDE predikátumainak logikáját követi. Csak ebben a kifejezésben lehet engedélyezni vagy megtiltani a dApp fiók okos szerződéseinek logikájának későbbi módosítását.

Lépjünk a jövő felé, dApp a fiók közös tárcaként minden résztvevő számára.
Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Annak ellenőrzéséhez, hogy jelenleg melyik szerződés aktív a fiókon, a blokk böngészőjében másoljuk ki az okos szerződés base64 kódját, és ismerjük fel a dekompilátor segítségével (például)
Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)
Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)
Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Győződjünk meg róla, hogy az okos szerződés logikája megfelel az elvárásainknak.
Alice egyenlegén 2.972 WAVES maradt.

Ez a dApp nyilvántartja, hogy a résztvevők mennyit hozzájárulnak a közös alaphoz a data transaction — DataEntry(currentKey, newAmount), ahol currentKey az a fiók, amely meghívja a deposit funkciót, míg newAmount a feltöltött egyenleg értéke.

Bob és Cooper 1 WAVES betétet helyeznek el a dApp fiókba.
Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Hibát engedünk meg, és a tranzakció nem megy át. Mivel annak ellenére, hogy megbizonyosodtunk arról, hogy Bob nevében indítunk tranzakciót, hibát vétettünk az indexben, és a Bank fiókot adtuk meg, amin nincs okos szerződés. Itt fontos megjegyezni — a sikertelen tranzakciós kezdeményezésekért díjat nem számítanak fel! Alice egyenlegén 2.972 WAVES maradt. Bob-nak 3 WAVES van.

Bob 1 WAVES-t küldött a dApp fióknak.

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Bob-nak maradt 1,99 WAVES. Tehát Bob 0,01 WAVES díjat fizetett.

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Alice egyenlege 2,972 WAVES volt, most 3,972. Az Alice fiókjához is társított tranzakció, azonban a dApp Account (Alice) esetében nem volt levonva díj.
Miután Cooper is feltöltötte Alice számláját, az egyenleg 4,972 WAVES lett.

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Arról, hogy kinek mennyi WAVES van a közös pénztárcában, a blokklánc böngészője 'Data' fülén keresztül tájékozódhatunk.

Cooper meggondolta magát, és úgy döntött, hogy nem hagy 1 WAVES-t a közös pénztárcában, hanem az összeg felezésére törekszik. Ehhez meg kell hívnia a withdraw funkciót.

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Azonban ismét tévedtünk, mivel a withdraw funkciónak teljesen más paraméterei, különböző szignatúrája van. Amikor a smartraktárakat RIDE4DAPPS-ban tervezitek, figyelni kell erre a pontra.

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Cooper egyenlege 2,48 WAVES lett. Ennek megfelelően: 3 WAVES - 1 - 0,01, majd + 0,5 - 0,01. Ennek megfelelően minden deposit és withdraw hívás 0,01 WAVES-be kerül. Végül a dApps tulajdonosainak táblázatában az adatok a következőképpen változtak meg.

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Bob is úgy döntött, hogy kivon egy kis pénzt a közös pénztárcából, de tévedett, és 1,5 WAVES-t akart kivonni.

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Azonban a smartraktárban volt egy ellenőrzés az ilyen helyzetekre.

Xena csaló, megpróbálta kivonni az 1 WAVES-t a közös számláról.

Waves okosszerződések írását tanuljuk RIDE és RIDE4DAPPS nyelven. 1. rész (Többfelhasználós pénztárca)

Neki sem sikerült.

A következő részben bonyolultabb kérdésekkel foglalkozunk, amelyek Alice dApp Account-jának tökéletlenségeivel kapcsolatosak.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster