Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Përshëndetje të gjithëve!

Kohët e fundit, Waves Labs i shpallur konkurs për zhvilluesit kushtuar lëshimit të zgjerimit të gjuhës së kontratës inteligjente RIDE për aplikacionet e decentralizuara Ride4Dapps në rrjetin e testimit!

Ne zgjodhëm rastin DAO sepse Ventuari planifikon të zhvillojë dApps me funksione sociale: votim, mbledhje fondesh, menaxhim besimi, etj.
Ne filluam me një shembull të thjeshtë në Sesione pyetjesh dhe përgjigjesh dhe UDHËZIM IDE - shembull me portofolin e përbashkët.

Le të shohim këtë shembull, të testojmë hipotezat dhe të shohim disa çudira:

Le të kemi Alice - Pronar i dApp
Boob dhe Cooper janë partnerë të Alice, bashkëthemelues të Alice-BC DAO
Neli është një pronar biznesi që ka nevojë për financim
Banka - një bankë që shpërndan argumente

Faza 1. Inicializimi i bilanceve

Për të marrë shenja në rrjetin e testimit të valëve, duhet të kontaktoni rubinet dhe tregoni adresën në të cilën do të dërgohen argumentet.
Ju mund ta gjeni adresën në IDE duke hapur detajet e llogarisë tuaj.
Ne theksojmë Bankën 10 VALËT. Pastaj ne kontrollojmë që ata kanë mbërritur përmes shfletuesit të bllokut dhe transaksionit: recensent

Tani le të shpërndajmë argumentet nga banka tek pjesa tjetër e pjesëmarrësve. (Shënime: Të gjitha transaksionet në rrjetin waves nuk janë falas, kështu që kërkohet një bilanc minimal pozitiv për të gjithë pjesëmarrësit për të kryer transaksione).

1 VALË = 100000000 njësi (valë), pasi shumat mund të jenë vetëm numër i plotë
0.01 VALËT (Tarifa e transaksionit) = 1000000

Bank -> [3 VALËT] -> Alice, nëpërmjet TransferTransaction (Lloji: 4).

Ne kontrollojmë që env.SEED nga i cili janë nënshkruar transaksionet përputhet me Bankën tonë:
Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Nëse nuk keni një frazë fillestare që përputhet, thjesht kaloni te ajo në skedën Llogaritë dhe kontrolloni përsëri.
Pas kësaj, ne krijojmë, shpallim dhe nënshkruajmë një transaksion për transferimin e 3 WAVE Alice.
Ju gjithashtu mund t'i gjeni të dhënat e Alice përmes ndryshores env.accounts. Numërimi fillon nga 0, kështu që Alice është env.accounts[1].
Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

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

Rezultati mund të vërehet gjithashtu në shfletuesin, një lidhje me të do të na kthehet menjëherë pas ekzekutimit transaksionet.

Sigurohemi që bilanci i Alice të plotësohet me 3 VALË, dhe balanca bankare mbetet në 10 - 3 - 0.01 = 0.699.
Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Ne dërgojmë Boob dhe Cooper 3 VALËS secili, dhe Neli, Xena dhe Mark 0.2 VALËS secili në të njëjtën mënyrë.
(Shënime: Ne bëmë një gabim me një karakter dhe dërguam Neli 0.02 VALËT. Kini kujdes!)

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

Pas rimbushjes së bilanceve të të gjithë pjesëmarrësve, shohim:
Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Faza 2. Krijo një llogari dApp

Ne ramë dakord që Alice të ishte krijuesi dhe pronari i aplikacionit të decentralizuar.
Shkoni te Accounts, vendoseni si SEED dhe kontrolloni env.SEED përputhet me Alice.

Le të përpiqemi të instalojmë skriptin (kontratën) më të thjeshtë të mundshme në llogarinë e Alice.
Kontaktet inteligjente në Waves janë predikatë që ndalojnë ose lejojnë çdo lloj transaksioni dalës të ndodhë në kushte të caktuara. Në këtë rast, kjo gjendje është GJITHMONË. Kodi i kontratës është i vërtetë. Call deploy().

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Tarifa për transaksion setScript 1400000/100000000 = 0.014 VALËT. Alice ka 2.986 VALËT të mbetura në bilancin e saj.

Le të përpiqemi tani të instalojmë logjikë më komplekse të kontratës inteligjente në llogarinë Alice, të përshkruar në shembull

