Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Përshëndetje të gjithëve!

Së fundmi, Waves Labs anocoi 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 Ventuary 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ë seancat Q&A dhe në RIDE IDE — shembulli me në portofolin e përbashkët.

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 faucet 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: shikuesi

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ë:
Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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].
Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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

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.
Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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:
Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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

Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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

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

  1. @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.
  2. @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.
Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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 (për shembull)
Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)
Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)
Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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.
Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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 }]}))

Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

Bob i mbetën 1.99 WAVES. Pra, Bob pagoi 0.01 WAVES si taksë.

Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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.

Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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.

Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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.

Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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

Mësojmë si të shkruajmë kontrata inteligjente Waves me 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ë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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.

Mësojmë si të shkruajmë kontrata inteligjente Waves me RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli shumëpërdorues)

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

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster