Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

Всем Привет!

Plis dènyèman, Waves Labs te anonse konpetisyon pou devlopè dedye a lage ekstansyon lang RIDE entelijan kontra pou aplikasyon desantralize Ride4Dapps nan rezo tès la!

Nou te chwazi ka DAO a paske Ventuary plan pou devlope dApps ak fonksyon sosyal: vòt, ranmase lajan, jesyon konfyans, elatriye.
Nou te kòmanse ak yon egzanp senp nan Sesyon Q&A ak RIDE IDE - egzanp avèk bous pataje.

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 tiyo epi endike adrès kote pou voye jeton.
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: revizyon

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:
Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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].
Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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 tranzaksyon yo.

Nou asire w ke balans Alice a ranpli pa 3 WAVE, ak balans bank la rete nan 10 - 3 - 0.01 = 0.699.
Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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è:
Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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 egzanp

Ride4Dapps kounye a gen ladan 2 nouvo kalite anotasyon:

  1. @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.
  2. @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.
Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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 (pou egzanp)
Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)
Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)
Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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.
Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

Bob gen 1.99 VAG ki rete. Sa vle di, Bob te peye 0.01 WAVES komisyon

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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.

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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.

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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.

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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.

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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.

Aprann ekri kontra entelijan Waves sou RIDE ak RIDE4DAPPS. Pati 1 (Bous milti-itilizatè)

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

Add nouvo kòmantè