Hur man bygger, distribuerar och testar Waves RIDE dApp

Hallå! I den här artikeln kommer jag att visa dig hur du skriver och kör en vanlig dApp på en Waves-nod. Låt oss titta på nödvändiga verktyg, metoder och ett exempel på utveckling.

Hur man bygger, distribuerar och testar Waves RIDE dApp

Utvecklingsschemat för dApps och vanliga applikationer är nästan detsamma:

  • Vi skriver koden
  • Skriver automatiserade tester
  • Starta applikationen
  • Testning

Verktyg

1. docker för att köra noden och Waves Explorer

Om du inte vill starta en nod kan du hoppa över det här steget. Det finns trots allt ett test- och experimentnätverk. Men utan att distribuera din egen nod kan testprocessen dra ut på tiden.

  • Du kommer ständigt att behöva nya konton med testtokens. Testnätverkskranen överför 10 VÅGOR var 10:e minut.
  • Den genomsnittliga blockeringstiden i testnätverket är 1 minut, i noden – 15 sekunder. Detta är särskilt märkbart när en transaktion kräver flera bekräftelser.
  • Aggressiv cachning är möjlig på offentliga testnoder.
  • De kan också vara tillfälligt otillgängliga på grund av underhåll.

Från och med nu kommer jag att anta att du arbetar med din egen nod.

2. Kommandoradsverktyg för surfbräda

  • Ladda ner och installera Node.js med ppa, homebrew eller exe här: https://nodejs.org/en/download/.
  • Installera Surfboard, ett verktyg som låter dig köra tester på en befintlig nod.

npm install -g @waves/surfboard

3. Visual Studio Code-plugin

Det här steget är valfritt om du inte är ett fan av IDE och föredrar textredigerare. Alla nödvändiga verktyg är kommandoradsverktyg. Om du använder vim, var uppmärksam på plugin vim-ride.

Ladda ner och installera Visual Studio Code: https://code.visualstudio.com/

Öppna VS Code och installera waves-ride plugin:

Hur man bygger, distribuerar och testar Waves RIDE dApp

Waves Keeper webbläsartillägg: https://wavesplatform.com/products-keeper

Klart!

Starta noden och Waves Explorer

1. Starta noden:

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

Se till att noden startas via REST API i http://localhost:6869:

Hur man bygger, distribuerar och testar Waves RIDE dApp
Swagger REST API för nod

2. Starta en instans av Waves Explorer:

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

Öppna en webbläsare och gå till http://localhost:3000. Du kommer att se hur snabbt en tom lokal nodkrets byggs.

Hur man bygger, distribuerar och testar Waves RIDE dApp
Waves Explorer visar en lokal nodinstans

RIDE struktur och surfbräda verktyg

Skapa en tom katalog och kör kommandot i den

surfboard init

Kommandot initierar en katalog med projektstrukturen, "hej världen"-applikationer och tester. Om du öppnar den här mappen med VS-kod ser du:

Hur man bygger, distribuerar och testar Waves RIDE dApp
Surfboard.config.json

  • Under mappen ./ride/ hittar du en enda fil wallet.ride - katalogen där dApp-koden finns. Vi kommer kort att analysera dApps i nästa block.
  • Under mappen ./test/ hittar du en *.js-fil. Tester lagras här.
  • ./surfboard.config.json – konfigurationsfil för att köra tester.

Envs är ett viktigt avsnitt. Varje miljö är konfigurerad så här:

  • REST API-slutpunkt för noden som kommer att användas för att starta nätverkets dApp och CHAIN_ID.
  • En hemlig fras för ett konto med tokens som kommer att vara källorna till dina testtokens.

Som du kan se stöder surfboard.config.json flera miljöer som standard. Standard är den lokala miljön (defaultEnv-nyckeln är en parameter som kan ändras).

Plånbok-demo-applikation

Det här avsnittet är inte en referens till RIDE-språket. Snarare en titt på applikationen som vi distribuerar och testar för att bättre förstå vad som händer i blockkedjan.

Låt oss titta på en enkel Wallet-demoapplikation. Vem som helst kan skicka tokens till en dApp-adress. Du kan bara ta ut dina WAVES. Två @Callable-funktioner är tillgängliga via InvokeScriptTransaction:

  • deposit()vilket kräver en bifogad betalning i WAVES
  • withdraw(amount: Int)som returnerar tokens

Under hela dApps livscykel kommer strukturen (adress → mängd) att bibehållas:

Handling
Resulterande tillstånd

inledande
tom

