Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Saluton ĉiuj!

Pli lastatempe, Waves Labs anoncita konkurado por programistoj dediĉitaj al la liberigo de la RIDE inteligenta kontraktolingva etendaĵo por malcentralizitaj aplikoj Ride4Dapps en la testan reton!

Ni elektis la DAO-kazon ĉar Ventuary planas evoluigi dApps kun sociaj funkcioj: voĉdonado, kvesto, fidadministrado, ktp.
Ni komencis per simpla ekzemplo en Sesioj pri demandoj kaj respondoj kaj en RIDE IDE - ekzemplo kun komuna monujo.

Ni rigardu ĉi tiun ekzemplon, provu hipotezojn kaj rigardu kelkajn strangaĵojn:

Ni havu Alice - Posedanton de dApp
Boob kaj Cooper estas Alice-partneroj, kunfondintoj de Alice-BC DAO
Neli estas komercisto, kiu bezonas financadon
Banko - banko kiu distribuas ĵetonojn

Etapo 1. Inicialigo de ekvilibroj

Por ricevi ĵetonojn sur la ondo-testreto, vi devas kontakti krano kaj indiku la adreson al kiu sendi ĵetonojn.
Vi povas trovi la adreson en la IDE malfermante viajn kontajn detalojn.
Ni reliefigas Bankon 10 ONDAS. Tiam ni kontrolas, ke ili alvenis tra la bloko kaj transakcia retumilo: recenzisto

Nun ni disdonu ĵetonojn de la banko al la ceteraj partoprenantoj. (Notoj: Ĉiuj transakcioj en la ondo-reto ne estas senpagaj, do necesas minimuma pozitiva saldo por ĉiuj partoprenantoj fari transakciojn).

1 ONDOJ = 100000000 unuoj (ondetoj), ĉar kvantoj povas esti nur entjeroj
0.01 WAVES (Transakcia Kotizo) = 1000000

Banko -> [3 ONDOJ] -> Alice, per TransferTransaction (Tipo: 4).

Ni kontrolas, ke la env.SEED de kiu transakcioj estas subskribitaj kongruas kun nia Banko:
Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Se vi ne havas kongruan seman frazon, simple ŝanĝu ĝin en la langeto Kontoj kaj kontrolu denove.
Post ĉi tio, ni kreas, anoncas kaj subskribas transakcion por la translokigo de 3 WAVES Alice.
Vi ankaŭ povas ekscii la datumojn de Alice per la variablo env.accounts. Numerado komenciĝas de 0, do Alico estas env.accounts[1].
Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

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

La rezulto ankaŭ povas esti observita en la retumilo, ligilo al ĝi estos resendita al ni tuj post ekzekuto transakcioj.

Ni certigas, ke la bilanco de Alico estas replenigita per 3 ONDOJ, kaj la banka saldo restas ĉe 10 - 3 - 0.01 = 0.699.
Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Ni sendas al Boob kaj Cooper po 3 ONDOJN, kaj Neli, Xena kaj Mark po 0.2 ONDOJ sammaniere.
(Notoj: Ni faris unu karakteron eraron kaj sendis Neli 0.02 WAVES. Atentu!)

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

Post replenigo de la saldo de ĉiuj partoprenantoj, ni vidas:
Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Etapo 2. Krei konton dApp

Ni konsentis, ke Alice estus la kreinto kaj posedanto de la malcentralizita aplikaĵo.
Iru al Kontoj, agordu ĝin kiel SEED kaj kontrolu env.SEED kongruas kun Alice.

Ni provu instali la plej simplan ebla skripto (kontrakto) sur la konto de Alicio.
Inteligentaj kontaktoj en Waves estas predikatoj kiuj malpermesas aŭ permesas ajnan tipon de eksiĝinta transakcio okazi sub certaj kondiĉoj. En ĉi tiu kazo, ĉi tiu kondiĉo estas ĈIAM. Kontrakta kodo estas vera. Voku deploy().

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Kotizo por setScript-transakcio 1400000/100000000 = 0.014 ONDAS. Alicio havas 2.986 ONDOJN sur sia pesilo.

Ni nun provu instali pli kompleksan inteligentan kontraktologikon sur la Alice-konto, priskribita en ekzemplo

