Hvordan bygge, distribuere og teste Waves RIDE dApp

Hallo! I denne artikkelen vil jeg vise deg hvordan du skriver og kjører en vanlig dApp på en Waves-node. La oss se på nødvendige verktøy, metoder og et eksempel på utvikling.

Hvordan bygge, distribuere og teste Waves RIDE dApp

Utviklingsskjemaet for dApps og vanlige applikasjoner er nesten det samme:

  • Vi skriver koden
  • Skrive automatisert testing
  • Å starte programmet
  • Testing

Verktøy

1. docker for å kjøre noden og Waves Explorer

Hvis du ikke vil starte en node, kan du hoppe over dette trinnet. Tross alt er det et test- og eksperimentelt nettverk. Men uten å distribuere din egen node, kan testprosessen trekke ut.

  • Du vil stadig trenge nye kontoer med testtokens. Testnettverkskranen overfører 10 BØLGER hvert 10. minutt.
  • Gjennomsnittlig blokkeringstid i testnettverket er 1 minutt, i noden – 15 sekunder. Dette er spesielt merkbart når en transaksjon krever flere bekreftelser.
  • Aggressiv caching er mulig på offentlige testnoder.
  • De kan også være midlertidig utilgjengelige på grunn av vedlikehold.

Fra nå av vil jeg anta at du jobber med din egen node.

2. Surfebrett kommandolinjeverktøy

  • Last ned og installer Node.js ved å bruke ppa, homebrew eller exe her: https://nodejs.org/en/download/.
  • Installer Surfboard, et verktøy som lar deg kjøre tester på en eksisterende node.

npm install -g @waves/surfboard

3. Visual Studio Code-plugin

Dette trinnet er valgfritt hvis du ikke er en fan av IDE-er og foretrekker tekstredigerere. Alle nødvendige verktøy er kommandolinjeverktøy. Hvis du bruker vim, vær oppmerksom på plugin vim-ride.

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

Åpne VS Code og installer waves-ride plugin:

Hvordan bygge, distribuere og teste Waves RIDE dApp

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

Ferdig!

Start noden og Waves Explorer

1. Start noden:

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

Sørg for at noden er lansert via REST API i http://localhost:6869:

Hvordan bygge, distribuere og teste Waves RIDE dApp
Swagger REST API for node

2. Start en forekomst av Waves Explorer:

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

Åpne en nettleser og gå til http://localhost:3000. Du vil se hvor raskt en tom lokal nodekrets bygges.

Hvordan bygge, distribuere og teste Waves RIDE dApp
Waves Explorer viser en lokal nodeforekomst

RIDE-struktur og surfebrettverktøy

Opprett en tom katalog og kjør kommandoen i den

surfboard init

Kommandoen initialiserer en katalog med prosjektstrukturen, "hallo verden"-applikasjoner og tester. Hvis du åpner denne mappen med VS-kode, vil du se:

Hvordan bygge, distribuere og teste Waves RIDE dApp
Surfboard.config.json

  • Under ./ride/-mappen finner du en enkelt fil wallet.ride - katalogen der dApp-koden er plassert. Vi vil kort analysere dApps i neste blokk.
  • Under ./test/-mappen finner du en *.js-fil. Tester lagres her.
  • ./surfboard.config.json – konfigurasjonsfil for å kjøre tester.

Envs er en viktig del. Hvert miljø er konfigurert slik:

  • REST API-endepunkt for noden som skal brukes til å starte nettverkets dApp og CHAIN_ID.
  • En hemmelig setning for en konto med tokens som vil være kildene til testtokenene dine.

Som du kan se, støtter surfboard.config.json flere miljøer som standard. Standard er det lokale miljøet (standardEnv-nøkkelen er en parameter som kan endres).

Lommebok-demo-applikasjon

Denne delen er ikke en referanse til RIDE-språket. Snarere en titt på applikasjonen som vi distribuerer og tester for bedre å forstå hva som skjer i blokkjeden.

La oss se på en enkel Wallet-demo-applikasjon. Alle kan sende tokens til en dApp-adresse. Du kan bare ta ut dine WAVES. To @Callable-funksjoner er tilgjengelige via InvokeScriptTransaction:

  • deposit()som krever en vedlagt betaling i WAVES
  • withdraw(amount: Int)som returnerer tokens

Gjennom hele dApps livssyklus vil strukturen (adresse → beløp) opprettholdes:

Handling
Resulterende tilstand

innledende
tom

Alice legger inn 5 BØLGER
alice-adresse → 500000000

Bob setter inn 2 BØLGER

alice-adresse → 500000000
bob-adresse → 200000000