Alice sätter in 5 VÅGOR
alice-adress → 500000000

Bob sätter in 2 VÅGOR

alice-adress → 500000000
bob-adress → 200000000

Bob drar tillbaka 7 VÅGOR
NEKAD!

Alice drar tillbaka 4 VÅGOR
alice-adress → 100000000
bob-adress → 200000000

Här är koden för att helt förstå 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

Provkod finns också på GitHub.

VSCode-pluginet stöder kontinuerlig kompilering medan du redigerar en fil. Därför kan du alltid övervaka fel på fliken PROBLEM.

Hur man bygger, distribuerar och testar Waves RIDE dApp
Om du vill använda en annan textredigerare när du kompilerar filen, använd

surfboard compile ride/wallet.ride

Detta kommer att mata ut en serie av base64-kompilerad RIDE-kod.

Testskript för 'wallet.ride'

Låt oss titta på testfil. Drivs av JavaScripts Mocha-ramverk. Det finns en "Före"-funktion och tre tester:

  • "Before" finansierar flera konton via MassTransferTransaction, kompilerar skriptet och distribuerar det till blockkedjan.
  • "Kan sätta in" skickar en InvokeScriptTransaction till nätverket och aktiverar funktionen deposit() för vart och ett av de två kontona.
  • "Kan inte ta ut mer än vad som sattes in" tester att ingen kan stjäla andras tokens.
  • "Kan sätta in" kontrollerar att uttag behandlas korrekt.

Kör tester från Surfboard och analysera resultat i Waves Explorer

För att köra testet, kör

surfboard test

Om du har flera skript (du behöver till exempel ett separat distributionsskript) kan du köra

surfboard test my-scenario.js

Surfboard samlar in testfilerna i mappen ./test/ och kör skriptet på noden som är konfigurerad i surfboard.config.json. Efter några sekunder ser du något i stil med detta:

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! Godkända prov. Låt oss nu ta en titt på vad som händer när du använder Waves Explorer: titta på blocken eller klistra in en av adresserna ovan i sökningen (till exempel motsvarande wallet#. Där kan du hitta transaktionshistorik, dApp-status, dekompilerad binär fil.

Hur man bygger, distribuerar och testar Waves RIDE dApp
Waves Explorer. En applikation som precis har distribuerats.

Några surfbrädetips:

1. För att testa i testnet-miljön, använd:

surfboard test --env=testnet

Få testpolletter

2. Om du vill se JSON-versionerna av transaktioner och hur de bearbetas av noden, kör testet med -v (betyder 'verbose'):

surfboard test -v

Använda appar med Waves Keeper

1. Ställ in Waves Keeper för att fungera: http://localhost:6869

Hur man bygger, distribuerar och testar Waves RIDE dApp
Ställa in Waves Keeper för att arbeta med en lokal nod

2. Importera hemlig fras med tokens för nätverket? För enkelhetens skull, använd det initiala fröet för din nod: waves private node seed with waves tokens. Adress: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Du kan själv köra en serverlös ensidig applikation med npm. Eller gå till den befintliga: chrome-ext.wvservices.com/dapp-wallet.html

4. Ange plånboksadressen från testkörningen (understruken ovan) i dApp-adresstextrutan

5. Ange ett litet belopp i fältet "Insättning" och klicka på knappen:

Hur man bygger, distribuerar och testar Waves RIDE dApp
Waves Keeper begär tillåtelse att signera en InvokeScriptTransaction med betalning av 10 WAVES.

6. Bekräfta transaktionen:

Hur man bygger, distribuerar och testar Waves RIDE dApp
Transaktionen skapas och sänds till nätverket. Nu kan du se hennes ID

7. Övervaka transaktionen med Waves Explorer. Ange ID i sökfältet

Hur man bygger, distribuerar och testar Waves RIDE dApp

Slutsatser och ytterligare information

Vi tittade på verktygen för att utveckla, testa, distribuera och använda enkla dApps på Waves-plattformen:

  • RIDE språk
  • VS Code Editor
  • Waves Explorer
  • Surfbräda
  • Waves Keeper

Länkar för dig som vill fortsätta lära sig RIDE:

Fler exempel
Online IDE med exempel
Vågor dokumentation
Utvecklarchatt i Telegram
Vågor och RIDE på stackoverflow
NY! Onlinekurser om att skapa dApps på Waves-plattformen

Fortsätt dyka in i RIDE-ämnet och skapa din första dApp!

TL; DR: bit.ly/2YCFnwY

Källa: will.com

Lägg en kommentar