Ride4Dapps tani përfshin 2 lloje të reja shënimesh:

  1. @Callable(i) — merr si parametër i, të dhënat se cila llogari ka thirrur/nënshkruar transaksionin. Është rezultati i këtij funksioni që përcakton ndryshimin në gjendjen e llogarisë dApp. Llogaritë e tjera mund të krijojnë transaksione dhe të ekzekutojnë funksione me këtë shënim dhe të ndryshojnë gjendjen e llogarisë dApp.
  2. @Verifier(tx) — Verifikuesi i transaksionit me parametrin tx të transaksionit. Korrespondon me logjikën e kallëzuesit nga RIDE. Është në këtë shprehje që ju mund të lejoni ose ndaloni ndryshime të mëtejshme në logjikën e kontratave inteligjente në llogarinë dApp.

Le ta bejme DAPP llogari si një portofol i përbashkët për të gjithë pjesëmarrësit.
Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Për të kontrolluar se cila kontratë është aktualisht aktive në llogarinë tuaj, mund të kopjoni kodin bazë64 të kontratës inteligjente në eksploruesin e bllokut dhe ta njihni atë duke përdorur një dekompilues (për shembull)
Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)
Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)
Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Ne sigurohemi që logjika e kontratës inteligjente të përputhet me atë që presim.
Alice ka 2.972 VALËT të mbetura në bilancin e saj.

Ky dApp mban gjurmët se sa kontribuon secili pjesëmarrës në fondin e përbashkët përmes një mekanizmi transaksioni i të dhënave - Hyrja e të dhënave (Çelësi aktual, sasia e re), ku aktualKey është llogaria që thërret funksionin e depozitës dhe newAmount është vlera e bilancit të rimbushur.

Boob dhe Cooper i bëjnë depozitat e tyre në llogarinë dApp me 1 WAVE.
Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Ne bëjmë një gabim dhe transaksioni nuk kalon. Meqenëse, pavarësisht se ishim të bindur se po bënim një transaksion në emër të Bobit, bëmë një gabim në indeks dhe treguam një llogari bankare që nuk ka kontratë smart. Vlen të përmendet një pikë e rëndësishme këtu - ka një tarifë për përpjekjet e pasuksesshme për të filluar transaksione nuk mund të hiqet! Alice ka 2.972 VALËT të mbetura në bilancin e saj. Bob ka 3 VALËT.

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

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

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Bobit i kanë mbetur 1.99 VALËT. Kjo do të thotë, Bob pagoi 0.01 komision WAVE

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Alice kishte 2.972 VALËT në bilancin e saj, tani është 3.972. Një transaksion u regjistrua gjithashtu në llogarinë Alice, por asnjë komision nuk u ngarkua nga llogaria dApp (Alice).
Pasi Cooper plotësoi gjithashtu llogarinë, gjendja e Alice u bë 4.972 VALËT.

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Ju mund të zbuloni se kush zotëron sa VALËT në portofolin e përbashkët në eksploruesin e bllokut në skedën e të dhënave.

Cooper ndryshoi mendjen për të lënë shumën prej 1 WAVES në portofolin e përgjithshëm dhe vendosi të tërheqë gjysmën e afinitetit. Për ta bërë këtë, ai duhet të thërrasë funksionin e tërheqjes.

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Sidoqoftë, gabuam përsëri, pasi funksioni i tërheqjes ka parametra krejtësisht të ndryshëm dhe një nënshkrim tjetër. Kur hartoni kontrata inteligjente në RIDE4DAPPS, duhet t'i kushtoni vëmendje kësaj pike

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Cooper tani ka 2.48 VALËT në bilancin e tij. Prandaj, 3 VALËT - 1 - 0.01, dhe më pas + 0.5 - 0.01. Prandaj, çdo thirrje për depozitim dhe tërheqje kushton 0.01 WAVE. Si rezultat, hyrjet në tabelën e pronarëve të dApps ndryshuan si më poshtë.

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Bob gjithashtu vendosi të tërhiqte disa para nga portofoli i përbashkët, por bëri një gabim dhe u përpoq të tërhiqte 1.5 VALËT.

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

Megjithatë, kontrata e zgjuar kishte një kontroll për këtë situatë.

Xena është një mashtrues, ajo u përpoq të tërhiqte 1 WAVE nga llogaria totale.

Mësoni të shkruani kontrata inteligjente të Waves në RIDE dhe RIDE4DAPPS. Pjesa 1 (Portofoli me shumë përdorues)

As asaj nuk i shkoi mirë.

Në pjesën tjetër, ne do të shikojmë çështje më komplekse që lidhen me papërsosmërinë e llogarisë Alice dApp.

Burimi: www.habr.com

Shto një koment