Bob trekker tilbake 7 BØLGER
NEKTE!

Alice trekker seg tilbake 4 BØLGER
alice-adresse → 100000000
bob-adresse → 200000000

Her er koden for å forstå situasjonen fullt ut:

# 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 finner du også på GitHub.

VSCode-pluginen støtter kontinuerlig kompilering mens du redigerer en fil. Derfor kan du alltid overvåke feil i PROBLEMER-fanen.

Hvordan bygge, distribuere og teste Waves RIDE dApp
Hvis du vil bruke et annet tekstredigeringsprogram når du kompilerer filen, bruk

surfboard compile ride/wallet.ride

Dette vil sende ut en serie med base64-kompilert RIDE-kode.

Testskript for 'wallet.ride'

La oss se på testfil. Drevet av JavaScripts Mocha-rammeverk. Det er en "Før"-funksjon og tre tester:

  • "Før" finansierer flere kontoer via MassTransferTransaction, kompilerer skriptet og distribuerer det til blokkjeden.
  • "Can deposit" sender en InvokeScriptTransaction til nettverket, og aktiverer deposit()-funksjonen for hver av de to kontoene.
  • "Kan ikke ta ut mer enn det ble satt inn" tester som ingen kan stjele andres tokens.
  • "Kan sette inn" sjekker at uttak behandles riktig.

Kjør tester fra Surfboard og analyser resultater i Waves Explorer

For å kjøre testen, kjør

surfboard test

Hvis du har flere skript (du trenger for eksempel et separat distribusjonsskript), kan du kjøre

surfboard test my-scenario.js

Surfboard vil samle testfilene i ./test/-mappen og kjøre skriptet på noden som er konfigurert i surfboard.config.json. Etter noen sekunder vil du se noe slikt:

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! Tester bestått. La oss nå ta en titt på hva som skjer når du bruker Waves Explorer: se på blokkene eller lim inn en av adressene ovenfor i søket (for eksempel den tilsvarende wallet#. Der kan du finne transaksjonshistorikk, dApp-status, dekompilert binær fil.

Hvordan bygge, distribuere og teste Waves RIDE dApp
Waves Explorer. En applikasjon som nettopp har blitt distribuert.

Noen surfebretttips:

1. For å teste i testnettmiljøet, bruk:

surfboard test --env=testnet

Få testtokens

2. Hvis du ønsker å se JSON-versjonene av transaksjoner og hvordan de behandles av noden, kjør testen med -v (betyr 'verbose'):

surfboard test -v

Bruke apper med Waves Keeper

1. Sett opp Waves Keeper til å fungere: http://localhost:6869

Hvordan bygge, distribuere og teste Waves RIDE dApp
Sette opp Waves Keeper for å jobbe med en lokal node

2. Importere hemmelig frase med tokens for nettverket? For enkelhets skyld, bruk det første frøet til noden din: waves private node seed with waves tokens. Adresse: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Du kan kjøre en serverløs enkeltsideapplikasjon selv ved å bruke npm. Eller gå til den eksisterende: chrome-ext.wvservices.com/dapp-wallet.html

4. Skriv inn lommebokadressen fra testkjøringen (understreket ovenfor) i dApp-adressetekstboksen

5. Skriv inn et lite beløp i «Innskudd»-feltet og klikk på knappen:

Hvordan bygge, distribuere og teste Waves RIDE dApp
Waves Keeper ber om tillatelse til å signere en InvokeScriptTransaction med betaling av 10 WAVES.

6. Bekreft transaksjonen:

Hvordan bygge, distribuere og teste Waves RIDE dApp
Transaksjonen opprettes og kringkastes til nettverket. Nå kan du se ID-en hennes

7. Overvåk transaksjonen ved hjelp av Waves Explorer. Skriv inn ID i søkefeltet

Hvordan bygge, distribuere og teste Waves RIDE dApp

Konklusjoner og tilleggsinformasjon

Vi så på verktøyene for å utvikle, teste, distribuere og bruke enkle dApps på Waves-plattformen:

  • RIDE språk
  • VS Code Editor
  • Waves Explorer
  • Surfebrett
  • Waves Keeper

Lenker for de som vil fortsette å lære RIDE:

Flere eksempler
Online IDE med eksempler
Waves Dokumentasjon
Utviklerchat i Telegram
Bølger og RIDE på stackoverflow
NY! Nettkurs om å lage dApps på Waves-plattformen

Fortsett å dykke inn i RIDE-emnet og lag din første dApp!

TL; DR: bit.ly/2YCFnwY

Kilde: www.habr.com

Legg til en kommentar