Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Përshëndetje të gjithëve!

Së fundmi Waves Labs lauan një garë për zhvilluesit e lidhur me publikimin në rrjetin testues të zgjerimit të gjuhës së kontratave smart RIDE për aplikacionet e decentralizuara Ride4Dapps!

Ne zgjodhëm rastin DAO, pasi Ventuary ka për qëllim të zhvillojë dApp me funksione sociale: votim, financim, menaxhim të besimit dhe të tjera.
Ne filluam me njĂ« shembull tĂ« thjeshtĂ« nĂ« sesionet Q&A dhe nĂ« RIDE IDE — shembulli me portofolin e pĂ«rbashkĂ«t.

Le të shqyrtojmë këtë shembull, të verifikojmë hipotezat dhe të shqyrtojmë disa çuditë:

Le tĂ« kemi Alice — pronaren e dApp
Boob dhe Cooper — partnerĂ«t e Alice, bashkĂ«themeluesit e Alice-BC DAO
Neli — pronari i biznesit qĂ« ka nevojĂ« pĂ«r financim
Banku — banka qĂ« shpĂ«rndan tokena

Hapi 1. Inizializimi i bilancit

Për të marrë tokena në rrjetin testues waves, duhet të kontaktoni faucet dhe të tregoni adresën në të cilën do të dërgohen tokenat.
Adresa mund të merret në IDE, duke hapur të dhënat e llogarisë.
Dhe ndamë Bankut 10 WAVES. Më pas kontrollojmë që ato kanë arritur përmes shikuesit të bllokave dhe transaksioneve: shikuesi

Tani le të shpërndajmë tokenat nga banka për pjesëmarrësit e tjerë. (Shënime: Të gjitha transaksionet në rrjetin waves nuk janë falas, për shkak se është e nevojshme një bilanc minimal pozitiv për të gjithë pjesëmarrësit për të kryer transaksione).

1 WAVES = 100000000 njësi (wavelets), pasi shumat mund të jenë vetëm integer.
0.01 WAVES (Tarifa e Transaksionit) = 1000000.

Bank -> [3 WAVES] -> Alice, përmes TransferTransaction (Tipi: 4).

Po kontrollojmë që env.SEED, nga i cili nënshkruhen transaksionet, përputhet me Bankën tonë:
Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)
ïżŒ
Nëse nuk keni fjalëkalimin e përputhshëm seed, thjesht kaloni te ai në skedën Llogaritë dhe kontrolloni përsëri.
Pas kësaj krijojmë, njoftojmë dhe nënshkruajmë transaksionin për transferimin e 3 WAVES te Alice.
Informacionin e Alicës mund ta mësoni gjithashtu përmes variablit env.accounts. Numërimi fillon nga 0, pra Alice është env.accounts[1].
Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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

Rezultatin mund ta shikoni gjithashtu në shikues, lidhja për të do na kthehet menjëherë pas përmbushjes së transaksionit. transaksioni.

Sigurohemi qĂ« bilanci i AlicĂ«s tĂ« jetĂ« rritur me 3 WAVES, dhe bilanci i bankĂ«s tĂ« mbetet 10 — 3 — 0.01 = 0.699.
Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Dërgojmë Boob dhe Cooper nga 3 WAVES secili, ndërsa Neli, Xena dhe Mark nga 0.2 WAVES po ashtu me të njëjtën mënyrë.
(Shënime: Kemi bërë një gabim me një shenjë dhe i dërguam Neli 0.02 WAVES. Përgjigjuni me kujdes!)

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

Pas mbushjes së bilanceve të të gjithë pjesëmarrësve, shohim:
Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Hapi 2. Krijimi i llogarisë dApp

Kemi rënë dakord që krijuesi dhe pronari i aplikacionit të decentralizuar do të jetë Alice.
Në llogaritë kalojmë dhe e vendosim atë si SEED dhe verifikojmë që env.SEED përputhet me Alice.

Të provojmë të vendosim në llogarinë e Alice skenarin (kontraktin) më të thjeshtë të mundshëm.
Kontraktet inteligente nĂ« Waves janĂ« predikate qĂ« ndalojnĂ« ose lejojnĂ« ekzekutimin e njĂ« forme tĂ« caktuar tĂ« transaksionit dalĂ«s nĂ«n kushte tĂ« caktuara. NĂ« kĂ«tĂ« rast kushti Ă«shtĂ« — ALWAYS. Kodi i kontratĂ«s — true. ThĂ«rrasim deploy().

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Tarifa për transaksionin setScript është 1400000/100000000 = 0.014 WAVES. Te Alice mbetet 2.986 WAVES.

Të provojmë tani të vendosim në llogarinë e Alice një logjikë më të komplikuar të kontratës inteligjente, të përshkruar në shembullin

