Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Hej alle!

For nylig Waves Labs annonceret konkurrence for udviklere dedikeret til udgivelsen af ​​RIDE smart kontrakt sprogudvidelse til decentraliserede applikationer Ride4Dapps ind i testnetværket!

Vi valgte DAO-sagen pga Ventuar planlægger at udvikle dApps med sociale funktioner: afstemning, fundraising, tillidsstyring osv.
Vi startede med et simpelt eksempel i Q&A sessioner og RIDE IDE - eksempel med delt pung.

Lad os se på dette eksempel, teste hypoteser og se på nogle mærkværdigheder:

Lad os få Alice - dApp-ejer
Boob og Cooper er Alice-partnere, medstiftere af Alice-BC DAO
Neli er en virksomhedsejer, der har brug for finansiering
Bank - en bank, der distribuerer tokens

Fase 1. Initialisering af saldi

For at modtage tokens på waves testnetværket skal du kontakte vandhane og angiv den adresse, som tokens skal sendes til.
Du kan finde adressen i IDE ved at åbne dine kontooplysninger.
Vi fremhæver Bank 10 WAVES. Så kontrollerer vi, at de ankom gennem blok- og transaktionsbrowseren: anmelder

Lad os nu uddele poletter fra banken til resten af ​​deltagerne. (Noter: Alle transaktioner på waves-netværket er ikke gratis, så der kræves en minimum positiv saldo for at alle deltagere kan foretage transaktioner).

1 WAVES = 100000000 enheder (wavelets), da beløb kun kan være heltal
0.01 WAVES (Transaktionsgebyr) = 1000000

Bank -> [3 BØLGER] -> Alice, via Overførselstransaktion (Type: 4).

Vi kontrollerer, at det env.SEED, som transaktionerne underskrives fra, stemmer overens med vores bank:
Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Hvis du ikke har en matchende frøsætning, skal du bare skifte til den på fanen Konti og tjekke igen.
Herefter opretter, annoncerer og underskriver vi en transaktion for overførsel af 3 WAVES Alice.
Du kan også finde ud af Alices data gennem variablen env.accounts. Nummereringen starter fra 0, så Alice er env.accounts[1].
Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

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

Resultatet kan også observeres i browseren, et link til det vil blive returneret til os umiddelbart efter udførelse transaktioner.

Vi sørger for, at Alices saldo bliver genopfyldt med 3 WAVES, og bankbalancen forbliver på 10 - 3 - 0.01 = 0.699.
Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Vi sender Boob og Cooper 3 WAVES hver, og Neli, Xena og Mark 0.2 WAVES hver på samme måde.
(Noter: Vi lavede en fejl med ét tegn og sendte Neli 0.02 WAVES. Vær forsigtig!)

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

Efter at have genopfyldt saldierne for alle deltagere, ser vi:
Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Trin 2. Opret en dApp-konto

Vi blev enige om, at Alice skulle være skaberen og ejeren af ​​den decentrale applikation.
Gå til Konti, indstil det som SEED og tjek env.SEED matcher Alice.

Lad os prøve at installere det enklest mulige script (kontrakt) på Alices konto.
Smarte kontakter i Waves er prædikater, der forbyder eller tillader enhver form for udgående transaktion at finde sted under visse betingelser. I dette tilfælde er denne betingelse ALTID. Kontraktkoden er sand. Kald deploy().

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Gebyr pr. setScript-transaktion 1400000/100000000 = 0.014 WAVES. Alice har 2.986 WAVES tilbage på sin balance.

Lad os nu prøve at installere mere kompleks smart kontraktlogik på Alice-kontoen, beskrevet i eksempel

