
Përshëndetje të gjithëve!
Së fundmi, Waves Labs një konkurs për zhvilluesit që lidhet me shpalljen e rrjetit testues të zgjerimit të gjuhës së kontratave inteligjente RIDE për aplikacione të decentralizuara Ride4Dapps!
Ne zgjodhëm rastin DAO, pasi planifikon të merret me zhvillimin e një dApp me funksione sociale: votim, mbledhje fondesh, menaxhim të besuar etj.
Ne filluam punĂ«n me njĂ« shembull tĂ« thjeshtĂ« nĂ« dhe nĂ« â shembulli me .
Le të shqyrtojmë këtë shembull, të testojmë hipotezat dhe të shqyrtojmë disa çudira:
Le tĂ« supozojmĂ« se kemi Alice â Pronarin e dApp
Boob dhe Cooper â partnerĂ«t e Alice, bashkĂ«themeluesit e Alice-BC DAO
Neli â pronari i biznesit, i cili ka nevojĂ« pĂ«r financimin
Bank â banka qĂ« ndan tokene
Hapi 1. Inizializimi i bilanceve
Për të marrë tokene në rrjetin testues waves, duhet të kontaktoni dhe të specifikoni adresën në të cilën do të dërgoni tokene.
Adresa mund të merret në IDE, duke zgjatur të dhënat e llogarisë.
Ajo që ndodh është Banku ndan 10 WAVES. Më pas kontrolloni nëse ato kanë mbërritur përmes shikuesit të bllokëve dhe transaksioneve:
Tani le të ndani tokene nga banka me pjesëmarrësit e tjerë. (Shënim: Të gjitha transaksionet në rrjetin waves nuk janë falas, prandaj është e nevojshme që të gjithë pjesëmarrësit të kenë një bilanc minimal pozitiv 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).
Kontrolloni nëse env.SEED, me të cilin nënshkruhen transaksionet korrespondon me Bankën tonë:

ïżŒ
Nëse nuk keni përputhje me frazën seed, thjesht kaloni në të në rendin e Llogarive dhe kontrolloni përsëri.
Pas kësaj, krijojmë, shpallim dhe nënshkruajmë transaksionin për transferimin e 3 WAVES Alice.
Të dhënat rreth Alicës mund të merren gjithashtu përmes variablit env.accounts. Numerimi fillon nga 0, prandaj Alice është env.accounts[1].

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))Rezultatin mund ta shihni gjithashtu në shikues, lidhja për të do të kthehet menjëherë pas ekzekutimit .
Sigurohuni qĂ« bilanci i AlicĂ«s tĂ« jetĂ« rritur me 3 WAVES, ndĂ«rsa bilanci i bankĂ«s ka mbetur 10 â 3 â 0.01 = 0.699.


Dërgoni Boob dhe Cooper nga 3 WAVES, dhe Neli, Xena dhe Mark nga 0.2 WAVES në të njëjtën mënyrë.
(Shënim: Bëmë një gabim në një shifër dhe i dërguam Neli 0.02 WAVES. Kini kujdes!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))Pas rritjes së bilanceve të të gjithë pjesëmarrësve ne shohim:

Hapi 2. Krijimi i llogarisë dApp
Ne u dakorduam që krijuesi dhe pronari i aplikacionit të decentralizuar do të jetë Alice.
Në Accounts kalojmë dhe e caktuam atë si SEED dhe kontrollojmë nëse env.SEED përputhet me Alice.
Do të provojmë të vendosim në llogarinë Alice skriptin më të thjeshtë (kontratën) të mundshëm.
Smart kontratat në Waves janë predikate që ndalojnë ose lejojnë ekzekutimin e një lloji të caktuar të transaksionit në përputhje me kushte të caktuara. Në këtë rast, kjo kusht është ALWAYS. Kodi i kontratës është true. Thërrasim deploy().

