LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Hej alla!

Nyligen lanserade Waves Labs annonserade en tÀvling för utvecklare i samband med lanseringen av den testnÀtutvidgning av smarta kontraktsprÄket RIDE för decentraliserade applikationer Ride4Dapps!

Vi valde DAO-fallet eftersom Ventuary planerar att utveckla en dApp med sociala funktioner: röstning, insamling av medel, förtroendeförvaltning, etc.
Vi började med ett enkelt exempel i Q&A-sessionerna och i RIDE IDE — exemplet med en gemensam plĂ„nbok.

LÄt oss gÄ igenom detta exempel, testa hypoteser och titta pÄ nÄgra konstigheter:

Anta att vi har Alice – dApp-Ă€gare
Boob och Cooper – partners till Alice, medgrundare av Alice-BC DAO
Neli – företagaren som behöver finansiering
Bank – banken som delar ut tokens

Steg 1. Initiering av saldon

För att fÄ tokens i Waves testnÀt behöver vi besöka faucet och ange adressen dit vi ska skicka tokens.
Adressen kan hittas i IDE genom att avslöja kontoinformationen.
Vi tilldelar Bank 10 WAVES. Efter detta kontrollerar vi att de har kommit fram via block- och transaktionsutforskaren: utforskaren

Nu ska vi dela ut tokens frÄn banken till de andra deltagarna. (Obs: Alla transaktioner i Waves-nÀtverket Àr inte gratis, sÄ alla deltagare mÄste ha ett minimalt positivt saldo för att kunna genomföra transaktioner).

1 WAVES = 100000000 enheter (wavelets), eftersom belopp kan vara endast heltal
0.01 WAVES (Transaktionsavgift) = 1000000

Bank -> [3 WAVES] -> Alice, via TransferTransaction (Typ: 4).

Kontrollera att env.SEED, som anvÀnds för att signera transaktioner, motsvarar vÄr Bank:
LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)
ïżŒ
Om du inte har en matchande seed-frase, vÀx helt enkelt till den pÄ fliken Konton och kontrollera igen.
Efter detta skapar vi, annonserar och signerar transaktionen för att överföra 3 WAVES till Alice.
Du kan ocksÄ fÄ Alices information via variabeln env.accounts. Nummereringen börjar frÄn 0, sÄ Alice Àr env.accounts[1].
LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

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

Resultatet kan ocksÄ observeras i utforskaren, lÀnken till den returneras till oss direkt efter utförandet av transaktionen. transaktionen.

Vi verifierar att Alices saldo har ökat med 3 WAVES, och bankens saldo Ă€r nu 10 – 3 – 0.01 = 6.99.
LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Vi skickar 3 WAVES till Boob och Cooper, och 0.2 WAVES till Neli, Xena och Mark pÄ samma sÀtt.
(Obs: Vi gjorde ett misstag med en siffra och skickade Neli 0.02 WAVES. Var försiktig!)

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

Efter att ha ökat saldot för alla deltagare ser vi:
LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Steg 2. Skapa dApp-konto

Vi kom överens om att skaparen och Àgaren av den decentraliserade applikationen kommer att vara Alice.
I kontona gÄr vi in och stÀller in henne som SEED och kontrollerar att env.SEED motsvarar Alice.

LÄt oss försöka installera det enklaste skriptet (kontraktet) för Alice-kontot.
Smartkontrakt i Waves Ă€r predikat som förhindrar eller tillĂ„ter en viss typ av utgĂ„ende transaktion att genomföras under vissa förhĂ„llanden. I det hĂ€r fallet Ă€r villkoret — ALWAYS. Kontraktskoden Ă€r true. Vi anropar deploy().

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Avgiften för setScript transaktionen Àr 1400000/100000000 = 0.014 WAVES. Alice har 2.986 WAVES kvar pÄ sitt saldo.

LÄt oss nu försöka installera en mer komplex logik för smartkontraktet pÄ Alice-kontot, som beskrivs i exemplet