Ride4Dapps inkluderer nu 2 nye annoteringstyper:

  1. @Opkaldbar(i) — tager som parameter i, data om, hvilken konto der har kaldt/underskrevet transaktionen. Det er resultatet af denne funktion, der bestemmer ændringen i dApp-kontoens tilstand. Andre konti kan oprette transaktioner og udføre funktioner med denne annotation og ændre tilstanden for dApp-kontoen.
  2. @Verifier(tx) — Transaktionsverifikator med transaktions-tx-parameteren. Svarer til prædikatlogikken fra RIDE. Det er i dette udtryk, du kan tillade eller forbyde yderligere ændringer af logikken i smarte kontrakter på dApp-kontoen.

Lad os gøre det DAI konto som en fælles tegnebog for alle deltagere.
Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

For at kontrollere, hvilken kontrakt der i øjeblikket er aktiv på din konto, kan du kopiere base64-koden for den smarte kontrakt i blokudforskeren og genkende den ved hjælp af en decompiler (for eksempel)
Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)
Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)
Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Vi sørger for, at logikken i den smarte kontrakt matcher det, vi forventer.
Alice har 2.972 WAVES tilbage på sin balance.

Denne dApp holder styr på, hvor meget hver deltager bidrager til den fælles fond gennem en mekanisme datatransaktion — DataEntry(currentKey, newAmount), hvor currentKey er den konto, der kalder indbetalingsfunktionen, og newAmount er værdien af ​​den genopfyldte saldo.

Boob og Cooper foretager deres indbetalinger til dApp-kontoen med 1 WAVES.
Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Vi laver en fejl, og handlen går ikke igennem. Da vi, på trods af at vi var overbevist om, at vi lavede en transaktion på vegne af Bob, lavede en fejl i indekset og angav en bankkonto, der ikke har en smart kontrakt. Det er værd at bemærke et vigtigt punkt her - der er et gebyr for mislykkede forsøg på at starte transaktioner kan ikke fjernes! Alice har 2.972 WAVES tilbage på sin balance. Bob har 3 BØGER.

Bob sendte 1 WAVES til dApp-kontoen.

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

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Bob har 1.99 WAVES tilbage. Det vil sige, at Bob betalte 0.01 WAVES-kommission

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Alice havde 2.972 WAVES på sin balance, nu er den 3.972. En transaktion blev også registreret på Alice-kontoen, men der blev ikke opkrævet nogen provision fra dApp-kontoen (Alice).
Efter at Cooper også genopfyldte kontoen, blev Alices saldo 4.972 WAVES.

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Du kan finde ud af, hvem der ejer hvor mange WAVES i den fælles tegnebog i blokudforskeren på fanen Data.

Cooper ændrede mening om at efterlade mængden af ​​1 WAVES på den generelle tegnebog og besluttede at trække halvdelen af ​​affiniteten tilbage. For at gøre dette skal han kalde tilbagetrækningsfunktionen.

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Vi tog dog fejl igen, da tilbagetrækningsfunktionen har helt andre parametre og en anden signatur. Når du designer smarte kontrakter på RIDE4DAPPS, skal du være opmærksom på dette punkt

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Cooper har nu 2.48 WAVES på sin balance. Følgelig 3 BØLGER - 1 - 0.01 og derefter + 0.5 - 0.01. Derfor koster hvert opkald til indbetaling og udbetaling 0.01 WAVES. Som et resultat ændrede indtastningerne i dApps-ejertabellen sig som følger.

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Bob besluttede også at hæve nogle penge fra den delte tegnebog, men lavede en fejl og forsøgte at hæve 1.5 WAVES.

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Den smarte kontrakt havde dog et tjek for denne situation.

Xena er en svindler, hun forsøgte at trække 1 WAVES fra den samlede konto.

Lær at skrive Waves smarte kontrakter på RIDE og RIDE4DAPPS. Del 1 (multi-bruger tegnebog)

Det lykkedes heller ikke for hende.

I den næste del vil vi se på mere komplekse problemer relateret til ufuldkommenheden af ​​Alice dApp-konto.

Kilde: www.habr.com

Tilføj en kommentar