Ride4Dapps nun inkluzivas 2 novajn komentadajn tipojn:

  1. @Alvokebla(i) — prenas kiel parametron i, datumojn pri kiu konto vokis/subskribis la transakcion. Estas la rezulto de ĉi tiu funkcio kiu determinas la ŝanĝon en la stato de la konto dApp. Aliaj kontoj povas krei transakciojn kaj efektivigi funkciojn kun ĉi tiu komentario kaj ŝanĝi la staton de la konto dApp.
  2. @Verifier(tx) — Transakcia kontrolilo kun la transakcia tx parametro. Korespondas al la predikata logiko de RIDE. Estas en ĉi tiu esprimo, ke vi povas permesi aŭ malpermesi pliajn ŝanĝojn al la logiko de inteligentaj kontraktoj sur la konto dApp.

Ni faru dApp konto kiel komuna monujo por ĉiuj partoprenantoj.
Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Por kontroli kiu kontrakto estas nuntempe aktiva en via konto, vi povas kopii la bazo64-kodon de la inteligenta kontrakto en la bloka esploristo kaj rekoni ĝin per malkompililo (ekzemple)
Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)
Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)
Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Ni certigas, ke la logiko de la inteligenta kontrakto kongruas kun tio, kion ni atendas.
Alicio havas 2.972 ONDOJN sur sia pesilo.

Ĉi tiu dApp kontrolas kiom ĉiu partoprenanto kontribuas al la komuna fonduso per mekanismo datumtransakcio - Enigo de datumoj (nuna Ŝlosilo, nova Kvanto), kie nunaKey estas la konto kiu vokas la deponan funkcion, kaj newAmount estas la valoro de la replenigita saldo.

Boob kaj Cooper faras siajn deponejojn al la konto dApp kun 1 ONDOJ.
Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Ni eraras kaj la transakcio ne okazas. Ĉar, malgraŭ la fakto, ke ni estis konvinkitaj, ke ni faras transakcion nome de Bob, ni faris eraron en la indekso kaj indikis Bankan konton, kiu ne havas inteligentan kontrakton. Indas rimarki gravan punkton ĉi tie - estas pago por malsukcesaj provoj komenci transakciojn. ne povas esti forigita! Alicio havas 2.972 ONDOJN sur sia pesilo. Bob havas 3 ONDOJ.

Bob sendis 1 WAVES al dApp-Konto.

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

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Al Bob restas 1.99 ONDAS. Tio estas, Bob pagis 0.01 WAVES-komisionon

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Alico havis 2.972 ONDAJN sur sia pesilo, nun ĝi estas 3.972. Transakcio ankaŭ estis registrita sur la Alice-konto, sed neniu komisiono estis ŝargita de la dApp-Konto (Alice).
Post kiam Cooper ankaŭ plenigis la konton, la saldo de Alice fariĝis 4.972 ONDAS.

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Vi povas ekscii, kiu posedas kiom da ONDOJ en la komuna monujo en la bloka esploristo en la langeto Datumoj.

Cooper ŝanĝis opinion pri lasado de la kvanto de 1 ONDOJ sur la ĝenerala monujo kaj decidis retiri duonon de la afineco. Por fari tion, li devas voki la retiriĝan funkcion.

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Tamen ni denove eraris, ĉar la retiriĝa funkcio havas tute malsamajn parametrojn kaj alian subskribon. Kiam vi desegnas inteligentajn kontraktojn sur RIDE4DAPPS, vi devus atenti ĉi tiun punkton

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Cooper nun havas 2.48 ONDAS en sia bilanco. Sekve, 3 ONDOJ - 1 - 0.01, kaj tiam + 0.5 - 0.01. Sekve, ĉiu voko por deponi kaj retiriĝi kostas 0.01 ONDAS. Kiel rezulto, la enskriboj en la tabelo de posedantoj de dApps ŝanĝiĝis jene.

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Bob ankaŭ decidis eltiri iom da mono el la komuna monujo, sed faris eraron kaj provis retiri 1.5 ONDAJN.

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Tamen, la inteligenta kontrakto havis kontrolon por ĉi tiu situacio.

Xena estas skamisto, ŝi provis retiri 1 WAVES de la tuta konto.

Lerni skribi Waves inteligentajn kontraktojn sur RIDE kaj RIDE4DAPPS. Parto 1 (Mult-uzanta monujo)

Ĝi ankaŭ ne funkciis por ŝi.

En la sekva parto, ni rigardos pli kompleksajn aferojn rilatajn al la neperfekteco de Alice dApp Konto.

fonto: www.habr.com

Aldoni komenton