Всем Привет!
Plis dènyèman, Waves Labs
Nou te chwazi ka DAO a paske
Nou te kòmanse ak yon egzanp senp nan
Ann gade egzanp sa a, teste ipotèz yo epi gade kèk bizarre:
Se pou nou gen Alice - dApp Owner
Boob ak Cooper se patnè Alice, ko-fondatè Alice-BC DAO
Neli se yon pwopriyetè biznis ki bezwen finansman
Bank - yon bank ki distribye marqueur
Etap 1. Inisyalizasyon balans yo
Pou ou kapab resevwa marqueur sou rezo tès lanm lanmè, ou bezwen kontakte
Ou ka jwenn adrès la nan IDE a lè w louvri detay kont ou.
Nou mete aksan sou Bank 10 WAVES. Lè sa a, nou tcheke ke yo te rive nan blòk la ak navigatè tranzaksyon:
Koulye a, ann distribye marqueur nan bank la bay rès patisipan yo. (Nòt: Tout tranzaksyon sou rezo vag yo pa gratis, kidonk yon minimòm balans pozitif obligatwa pou tout patisipan yo fè tranzaksyon).
1 WAVES = 100000000 inite (wavelets), paske kantite lajan yo kapab sèlman nonb antye relatif
0.01 WAVES (Frè Tranzaksyon) = 1000000
Bank -> [3 WAVES] -> Alice, via TransferTransaction (Tip: 4).
Nou tcheke si env.SEED ki soti nan ki tranzaksyon yo siyen matche ak Bank nou an:

Si ou pa gen yon fraz grenn ki matche, jis chanje sou li nan tab la Kont epi tcheke ankò.
Apre sa, nou kreye, anonse epi siyen yon tranzaksyon pou transfè 3 WAVES Alice.
Ou ka jwenn done Alice tou atravè varyab env.accounts. Nimero kòmanse nan 0, kidonk Alice se env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Ka rezilta a tou ap obsève nan navigatè a, yon lyen nan li pral retounen nan nou imedyatman apre ekzekisyon
Nou asire w ke balans Alice a ranpli pa 3 WAVE, ak balans bank la rete nan 10 - 3 - 0.01 = 0.699.
Nou voye Boob ak Cooper 3 WAVES chak, ak Neli, Xena ak Mark 0.2 WAVES chak nan menm fason an.
(Nòt: Nou te fè yon erè yon karaktè epi nou te voye Neli 0.02 WAVES. Fè atansyon!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Apre nou fin ranpli balans tout patisipan yo, nou wè:
Etap 2. Kreye yon kont dApp
Nou te dakò ke Alice ta dwe kreyatè a ak pwopriyetè aplikasyon desantralize a.
Ale nan Kont, mete l kòm SEED epi tcheke env.SEED matche ak Alice.
Ann eseye enstale script ki pi senp posib (kontra) sou kont Alice.
Kontak entelijan nan Waves yo se predikasyon ki entèdi oswa pèmèt nenpòt kalite tranzaksyon sòtan rive nan sèten kondisyon. Nan ka sa a, kondisyon sa a se TOUJOU. Kòd kontra a se vre. Rele deplwaye ().
Frè pou chak tranzaksyon setScript 1400000/100000000 = 0.014 WAVES. Alice gen 2.986 VAG ki rete nan balans li.
Ann eseye kounye a enstale pi konplèks lojik kontra entelijan sou kont Alice, ki dekri nan
Ride4Dapps kounye a gen ladan 2 nouvo kalite anotasyon:
- @Callable(mwen) — pran kòm yon paramèt i, done sou ki kont ki rele/siyen tranzaksyon an. Se rezilta fonksyon sa a ki detèmine chanjman nan eta kont dApp la. Lòt kont yo ka kreye tranzaksyon ak egzekite fonksyon ak anotasyon sa a epi chanje eta a nan kont dApp la.
- @Verifier(tx) — Verifikatè tranzaksyon ak paramèt tranzaksyon tx la. Koresponn ak lojik predikate ki soti nan RIDE. Se nan ekspresyon sa a ou ka pèmèt oswa entèdi plis chanjman nan lojik kontra entelijan sou kont dApp la.
Ann fè dApp kont kòm yon bous komen pou tout patisipan yo.
Pou tcheke ki kontra ki aktif kounye a sou kont ou, ou ka kopye kòd baz64 nan kontra entelijan an nan eksploratè blòk la epi rekonèt li lè l sèvi avèk yon dekonpilateur (
Nou asire w ke lojik kontra entelijan an matche ak sa nou espere.
Alice gen 2.972 VAG ki rete nan balans li.
DApp sa a kenbe tras de konbyen chak patisipan kontribye nan fon an komen atravè yon mekanis tranzaksyon done — DataEntry (Kle aktyèl, nouvo Kantite), kote currentKey se kont ki rele fonksyon depo a, ak newAmount se valè balans rkonstitusyon an.
Boob ak Cooper fè depo yo sou kont dApp ak 1 WAVES.
Nou fè yon erè epi tranzaksyon an pa rive. Depi, malgre lefèt ke nou te konvenki ke nou te fè yon tranzaksyon sou non Bob, nou te fè yon erè nan endèks la ak endike yon kont Bank ki pa gen yon kontra entelijan. Li vo sonje yon pwen enpòtan isit la - gen yon frè pou tantativ san siksè kòmanse tranzaksyon yo. pa ka retire! Alice gen 2.972 VAG ki rete nan balans li. Bob gen 3 VAG.
Bob voye 1 WAVE sou kont dApp.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bob gen 1.99 VAG ki rete. Sa vle di, Bob te peye 0.01 WAVES komisyon
Alice te gen 2.972 WAVES sou balans li, kounye a li nan 3.972. Yo te anrejistre yon tranzaksyon tou sou kont Alice, men yo pa t peye okenn komisyon nan kont dApp (Alice).
Apre Cooper tou ranpli kont lan, balans Alice a te vin 4.972 WAVES.
Ou ka chèche konnen ki moun ki posede konbyen VAG nan bous komen nan eksploratè blòk la nan tab Done yo.
Cooper chanje lide sou kite kantite 1 WAVES sou bous jeneral la epi li deside retire mwatye nan afinite a. Pou fè sa, li dwe rele fonksyon an retire.
Sepandan, nou te mal ankò, depi fonksyon an retire gen paramèt konplètman diferan ak yon siyati diferan. Lè ou desine kontra entelijan sou RIDE4DAPPS ou ta dwe peye atansyon sou pwen sa a
Cooper kounye a gen 2.48 WAVES sou bilan li. An konsekans, 3 WAVES - 1 - 0.01, ak Lè sa a, + 0.5 - 0.01. An konsekans, chak apèl pou depoze ak retire koute 0.01 WAVES. Kòm yon rezilta, antre yo nan tablo pwopriyetè dApps yo chanje jan sa a.
Bob tou deside retire kèk lajan nan bous la pataje, men li te fè yon erè epi yo te eseye retire 1.5 WAVES.
Sepandan, kontra entelijan an te gen yon chèk pou sitiyasyon sa a.
Xena se yon magouyè, li te eseye retire 1 WAVES nan kont total la.
Li pa t mache tou pou li.
Nan pwochen pati a, nou pral gade nan pwoblèm ki pi konplèks ki gen rapò ak enpèfeksyon nan Alice dApp Kont.
Sous: www.habr.com