RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Hola a todos!

Duela gutxi, Waves Labs iragarri Ride4Dapps aplikazio deszentralizatuetarako RIDE kontratu adimendunaren hizkuntza luzapena askatzeari eskainitako garatzaileentzako lehiaketa proba sarean!

DAO kasua aukeratu dugulako Ventuary funtzio sozialak dituzten dApp-ak garatzeko asmoa du: bozketa, diru bilketa, konfiantza kudeaketa, etab.
Adibide sinple batekin hasi gara Galdeketa saioak eta RIDE IDE - adibidearekin zorro partekatua.

Ikus dezagun adibide hau, proba ditzagun hipotesiak eta ikus ditzagun bitxikeria batzuk:

Izan dezagun Alice - dApp Owner
Boob eta Cooper Alice-ko bazkideak dira, Alice-BC DAO-ren sortzaileak
Neli finantzaketa behar duen enpresa jabea da
Bankua - tokenak banatzen dituen bankua

1. etapa. Balantzeak hasieratzea

Olatuen proba sarean tokenak jasotzeko, harremanetan jarri behar duzu txorrota eta adierazi zein helbidetara tokenak bidali.
Helbidea IDEan aurki dezakezu zure kontuaren xehetasunak irekita.
Bank 10 WAVES azpimarratzen dugu. Ondoren, blokeo eta transakzio arakatzailearen bidez iritsi direla egiaztatuko dugu: berrikuslea

Orain bana ditzagun tokenak bankutik gainontzeko partaideei. (Oharrak: waves sareko transakzio guztiak ez dira doakoak, beraz, parte-hartzaile guztiek transakzioak egiteko gutxieneko saldo positiboa behar da).

1 OLATU = 100000000 unitate (uhinak), kopuruak osoak baino ezin baitira izan
0.01 WAVES (Transakzio-kuota) = 1000000

Bankua -> [3 WAVES] -> Alice, TransferTransaction bidez (Mota: 4).

Transakzioak sinatzen diren env.SEED gure Bankuarekin bat datorrela egiaztatzen dugu:
RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)
οΏΌ
Ez baduzu bat datorren hazi esaldirik, aldatu Kontuak fitxan eta egiaztatu berriro.
Horren ostean, 3 WAVES Aliceren transferentziarako transakzio bat sortu, iragarri eta sinatzen dugu.
Aliceren datuak env.accounts aldagaiaren bidez ere aurki ditzakezu. Zenbakitzea 0tik hasten da, beraz, Alice env.accounts[1] da.
RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

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

Emaitza arakatzailean ere ikus daiteke, horretarako esteka bat itzuliko zaigu exekutatu eta berehala transakzioak.

Ziurtatzen dugu Aliceren saldoa 3 OLATUrekin betetzen dela, eta bankuko saldoa 10 - 3 - 0.01 = 0.699an geratzen dela.
RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Boob eta Cooper 3 OLATU bidaltzen diegu bakoitzari, eta Neli, Xena eta Mark 0.2 OLATU bakoitzari modu berean.
(Oharrak: karaktere bakarreko errore bat egin dugu eta Neli 0.02 OLATUAK bidali ditugu. Kontuz!)

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

Parte hartzaile guztien saldoak bete ondoren, honako hauek ikusiko ditugu:
RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

2. etapa. Sortu dApp kontu bat

Alice aplikazio deszentralizatuaren sortzailea eta jabea izango zela adostu genuen.
Joan Kontuak atalera, ezarri SEED gisa eta egiaztatu env.SEED bat datorrela Alice.

Saia gaitezen Aliceren kontuan ahalik eta script (kontratua) errazena instalatzen.
Waves-eko kontaktu adimentsuak baldintza jakin batzuetan irteerako edozein transakzio mota egitea debekatzen edo ahalbidetzen duten predikatuak dira. Kasu honetan, baldintza hau BETI da. Kontratuaren kodea egia da. Deitu deploy().

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

SetScript transakzio bakoitzeko kuota 1400000/100000000 = 0.014 WAVES. Alizi 2.986 OLATU geratzen zaizkio saldoan.

Saia gaitezen orain Alice kontuan deskribatutako kontratu adimendunaren logika konplexuagoa instalatzen adibidea

