Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

Hei!

Mer nylig, Waves Labs kunngjort konkurranse for utviklere dedikert til utgivelsen av RIDE smart kontrakt språkutvidelse for desentraliserte applikasjoner Ride4Dapps inn i testnettverket!

Vi valgte DAO-saken pga Ventuary planlegger å utvikle dApps med sosiale funksjoner: stemmegivning, pengeinnsamling, tillitsstyring, etc.
Vi startet med et enkelt eksempel i Spørsmål og svar økter og RIDE IDE - eksempel med delt lommebok.

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 kran og angi adressen som du vil sende tokens til.
Du finner adressen i IDE ved å åpne kontoopplysningene dine.
Vi fremhever Bank 10 WAVES. Så sjekker vi at de kom gjennom blokk- og transaksjonsnettleseren: anmelder

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:
Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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].
Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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 transaksjoner.

Vi sørger for at Alices saldo fylles opp med 3 WAVES, og banksaldoen forblir på 10 - 3 - 0.01 = 0.699.
Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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:
Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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 eksempel

Ride4Dapps inkluderer nå 2 nye merknadstyper:

  1. @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.
  2. @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.
Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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 (for eksempel)
Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)
Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)
Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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.
Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

Bob har 1.99 WAVES igjen. Det vil si at Bob betalte 0.01 WAVES-provisjon

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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.

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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.

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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.

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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.

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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.

Lære å skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-user lommebok)

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

Legg til en kommentar