Hvordan man bygger, implementerer og tester Waves RIDE dApp

Hej! I denne artikel vil jeg vise dig, hvordan du skriver og kører en almindelig dApp på en Waves-node. Lad os se på de nødvendige værktøjer, metoder og et eksempel på udvikling.

Hvordan man bygger, implementerer og tester Waves RIDE dApp

Udviklingsskemaet for dApps og almindelige applikationer er næsten det samme:

  • Vi skriver koden
  • Skrivning af automatiseret test
  • Start applikationen
  • Afprøvning

Værktøj

1. docker for at køre noden og Waves Explorer

Hvis du ikke vil starte en node, kan du springe dette trin over. Der er jo et test- og eksperimentelt netværk. Men uden at implementere din egen node, kan testprocessen trække ud.

  • Du får konstant brug for nye konti med testtokens. Testnetværkshanen overfører 10 WAVES hvert 10. minut.
  • Den gennemsnitlige blokeringstid i testnetværket er 1 minut, i noden – 15 sekunder. Dette er især bemærkelsesværdigt, når en transaktion kræver flere bekræftelser.
  • Aggressiv caching er mulig på offentlige testknudepunkter.
  • De kan også være midlertidigt utilgængelige på grund af vedligeholdelse.

Fra nu af vil jeg antage, at du arbejder med din egen node.

2. Surfbræt Kommandolinjeværktøj

  • Download og installer Node.js ved hjælp af ppa, homebrew eller exe her: https://nodejs.org/en/download/.
  • Installer Surfboard, et værktøj, der giver dig mulighed for at køre test på en eksisterende node.

npm install -g @waves/surfboard

3. Visual Studio Code plugin

Dette trin er valgfrit, hvis du ikke er fan af IDE'er og foretrækker teksteditorer. Alle de nødvendige værktøjer er kommandolinjeværktøjer. Hvis du bruger vim, skal du være opmærksom på plugin'et vim-ride.

Download og installer Visual Studio Code: https://code.visualstudio.com/

Åbn VS Code og installer waves-ride plugin:

Hvordan man bygger, implementerer og tester Waves RIDE dApp

Waves Keeper browserudvidelse: https://wavesplatform.com/products-keeper

Udført!

Start noden og Waves Explorer

1. Start noden:

docker run -d -p 6869:6869 wavesplatform/waves-private-node

Sørg for, at noden startes via REST API i http://localhost:6869:

Hvordan man bygger, implementerer og tester Waves RIDE dApp
Swagger REST API til node

2. Start en forekomst af Waves Explorer:

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

Åbn en browser og gå til http://localhost:3000. Du vil se, hvor hurtigt et tomt lokalt nodekredsløb bygges.

Hvordan man bygger, implementerer og tester Waves RIDE dApp
Waves Explorer viser en lokal nodeinstans

RIDE struktur og Surfboard værktøj

Opret en tom mappe og kør kommandoen i den

surfboard init

Kommandoen initialiserer en mappe med projektstrukturen, "hello world"-applikationer og tests. Hvis du åbner denne mappe med VS-kode, vil du se:

Hvordan man bygger, implementerer og tester Waves RIDE dApp
Surfboard.config.json

  • Under mappen ./ride/ finder du en enkelt fil wallet.ride - det bibliotek, hvor dApp-koden er placeret. Vi vil kort analysere dApps i næste blok.
  • Under mappen ./test/ finder du en *.js-fil. Tests gemmes her.
  • ./surfboard.config.json – konfigurationsfil til at køre test.

Envs er et vigtigt afsnit. Hvert miljø er konfigureret således:

  • REST API-endepunkt for den node, der vil blive brugt til at starte netværkets dApp og CHAIN_ID.
  • En hemmelig sætning for en konto med tokens, der vil være kilderne til dine test-tokens.

Som du kan se, understøtter surfboard.config.json flere miljøer som standard. Standarden er det lokale miljø (standardEnv-nøglen er en parameter, der kan ændres).

Tegnebog-demo-applikation

Dette afsnit er ikke en reference til RIDE-sproget. Snarere et kig på den applikation, som vi implementerer og tester for bedre at forstå, hvad der sker i blockchain.

Lad os se på en simpel Wallet-demo-applikation. Alle kan sende tokens til en dApp-adresse. Du kan kun trække dine WAVES tilbage. To @Callable-funktioner er tilgængelige via InvokeScriptTransaction:

  • deposit()som kræver en vedhæftet betaling i WAVES
  • withdraw(amount: Int)som returnerer tokens

Gennem hele dApps livscyklus vil strukturen (adresse → beløb) blive vedligeholdt:

Handling
Resulterende tilstand

initial
tom

Alice afsætter 5 BØLGER
alice-adresse → 500000000

Bob indsætter 2 BØGER

alice-adresse → 500000000
bob-adresse → 200000000

Bob trækker 7 BØGER tilbage
NÆGTET!

Alice trækker 4 BØGER tilbage
alice-adresse → 100000000
bob-adresse → 200000000

Her er koden til fuldt ud at forstå situationen:

# In this example multiple accounts can deposit their funds and safely take them back. No one can interfere with this.
# An inner state is maintained as mapping `address=>waves`.
{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
@Callable(i)
func deposit() = {
 let pmt = extract(i.payment)
 if (isDefined(pmt.assetId))
    then throw("works with waves only")
    else {
     let currentKey = toBase58String(i.caller.bytes)
     let currentAmount = match getInteger(this, currentKey) {
       case a:Int => a
       case _ => 0
     }
     let newAmount = currentAmount + pmt.amount
     WriteSet([DataEntry(currentKey, newAmount)]) 
   }
 }
@Callable(i)
func withdraw(amount: Int) = {
 let currentKey = toBase58String(i.caller.bytes)
 let currentAmount = match getInteger(this, currentKey) {
   case a:Int => a
   case _ => 0
 }
 let newAmount = currentAmount - amount
 if (amount < 0)
   then throw("Can't withdraw negative amount")
   else if (newAmount < 0)
     then throw("Not enough balance")
     else ScriptResult(
       WriteSet([DataEntry(currentKey, newAmount)]),
       TransferSet([ScriptTransfer(i.caller, amount, unit)])
      )
 }
@Verifier(tx)
func verify() = false

Eksempelkode kan også findes på GitHub.

VSCode-plugin'et understøtter kontinuerlig kompilering, mens du redigerer en fil. Derfor kan du altid overvåge fejl i fanen PROBLEMER.

Hvordan man bygger, implementerer og tester Waves RIDE dApp
Hvis du vil bruge en anden teksteditor, når du kompilerer filen, skal du bruge

surfboard compile ride/wallet.ride

Dette vil udsende en række base64-kompileret RIDE-kode.

Testscript til 'wallet.ride'

Lad os se på testfil. Drevet af JavaScripts Mocha-ramme. Der er en "Før"-funktion og tre tests:

  • "Før" finansierer flere konti via MassTransferTransaction, kompilerer scriptet og implementerer det til blockchain.
  • "Can deposit" sender en InvokeScriptTransaction til netværket, og aktiverer deposit()-funktionen for hver af de to konti.
  • “Kan ikke hæve mere end der blev indbetalt” tester, at ingen kan stjæle andres tokens.
  • "Kan indbetale" kontrollerer, at udbetalinger behandles korrekt.

Kør test fra Surfboard og analyser resultater i Waves Explorer

For at køre testen, kør

surfboard test

Hvis du har flere scripts (du har f.eks. brug for et separat implementeringsscript), kan du køre

surfboard test my-scenario.js

Surfboard samler testfilerne i mappen ./test/ og kører scriptet på den node, der er konfigureret i surfboard.config.json. Efter et par sekunder vil du se noget som dette:

wallet test suite
Generating accounts with nonce: ce8d86ee
Account generated: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Account generated: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Account generated: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Accounts successfully funded
Script has been set
   √ Can deposit (4385ms)
   √ Cannot withdraw more than was deposited
   √ Can withdraw (108ms)
3 passing (15s)

Hurra! Beståede prøver. Lad os nu tage et kig på, hvad der sker, når du bruger Waves Explorer: se på blokkene eller indsæt en af ​​adresserne ovenfor i søgningen (f.eks. den tilsvarende wallet#. Der kan du finde transaktionshistorik, dApp-status, dekompileret binær fil.

Hvordan man bygger, implementerer og tester Waves RIDE dApp
Waves Explorer. En applikation, der netop er blevet implementeret.

Nogle surfbrættips:

1. For at teste i testnet-miljøet skal du bruge:

surfboard test --env=testnet

Få test-tokens

2. Hvis du vil se JSON-versionerne af transaktioner, og hvordan de behandles af noden, skal du køre testen med -v (betyder 'verbose'):

surfboard test -v

Brug af apps med Waves Keeper

1. Indstil Waves Keeper til at virke: http://localhost:6869

Hvordan man bygger, implementerer og tester Waves RIDE dApp
Opsætning af Waves Keeper til at arbejde med en lokal node

2. Importer hemmelig sætning med tokens til netværket? For nemheds skyld skal du bruge det indledende frø af din node: waves private node seed with waves tokens. Adresse: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Du kan selv køre en serverløs enkeltsideapplikation ved hjælp af npm. Eller gå til den eksisterende: chrome-ext.wvservices.com/dapp-wallet.html

4. Indtast tegnebogsadressen fra testkørslen (understreget ovenfor) i dApp-adressetekstboksen

5. Indtast et lille beløb i feltet "Indbetaling", og klik på knappen:

Hvordan man bygger, implementerer og tester Waves RIDE dApp
Waves Keeper anmoder om tilladelse til at underskrive en InvokeScriptTransaction med betaling af 10 WAVES.

6. Bekræft transaktionen:

Hvordan man bygger, implementerer og tester Waves RIDE dApp
Transaktionen oprettes og udsendes til netværket. Nu kan du se hendes ID

7. Overvåg transaktionen ved hjælp af Waves Explorer. Indtast ID i søgefeltet

Hvordan man bygger, implementerer og tester Waves RIDE dApp

Konklusioner og yderligere information

Vi så på værktøjerne til at udvikle, teste, implementere og bruge simple dApps på Waves-platformen:

  • RIDE sprog
  • VS Code Editor
  • Waves Explorer
  • Surfboard
  • Waves Keeper

Links til dem, der ønsker at fortsætte med at lære RIDE:

Flere eksempler
Online IDE med eksempler
Bølger dokumentation
Udviklerchat i Telegram
Bølger og RIDE på stackoverflow
NY! Onlinekurser om oprettelse af dApps på Waves-platformen

Fortsæt med at dykke ned i RIDE-emnet og opret din første dApp!

TL; DR: bit.ly/2YCFnwY

Kilde: www.habr.com

Tilføj en kommentar