Ride4Dapps orain 2 ohar mota berri ditu:

  1. @Deigarria(i) β€” i parametro gisa hartzen du, transakzioa zein kontu deitu/sinatutakoari buruzko datuak. Funtzio horren emaitza da dApp kontuaren egoeraren aldaketa zehazten duena. Beste kontu batzuek transakzioak sortu eta funtzioak exekutatu ditzakete ohar honekin eta dApp kontuaren egoera alda dezakete.
  2. @Egiaztatzailea(tx) β€” Transakzio egiaztatzailea transakzio tx parametroarekin. RIDEren predikatu-logikari dagokio. Adierazpen honetan dApp kontuan kontratu adimendunen logikan aldaketa gehiago onartu edo debekatu ditzakezu.

Egin dezagun dApp kontua partaide guztien zorro komun gisa.
RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Zure kontuan zein kontratu aktibo dagoen egiaztatzeko, kontratu adimendunaren base64 kodea kopiatu dezakezu bloke esploratzailean eta deskonpiladore baten bidez ezagutu (adibidez)
RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)
RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)
RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Kontratu adimendunaren logika espero dugunarekin bat datorrela ziurtatzen dugu.
Alizi 2.972 OLATU geratzen zaizkio saldoan.

DApp honek parte-hartzaile bakoitzak funts komunean zenbat ekarpen egiten duen kontrolatzen du mekanismo baten bidez datu-transakzioa β€” DataEntry (uneko gakoa, kantitate berria), non currentKey gordailu funtzioari deitzen dion kontua den eta newAmount berritutako saldoaren balioa den.

Boob eta Cooper-ek gordailuak egiten dituzte dApp kontuan 1 WAVE-rekin.
RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Akats bat egiten dugu eta transakzioa ez da aurrera egiten. Geroztik, Bob-en izenean transakzio bat egiten ari ginela sinetsita geunden arren, akats bat egin dugu indizean eta kontratu adimendun bat ez duen Banku-kontu bat adierazi dugu. Hemen puntu garrantzitsu bat aipatzea merezi du: transakzioak hasteko arrakastarik gabeko saiakerengatik kuota dago. ezin da kendu! Alizi 2.972 OLATU geratzen zaizkio saldoan. Bobek 3 OLATU ditu.

Bob-ek 1 WAVE bidali ditu dApp kontura.

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

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Bobi 1.99 OLATU geratzen zaizkio. Hau da, Bobek 0.01 WAVES komisioa ordaindu zuen

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Alicek 2.972 OLATU zituen saldoan, orain 3.972 da. Alice kontuan transakzio bat ere erregistratu zen, baina ez zen komisiorik kobratu dApp kontutik (Alice).
Cooperek ere kontua bete ondoren, Aliceren saldoa 4.972 OLATU bihurtu zen.

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Diru-zorro arruntean zenbat WAVE norena den jakin dezakezu bloke-esploratzailean Datuak fitxan.

Cooper-ek iritzia aldatu zuen 1 WAVES kopurua zorro orokorrean uzteari buruz eta afinitatearen erdia kentzea erabaki zuen. Horretarako, kendu funtzioari deitu behar dio.

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Hala ere, berriro oker geunden, kentzeko funtzioak parametro guztiz desberdinak eta sinadura ezberdina dituelako. RIDE4DAPPS-en kontratu adimendunak diseinatzen dituzunean, arreta jarri beharko zenuke puntu honetan

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Cooper-ek orain 2.48 OLATU ditu bere balantzean. Horren arabera, 3 OLATUAK - 1 - 0.01, eta gero + 0.5 - 0.01. Horren arabera, gordailatzeko eta ateratzeko dei bakoitzak 0.01 OLATU balio du. Ondorioz, dApps jabeen taulako sarrerak honela aldatu ziren.

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Bob-ek diru-zorro partekatutik diru pixka bat ateratzea ere erabaki zuen, baina akats bat egin zuen eta 1.5 WAVES kentzen saiatu zen.

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Hala ere, kontratu adimendunak egoera honen egiaztapena zuen.

Xena iruzurgilea da, kontu osotik 1 WAVE kentzen saiatu zen.

RIDE eta RIDE4DAPPS-en Waves kontratu adimendunak idazten ikastea. 1. zatia (erabiltzaile anitzeko zorroa)

Berari ere ez zion balio.

Hurrengo zatian, Alice dApp kontuaren inperfekzioarekin lotutako arazo konplexuagoak aztertuko ditugu.

Iturria: www.habr.com

Gehitu iruzkin berria