Tarifa për transaksionin setScript është 1400000/100000000 = 0.014 WAVES. Në bilancin e Alicës mbeti 2.986 WAVES.
Le të provojmë tani të vendosim në llogarinë Alice një logjikë më komplekse të smart-kontratës, të përshkruar në
Ride4Dapps tani përfshin 2 lloje të reja anotaciones:
- @Callable(i) â merr si parametĂ«r i, informacion nĂ« lidhje me cilĂ«n llogari thĂ«rriti/nĂ«nshkroi transaksionin. PikĂ«risht rezultati i kĂ«saj funksioni pĂ«rcakton ndryshimin e gjendjes sĂ« llogarisĂ« dApp. Llogari tĂ« tjera mund tĂ« krijojnĂ« transaksione dhe tĂ« ekzekutojnĂ« funksionet me kĂ«tĂ« anotacion dhe tĂ« ndryshojnĂ« gjendjen e llogarisĂ« dApp.
- @Verifier(tx) â Verifikues i transaksionit me parametrin tx tĂ« transaksionit. PĂ«rshtatet me logjikĂ«n e predikateve nĂ« RIDE. PikĂ«risht nĂ« kĂ«tĂ« shprehje mund tĂ« lejohet ose tĂ« ndalohet mĂ«tejshĂ«m ndryshimi i logjikĂ«s sĂ« smart-kontratave nĂ« llogarinĂ« dApp.
Le të bëjmë dApp llogarinë si një portofol të përbashkët për të gjithë pjesëmarrësit.

Për të kontrolluar se cili kontratë është aktive në llogari, mund të kopjoni kodin base64 të smart-kontratës në shfletuesin e bllokimeve dhe ta njohni atë përmes dekompilatorit ()



Sigurohuni që logjika e smart-kontratës përputhet me atë që presim.
Në bilancin e Alicës mbeti 2.972 WAVES.
Ky dApp mban llogari pĂ«r atĂ« qĂ« çdo pjesĂ«marrĂ«s kontribuon nĂ« fondin e pĂ«rbashkĂ«t pĂ«rmes mekanizmit data transaction â DataEntry(currentKey, newAmount), ku currentKey â Ă«shtĂ« llogaria qĂ« thĂ«rret funksionin deposit, ndĂ«rsa newAmount â Ă«shtĂ« vlera e bilancit tĂ« rritur.
Boob dhe Cooper depërtuar depozitat e tyre në llogarinë dApp me nga 1 WAVES.

BĂ«jmĂ« njĂ« gabim dhe transaksioni nuk kalon. Duke qenĂ« se pĂ«rshtatĂ«m qĂ« po bĂ«nim transaksionin nĂ« emĂ«r tĂ« Bob, gabuam nĂ« indeks dhe treguam llogarinĂ« Bank, mbi tĂ« cilĂ«n nuk ka smart-kontratĂ«. KĂ«tu merret parasysh njĂ« pikĂ« e rĂ«ndĂ«sishme â pĂ«r pĂ«rpjekjet e dĂ«shtuara pĂ«r tĂ« iniciuar transaksione tarifa nuk merret! NĂ« bilancin e AlicĂ«s mbeti 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 i mbetën 1.99 WAVES. Pra, Bob pagoi 0.01 WAVES si taksë.

Alice kishte 2.972 WAVES në llogari, tani ka 3.972. Në llogarinë e Alice u regjistrua gjithashtu një transaksion, megjithatë nga llogaria dApp (Alice) nuk u tërhoq asnjë taksë.
Pas përfundimit të depozitimit nga Cooper, në llogarinë e Alice arriti 4.972 WAVES.

Mund të informoheni se sa WAVES i përkasin kujt në portofolin e përbashkët në shfletuesin e blloqeve në sekçionin Data.
Cooper ndryshoi mendje për të lënë 1 WAVES në portofolin e përbashkët dhe vendosi të tërheqë gjysmën e shumës. Për këtë, ai duhet të thërrasë funksionin withdraw.

Megjithatë, përsëri gabuam, sepse funksioni withdraw ka parametra të ndryshëm, një nënshkrim të ndryshëm. Kur të projektoni kontrata të mençura në RIDE4DAPPS, duhet t'i kushtoni vëmendje këtij momenti.

Cooper tani ka 2.48 WAVES në llogari. Pra, 3 WAVES - 1 - 0.01, pastaj + 0.5 - 0.01. Prandaj, çdo thirrje e deposit dhe withdraw kushton 0.01 WAVES. Në fund, në tabelën e pronarëve të dApps, regjistrimet u 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 e mençur ka qenë një kontroll për këtë situatë.
Xena është një mashtruese, përpiqej të tërhiqte 1 WAVES nga llogaria e përbashkët.

Ajo gjithashtu nuk arriti dot.
Në pjesën tjetër do të shqyrtojmë çështje më të ndërlikuara që lidhen me të metat e llogarisë dApp të Alice.
Burimi: habr.com
