Hei!
Mer nylig, Waves Labs
Vi valgte DAO-saken pga
Vi startet med et enkelt eksempel i
La oss se på dette eksemplet, teste hypoteser og se på noen rariteter:
La oss ha Alice - dApp-eier
Boob og Cooper er Alice-partnere, medgründere av Alice-BC DAO
Neli er en bedriftseier som trenger finansiering
Bank - en bank som deler ut tokens
Trinn 1. Initialisering av saldoer
For å motta tokens på waves-testnettverket må du kontakte
Du finner adressen i IDE ved å åpne kontoopplysningene dine.
Vi fremhever Bank 10 WAVES. Så sjekker vi at de kom gjennom blokk- og transaksjonsnettleseren:
La oss nå dele ut tokens fra banken til resten av deltakerne. (Merk: Alle transaksjoner på waves-nettverket er ikke gratis, så det kreves en minimum positiv saldo for at alle deltakere skal kunne utføre transaksjoner).
1 WAVES = 100000000 enheter (wavelets), siden mengder bare kan være heltall
0.01 WAVES (transaksjonsgebyr) = 1000000
Bank -> [3 WAVES] -> Alice, via TransferTransaction (Type: 4).
Vi sjekker at env.SEED som transaksjoner signeres fra samsvarer med banken vår:

Hvis du ikke har en matchende startfrase, bytter du bare til den i Kontoer-fanen og sjekker på nytt.
Etter dette oppretter, kunngjør og signerer vi en transaksjon for overføring av 3 WAVES Alice.
Du kan også finne ut Alices data gjennom variabelen env.accounts. Nummerering starter fra 0, så Alice er env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Resultatet kan også observeres i nettleseren, en lenke til det vil bli returnert til oss umiddelbart etter utførelse
Vi sørger for at Alices saldo fylles opp med 3 WAVES, og banksaldoen forblir på 10 - 3 - 0.01 = 0.699.
Vi sender Boob og Cooper 3 WAVES hver, og Neli, Xena og Mark 0.2 WAVES hver på samme måte.
(Merk: Vi gjorde en feil med ett tegn og sendte Neli 0.02 WAVES. Vær forsiktig!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Etter å ha fylt opp saldoene til alle deltakerne, ser vi:
Trinn 2. Opprett en dApp-konto
Vi ble enige om at Alice skulle være skaperen og eieren av den desentraliserte applikasjonen.
Gå til Kontoer, sett den som SEED og sjekk env.SEED samsvarer med Alice.
La oss prøve å installere det enklest mulige skriptet (kontrakten) på Alices konto.
Smarte kontakter i Waves er predikater som forbyr eller tillater enhver form for utgående transaksjon under visse forhold. I dette tilfellet er denne tilstanden ALLTID. Kontraktskoden er sann. Call deploy().
Gebyr per setScript-transaksjon 1400000/100000000 = 0.014 WAVES. Alice har 2.986 WAVES igjen på balansen.
La oss nå prøve å installere mer kompleks smart kontraktslogikk på Alice-kontoen, beskrevet i
Ride4Dapps inkluderer nå 2 nye merknadstyper:
- @Callable(i) — tar som parameter i, data om hvilken konto som ringte/signerte transaksjonen. Det er resultatet av denne funksjonen som bestemmer endringen i tilstanden til dApp-kontoen. Andre kontoer kan opprette transaksjoner og utføre funksjoner med denne merknaden og endre tilstanden til dApp-kontoen.
- @Verifier(tx) — Transaksjonsverifikatoren med transaksjons-tx-parameteren. Tilsvarer predikatlogikken fra RIDE. Det er i dette uttrykket du kan tillate eller forby ytterligere endringer i logikken til smarte kontrakter på dApp-kontoen.
La oss gjøre Dapp konto som en felles lommebok for alle deltakere.
For å sjekke hvilken kontrakt som for øyeblikket er aktiv på kontoen din, kan du kopiere base64-koden til smartkontrakten i blokkutforskeren og gjenkjenne den ved hjelp av en dekompiler (
Vi sørger for at logikken i den smarte kontrakten stemmer overens med det vi forventer.
Alice har 2.972 WAVES igjen på balansen.
Denne dAppen holder styr på hvor mye hver deltaker bidrar til fellesfondet gjennom en mekanisme datatransaksjon – DataEntry(currentKey, newAmount), hvor currentKey er kontoen som kaller innskuddsfunksjonen, og newAmount er verdien av den etterfylte saldoen.
Boob og Cooper gjør innskudd til dApp-kontoen med 1 WAVES.
Vi gjør en feil og transaksjonen går ikke gjennom. Siden, til tross for at vi var overbevist om at vi foretok en transaksjon på vegne av Bob, gjorde vi en feil i indeksen og indikerte en bankkonto som ikke har en smart kontrakt. Det er verdt å merke seg et viktig poeng her - det er et gebyr for mislykkede forsøk på å starte transaksjoner kan ikke fjernes! Alice har 2.972 WAVES igjen på balansen. Bob har 3 BØLGER.
Bob sendte 1 WAVES til dApp-kontoen.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bob har 1.99 WAVES igjen. Det vil si at Bob betalte 0.01 WAVES-provisjon
Alice hadde 2.972 WAVES på balansen, nå er den 3.972. En transaksjon ble også registrert på Alice-kontoen, men det ble ikke belastet noen provisjon fra dApp-kontoen (Alice).
Etter at Cooper også fylte opp kontoen, ble Alices saldo 4.972 WAVES.
Du kan finne ut hvem som eier hvor mange WAVES i den vanlige lommeboken i blokkutforskeren i fanen Data.
Cooper ombestemte seg om å la mengden 1 WAVES ligge på den generelle lommeboken og bestemte seg for å trekke tilbake halvparten av tilknytningen. For å gjøre dette må han ringe tilbaketrekningsfunksjonen.
Vi tok imidlertid feil igjen, siden uttaksfunksjonen har helt andre parametere og en annen signatur. Når du designer smarte kontrakter på RIDE4DAPPS bør du være oppmerksom på dette punktet
Cooper har nå 2.48 WAVES på sin balanse. Følgelig, 3 BØLGER - 1 - 0.01, og deretter + 0.5 - 0.01. Følgelig koster hver oppfordring til innskudd og uttak 0.01 WAVES. Som et resultat ble oppføringene i dApps-eiertabellen endret som følger.
Bob bestemte seg også for å ta ut litt penger fra den delte lommeboken, men gjorde en feil og prøvde å ta ut 1.5 WAVES.
Den smarte kontrakten hadde imidlertid en sjekk for denne situasjonen.
Xena er en svindler, hun prøvde å ta ut 1 WAVES fra den totale kontoen.
Det gikk ikke for henne heller.
I neste del vil vi se på mer komplekse problemer knyttet til ufullkommenheten til Alice dApp-kontoen.
Kilde: www.habr.com