Përshëndetje të gjithëve!
Kohët e fundit, Waves Labs
Ne zgjodhëm rastin DAO sepse
Ne filluam me një shembull të thjeshtë në
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
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:
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ë:

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].
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
Sigurohemi që bilanci i Alice të plotësohet me 3 VALË, dhe balanca bankare mbetet në 10 - 3 - 0.01 = 0.699.
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:
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().
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ë
Ride4Dapps tani përfshin 2 lloje të reja shënimesh:
- @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.
- @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.
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 (
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.
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 }]}))
Bobit i kanë mbetur 1.99 VALËT. Kjo do të thotë, Bob pagoi 0.01 komision WAVE
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.
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.
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
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ë.
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.
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.
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