Bonghjornu ognunu!
Più recentemente, Waves Labs
Avemu sceltu u casu DAO perchè
Avemu cuminciatu cù un esempiu simplice in
Fighjemu questu esempiu, pruvate l'ipotesi è fighjemu alcune stranezze:
Avemu Alice - dApp Owner
Boob è Cooper sò partenarii di Alice, cofundatori di Alice-BC DAO
Neli hè un pruprietariu chì hà bisognu di finanziamentu
Bank - un bancu chì distribuisce tokens
Stage 1. Initialization of balances
Per riceve tokens nantu à a rete di teste di onde, avete bisognu di cuntattà
Pudete truvà l'indirizzu in l'IDE aprendu i dettagli di u vostru contu.
Scupritemu Bank 10 WAVES. Allora verificamu chì sò ghjunti attraversu u navigatore di blocchi è transazzione:
Avà distribuemu tokens da u bancu à u restu di i participanti. (Noti: Tutte e transazzione nantu à a reta di l'onda ùn sò micca liberi, cusì un saldo minimu pusitivu hè necessariu per tutti i participanti per fà transazzione).
1 WAVES = 100000000 unità (wavelets), postu chì quantità pò esse solu interu
0.01 WAVES (Tassa di transazzione) = 1000000
Bank -> [3 WAVES] -> Alice, via TransferTransaction (Tipu: 4).
Avemu verificatu chì l'env.SEED da quale e transazzione sò firmate currisponde à u nostru Bancu:

Se ùn avete micca una frasa di semente currispondente, basta à cambià in a tabulazione Accounts è verificate di novu.
Dopu questu, avemu criatu, annunziate è firmà una transazzione per u trasferimentu di 3 WAVES Alice.
Pudete ancu scopre i dati di Alice attraversu a variàbile env.accounts. A numerazione principia da 0, cusì Alice hè env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
U risultatu pò ancu esse osservatu in u navigatore, un ligame à questu serà tornatu à noi immediatamente dopu l'esekzione
Avemu assicuratu chì l'equilibriu di Alice hè rimbursatu da 3 WAVES, è u saldu bancariu ferma à 10 - 3 - 0.01 = 0.699.
Mandemu Boob è Cooper 3 WAVES ognunu, è Neli, Xena è Mark 0.2 WAVES ognunu in u listessu modu.
(Noti: Avemu fattu un errore di un caratteru è mandatu Neli 0.02 WAVES. Attenti!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Dopu avè rimbursatu i saldi di tutti i participanti, vedemu:
Stage 2. Crea un contu dApp
Avemu accunsentutu chì Alice seria u creatore è u pruprietariu di l'applicazione decentralizata.
Andà à Accounts, stabilisce cum'è SEED è verificate env.SEED matchs Alice.
Pruvemu di stallà u script (cuntrattu) più simplice pussibule in u contu d'Alice.
I cuntatti intelligenti in Waves sò predicati chì pruibiscenu o permettenu qualsiasi tipu di transazzione in uscita in certi cundizioni. In questu casu, sta cundizione hè SEMPRE. U codice di u cuntrattu hè veru. Chjama deploy ().
Tariffa per transazzione setScript 1400000/100000000 = 0.014 WAVES. Alice hà 2.986 WAVES in u so equilibriu.
Andemu avà à pruvà à stallà logica di cuntrattu intelligenti più cumplessa nant'à u contu Alice, discrittu in
Ride4Dapps avà include 2 novi tipi di annotazione:
- @Callable(i) - piglia cum'è un paràmetru i, dati circa chì contu chjamatu / firmatu a transazzione. Hè u risultatu di sta funzione chì determina u cambiamentu in u statu di u contu dApp. Altri cunti ponu creà transazzione è eseguisce funzioni cù questa annotazione è cambià u statu di u contu dApp.
- @Verifier(tx) - Verificatore di transazzione cù u paràmetru di transazzione tx. Corrisponde à a logica di predicate da RIDE. Hè in questa espressione chì pudete permette o pruibisce più cambiamenti à a logica di cuntratti intelligenti nantu à u contu dApp.
Facemu dApp contu cum'è una billetera cumuna per tutti i participanti.
Per verificà quale cuntrattu hè attualmente attivu in u vostru contu, pudete copià u codice base64 di u cuntrattu intelligente in l'esploratore di blocchi è ricunnosce cù un decompiler (
Avemu assicuratu chì a logica di u cuntrattu intelligente currisponde à ciò chì aspittemu.
Alice hà 2.972 WAVE in u so equilibriu.
Stu dApp mantene a traccia di quantu ogni participante cuntribuisce à u fondu cumunu attraversu un mecanismu transazzione di dati - DataEntry (currentKey, newAmount), induve currentKey hè u cuntu chì chjama a funzione di depositu, è newAmount hè u valore di u saldu rimbursatu.
Boob è Cooper facenu i so dipositi à u contu dApp cù 1 WAVES.
Facemu un sbagliu è a transazzione ùn passa micca. Siccomu, malgradu u fattu chì eramu cunvinti chì avemu fattu una transazzione in nome di Bob, avemu fattu un sbagliu in l'indici è hà indicatu un contu bancariu chì ùn hà micca un cuntrattu intelligente. Vale a pena nutà un puntu impurtante quì - ci hè una tarifa per i tentativi falluti di inizià transacciones. ùn pò esse cacciatu! Alice hà 2.972 WAVE in u so equilibriu. Bob hà 3 ONDE.
Bob hà mandatu 1 WAVES à dApp Account.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
A Bob hà 1.99 WAVES rimasti. Questu hè, Bob hà pagatu 0.01 WAVES cumissioni
Alice avia 2.972 WAVES nantu à u so equilibriu, avà hè 3.972. Una transazzione hè stata ancu registrata nantu à u contu Alice, ma nisuna cumissioni hè stata pagata da u Account dApp (Alice).
Dopu chì Cooper hà ancu rimbursatu u contu, u saldu di Alice hè diventatu 4.972 WAVES.
Pudete scopre quale pussede quantu WAVES in a billetera cumuna in u bloccu espluratore in a tabulazione Dati.
Cooper hà cambiatu a so idea di abbandunà a quantità di 1 WAVES nantu à a billetera generale è hà decisu di ritirà a mità di l'affinità. Per fà questu, deve chjamà a funzione di ritirata.
Tuttavia, eramu sbagliati di novu, postu chì a funzione di ritirata hà paràmetri completamente differenti è una firma diversa. Quandu cuncepite cuntratti intelligenti nantu à RIDE4DAPPS, duvete attentu à questu puntu
Cooper hà avà 2.48 WAVES in u so bilanciu. Dunque, 3 WAVES - 1 - 0.01, è dopu + 0.5 - 0.01. Per quessa, ogni chjama à deposità è ritirava costa 0.01 WAVES. In u risultatu, l'entrata in a tabella di i pruprietarii di dApps hà cambiatu cusì.
Bob hà ancu decisu di ritirà un pocu di soldi da a billetera spartuta, ma hà fattu un sbagliu è hà pruvatu à ritirà 1.5 WAVES.
Tuttavia, u cuntrattu intelligente hà avutu un cuntrollu per sta situazione.
Xena hè un scammer, hà pruvatu à ritirà 1 WAVES da u contu tutale.
Ùn hà micca travagliatu ancu per ella.
In a parti dopu, noi vi taliarla à prublemi più cumplessu riguardanti l 'imperfezione di Alice dApp Account.
Source: www.habr.com