Ride4Dapps tani përfshin 2 lloje të reja annotaciones:

  1. @Callable(i) — merr si parametĂ«r i, tĂ« dhĂ«nat se cili llogari ka thirrur/nĂ«nshkruar transaksionin. VetĂ«m rezultati i kĂ«saj funksioni pĂ«rcakton ndryshimin e gjendjes sĂ« llogarisĂ« dApp. Llogari tĂ« tjera mund tĂ« krijojnĂ« transaksione dhe tĂ« ekzekutojnĂ« funksione me kĂ«tĂ« annotim dhe tĂ« ndryshojnĂ« gjendjen e llogarisĂ« dApp.
  2. @Verifier(tx) — Verifikuesi i transaksionit me parametrin tx tĂ« transaksionit. PĂ«rputhet me logjikĂ«n e predikateve nga RIDE. NĂ« kĂ«tĂ« shprehje mund tĂ« lejohet ose ndalojĂ« ndryshimet e mĂ«tejshme tĂ« logjikĂ«s sĂ« kontratave inteligjente nĂ« llogarinĂ« dApp.

Le ta bëjmë dApp llogaria si një portofol të përbashkët për të gjithë pjesëmarrësit.
Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Për të kontrolluar se cili kontratë është aktive tani në llogari, mund të kopjoni kodin base64 të kontratës inteligjente në shfletuesin e bllokëve dhe ta njohim atë përmes dekoduesit (për shembull)
Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)
Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)
Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Sigurohemi që logjika e kontratës inteligjente përputhet me atë që presim.
Alicia ka mbetur me 2.972 WAVES në bilancin e saj.

Ky dApp mban regjistrimin se sa kontribuon çdo pjesĂ«marrĂ«s nĂ« fondin e pĂ«rbashkĂ«t pĂ«rmes mekanizmit data transaction — DataEntry(currentKey, newAmount), ku currentKey Ă«shtĂ« llogaria qĂ« thĂ«rret funksionin deposit dhe newAmount Ă«shtĂ« vlera e bilancit tĂ« rritur.

Boob dhe Cooper depozitojnë në llogarinë dApp me 1 WAVES.
Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

BĂ«jmĂ« njĂ« gabim dhe transaksioni nuk kalon. Duke qenĂ« se, pavarĂ«sisht qĂ« u siguruam se po bĂ«nim transaksionin nĂ« emĂ«r tĂ« Bob, u gabuam nĂ« indeks dhe treguam llogarinĂ« Bank, ku nuk ka kontratĂ« tĂ« zgjuar. ËshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se pĂ«r pĂ«rpjekjet e dĂ«shtuar pĂ«r tĂ« iniciuar transaksione, tarifa nuk merret! Alice ka mbetur me 2.972 WAVES. Bob ka 3 WAVES.

Bob dërgoi 1 WAVES në llogarinë dApp.

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

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Bob ka mbetur me 1.99 WAVES. Pra, Bob pagoi 0.01 WAVES tarifë

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Alice kishte 2.972 WAVES, tani ka 3.972. Në llogarinë e Alice është regjistruar gjithashtu një transaksion, megjithatë nga llogaria dApp (Alice) nuk është ndonjë tarifë e hequr.
Pas që Cooper gjithashtu e mbushi llogarinë, Alice tani ka 4.972 WAVES.

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Për të ditur se sa WAVES i përkasin kush në portofolin e zakonshëm, mund të merret informacion në shikuesin e bllokut në seksionin Data.

Cooper është tërhequr nga mbajtja e shumës prej 1 WAVES në portofolin e përbashkët dhe vendosi të tërheqë gjysmën e fondeve. Për këtë, ai duhet të thërrasë funksionin withdraw.

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Megjithatë, sërish gabuam, pasi funksioni tërheq ndryshe, me një nënshkrim të ndryshëm. Kur të dizajnoni kontratat inteligjente në RIDE4DAPPS, duhet të merrni parasysh këtë aspekt.

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Cooper ka 2.48 WAVES në bilanc. Pra, 3 WAVES - 1 - 0.01, dhe pastaj + 0.5 - 0.01. Pra, çdo thirrje për depozitimin dhe tërheqjen kushton 0.01 WAVES. Si rezultat, në tabelën e pronarëve të dApps, regjistrimet ndryshuan si më poshtë.

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Bob gjithashtu vendosi të tërheqë një shumë nga portofoli i përbashkët, por gaboi dhe përpiqej të tërhiqte 1.5 WAVES.

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Megjithatë, në kontratën inteligjente kishte një kontrolle për një situatë të tillë.

Xena është një mashtrues, përpiqej të tërhiqte 1 WAVES nga llogaria e përbashkët.

Mësojmë të shkruajmë kontrata smart Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Asaj gjithashtu nuk i doli.

Në pjesën e ardhshme do të shqyrtojmë çështje më komplekse që lidhen me papërsosmëritë e Llogarisë Alice dApp.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster