
Përshëndetje të gjithëve!
Së fundmi Waves Labs 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 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Ă« dhe nĂ« â shembulli me .
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 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:
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ë:

ïżŒ
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].

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. .
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.


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:

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().

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ë
Ride4Dapps tani përfshin 2 lloje të reja annotaciones:
- @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.
- @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.

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 ()



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.

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 }]}))
Bob ka mbetur me 1.99 WAVES. Pra, Bob pagoi 0.01 WAVES tarifë

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.

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.

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.

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ë.

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.

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.

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