Ride4Dapps inkluderar nu 2 nya typer av anteckningar:

  1. @Callable(i) — accepterar som parameter i, data om vilket konto som anropade/signerade transaktionen. Resultatet av denna funktion bestĂ€mmer förĂ€ndringen av dApp-kontots tillstĂ„nd. Andra konton kan skapa transaktioner och utföra funktioner med denna anteckning och Ă€ndra tillstĂ„ndet för dApp-kontot.
  2. @Verifier(tx) — Verifierare av transaktionen med parametern tx transaktionen. Motsvarar logiken i predikaten frĂ„n RIDE. Det Ă€r i detta uttryck som man kan tillĂ„ta eller förbjuda ytterligare Ă€ndringar av smartkontraktens logik pĂ„ dApp-kontot.

LÄt oss skapa dApp kontot som en gemensam plÄnbok för alla deltagare.
LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

För att kontrollera vilket kontrakt som för nÀrvarande Àr aktivt pÄ kontot kan vi kopiera base64-koden för smartkontraktet i blockutforskaren och avkoda den med en dekompilator (for example)
LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)
LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)
LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Vi sÀkerstÀller att logiken för smartkontraktet överensstÀmmer med vad vi förvÀntar oss.
Alice har 2.972 WAVES kvar pÄ sitt saldo.

Denna dApp hĂ„ller reda pĂ„ hur mycket var och en av deltagarna bidrar med till den gemensamma fonden genom mekanismen data transaction — DataEntry(currentKey, newAmount), dĂ€r currentKey Ă€r kontot som anropar funktionen deposit, och newAmount Ă€r beloppet av det tillagda saldot.

Bob och Cooper gör sina insÀttningar pÄ dApp-kontot med 1 WAVES vardera.
LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Vi gör ett misstag och transaktionen misslyckas. Eftersom vi, trots att vi sÀkerstÀllde att vi gör transaktionen i Bobs namn, förvÀxlade indexet och angav kontot Bank, dÀr det inte finns nÄgot smartkontrakt. HÀr Àr det viktigt att notera att för misslyckade försök att initiera transaktioner tas ingen avgift. Avgiften tas inte ut! Alice har 2.972 WAVES kvar pÄ sitt saldo. Bob har 3 WAVES.

Bob skickade 1 WAVES till dApp-kontot.

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

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Bob har 1.99 WAVES kvar. Det vill sÀga att Bob betalade 0.01 WAVES i avgift.

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Alice hade 2.972 WAVES pÄ sitt saldo, nu har hon 3.972. Ett transaktion Àr ocksÄ registrerad pÄ Alices konto, men ingen avgift har dragits frÄn dApp-kontot (Alice).
Efter att Cooper Àven fyllt pÄ sitt saldo har Alices balans blivit 4.972 WAVES.

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Den totala mÀngden WAVES som tillhör olika anvÀndare i den gemensamma plÄnboken kan ses i blockutforskaren under fliken Data.

Cooper Àndrade sig och ville inte lÀmna beloppet 1 WAVES i den gemensamma plÄnboken sÄ han beslutade att ta ut hÀlften av sina medel. För detta mÄste han anropa funktionen withdraw.

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Men vi gjorde Äterigen ett misstag eftersom withdraw-funktionen har helt andra parametrar och en annat signatur. NÀr ni designar smarta kontrakt pÄ RIDE4DAPPS bör ni vara uppmÀrksamma pÄ detta.

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Coopers saldo blev 2.48 WAVES. SĂ„ledes Ă€r 3 WAVES — 1 — 0.01, och sedan + 0.5 — 0.01. Varje anrop till deposit och withdraw kostar 0.01 WAVES. SĂ„ledes har Ă€garstatistiken i dApps nu Ă€ndrats enligt följande.

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Bob beslöt ocksÄ att ta ut en viss summa frÄn den gemensamma plÄnboken, men han hade fel och försökte ta ut 1.5 WAVES.

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Men det fanns en kontroll i smartkontraktet för en sÄdan situation.

Xena Àr en bedragare, hon försökte ta ut 1 WAVES frÄn den gemensamma kontot.

LÀr dig att skriva Waves smarta kontrakt pÄ RIDE och RIDE4DAPPS. Del 1 (FleranvÀndarplÄnbok)

Hon lyckades inte heller.

I nÀsta del kommer vi att titta pÄ mer komplexa aspekter i samband med bristerna i Alices dApp-konto.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster