Saluton ĉiuj!
Pli lastatempe, Waves Labs
Ni elektis la DAO-kazon ĉar
Ni komencis per simpla ekzemplo en
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
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:
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:

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].
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
Ni certigas, ke la bilanco de Alico estas replenigita per 3 ONDOJ, kaj la banka saldo restas ĉe 10 - 3 - 0.01 = 0.699.
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:
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().
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
Ride4Dapps nun inkluzivas 2 novajn komentadajn tipojn:
- @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.
- @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.
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 (
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.
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 }]}))
Al Bob restas 1.99 ONDAS. Tio estas, Bob pagis 0.01 WAVES-komisionon
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.
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.
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
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.
Bob ankaŭ decidis eltiri iom da mono el la komuna monujo, sed faris eraron kaj provis retiri 1.5 ONDAJN.
Tamen, la inteligenta kontrakto havis kontrolon por ĉi tiu situacio.
Xena estas skamisto, ŝi provis retiri 1 WAVES de la tuta konto.
Ĝ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