Hur man bygger, distribuerar och testar Waves RIDE dApp

Hej! I denna artikel visar jag hur man skriver och kör en vanlig dApp pÄ Waves-noden. Vi kommer att 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 skiljer sig nÀstan inte Ät:

  • Skriv kod
  • Skriv automatiserade tester
  • Startar applikationen
  • Testa

Verktyg

1. docker för att starta noden och Waves Explorer

Om du inte vill starta noden kan du hoppa över detta steg. Det finns ÀndÄ test- och experimentnÀtverk. Men utan att driftsÀtta din egen nod kan testprocessen dra ut pÄ tiden.

  • Du kommer stĂ€ndigt att behöva nya konton med testtillgĂ„ngar. Kranen för testnĂ€tverket överför 10 WAVES var tionde minut.
  • Genomsnittlig blocktid i testnĂ€tverket Ă€r 1 minut, medan det i noden Ă€r 15 sekunder. Detta Ă€r sĂ€rskilt pĂ„tagligt nĂ€r en transaktion krĂ€ver flera bekrĂ€ftelser.
  • I offentliga testnoder kan aggressiv caching förekomma.
  • De kan ocksĂ„ vara tillfĂ€lligt otillgĂ€ngliga pĂ„ grund av tekniskt underhĂ„ll.

Jag kommer fortsÀtta att utgÄ ifrÄn att du arbetar med din egen nod.

2. Kommandoradsverktyget Surfboard

  • Ladda ner och installera Node.js med hjĂ€lp av ppa, homebrew eller exe hĂ€r: https://nodejs.org/en/download/.
  • Installera Surfboard – verktyget som lĂ„ter dig köra tester pĂ„ en befintlig nod.

npm install -g @waves/surfboard

3. Visual Studio Code-tillÀgget

Detta steg Àr valfritt om du inte Àr en fan av IDE och föredrar textredigerare. Alla nödvÀndiga verktyg Àr kommandoradsverktyg. Om du anvÀnder vim, var uppmÀrksam pÄ tillÀgget vim-ride.

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

Öppna VS Code och installera tillĂ€gget waves-ride:

Hur man bygger, distribuerar och testar Waves RIDE dApp

WebblÀsartillÀgget Waves Keeper: 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 körs via REST API pÄ http://localhost:6869:

Hur man bygger, distribuerar och testar Waves RIDE dApp
Swagger REST API-grÀnssnittet för noden

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 din webblĂ€sare och gĂ„ till http://localhost:3000. Du kommer att se hur snabbt en tom kedja frĂ„n den lokala noden byggs.

Hur man bygger, distribuerar och testar Waves RIDE dApp
Waves Explorer visar en instans av den lokala noden

Strukturen för RIDE och verktyget Surfboard

Skapa en tom katalog och kör kommandot

surfboard init

Kommandot initierar katalogen med projektstruktur, en "hello world"-applikation och tester. Om du öppnar den hÀr mappen med VS Code ser du:

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

  • Under mappen .\/ride\/ hittar du en ensam fil wallet.ride – katalogen dĂ€r dApp-koden ligger. Vi kommer kort att analysera dApp:en i nĂ€sta avsnitt.
  • I mappen . /test/ hittar du filen *.js. HĂ€r lagras tester.
  • . /surfboard.config.json – konfigurationsfilen för att köra tester.

Envs – en viktig sektion. Varje miljö konfigureras sĂ„ hĂ€r:

  • REST API-endpointen för noden som kommer att anvĂ€ndas för att köra dApp och CHAIN_ID för nĂ€tverket.
  • Hemlig fras för kontot med tokens som kommer att vara kĂ€llor till dina testtokens.

Som du ser stödjer surfboard.config.json flera miljöer som standard. StandardinstĂ€llningen Ă€r lokal miljö (nyckel defaultEnv – en Ă€ndringsbar parameter).

Applikationen Wallet-demo

Denna sektion Àr inte en handbok för RIDE-sprÄket. Snarare en översikt över applikationen som vi implementerar och testar för att bÀttre förstÄ vad som hÀnder i blockchain.

LÄt oss titta pÄ det enkla Wallet-demo-applikationen. Vem som helst kan skicka tokens till dApp-adressen. Man kan bara ta ut sina egna WAVES. TvÄ @Callable-funktioner Àr tillgÀngliga via InvokeScriptTransaction:

  • deposit(), som krĂ€ver en bifogad betalning i WAVES
  • withdraw(amount: Int), som returnerar tokens

Under hela livscykeln för dApp kommer strukturen (address → amount) att upprĂ€tthĂ„llas:

Action
Resultant tillstÄnd

initial
tom

Alice sÀtter in 5 WAVES
alice-address → 500000000

Bob sÀtter in 2 WAVES

alice-address → 500000000
bob-address → 200000000

Bob tar ut 7 WAVES
NEKAS!

Alice tar ut 4 WAVES
alice-address → 100000000
bob-address → 200000000

HÀr Àr koden för att fullt 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

Exempelkoden kan Àven hittas pÄ GitHub.

VSCode-pluginet stödjer kontinuerlig kompilering nÀr du redigerar filen. SÄ du kan alltid hÄlla koll pÄ fel i fliken PROBLEMS.

Hur man bygger, distribuerar och testar Waves RIDE dApp
Om du vill anvÀnda en annan textredigerare vid kompilering av filen, anvÀnd

surfboard compile ride /wallet.ride

Detta kommer att ge dig en rad base64-kompilerad RIDE-kod.

Testscenariot för 'wallet.ride'

LÄt oss titta pÄ testfilen. Det fungerar pÄ JavaScript-ramverket Mocha. Det finns en "Before"-funktion och tre tester:

  • "Before" finansierar flera konton via MassTransferTransaction, kompilerar skriptet och distribuerar det i blockchain.
  • "Can deposit" skickar en InvokeScriptTransaction till nĂ€tverket och aktiverar deposit() för var och en av de tvĂ„ kontona.
  • "Can’t withdraw more than was deposited" testar att ingen kan stjĂ€la andras tokens.
  • "Can deposit" kontrollerar att uttagen hanteras korrekt.

Kör tester med Surfboard och analysera resultaten i Waves Explorer

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

surfboard test

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

surfboard test my-scenario.js

Surfboard samlar testfiler i mappen ./test/ och kör skriptet i noden som Àr instÀlld i surfboard.config.json. Efter nÄgra sekunder kommer du att se nÄgot liknande:

wallet test suite
Genererar konton med nonce: ce8d86ee
Konto genererat: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Konto genererat: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Konto genererat: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Konton har framgÄngsrikt finansierats
Skriptet har stÀllts in
   √ Kan sĂ€tta in (4385ms)
   √ Kan inte ta ut mer Ă€n vad som har satts in
   √ Kan ta ut (108ms)
3 godkÀnda (15s)

Hurra! Tester lyckades. Nu ska vi ta en titt pÄ vad som hÀnder nÀr man anvÀnder Waves Explorer: vi kan granska block eller klistra in nÄgon av adresserna ovan i sökfÀltet (till exempel, motsvarande wallet#. HÀr kan man hitta transaktionshistorik, dApps tillstÄnd, dekompilerad binÀrfil.

Hur man bygger, distribuerar och testar Waves RIDE dApp
Waves Explorer. Applikationen som just har distribuerats.

NÄgra tips för Surfboard:

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

surfboard test --env=testnet

FĂ„ testtokens

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

surfboard test -v

AnvÀnda applikationer 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
InstÀllning av Waves Keeper för att fungera med lokal nod

2. Importera den hemliga frasen med tokens för nÀtverket? För enkelhetens skull, anvÀnd seed frÄn din nod: waves private node seed with waves tokens. Adress: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Du kan köra en one-page serverless applikation sjÀlv, anvÀnda npm. Eller gÄ till den befintliga: chrome-ext.wvservices.com/dapp-wallet.html

4. Skriv in adressen frÄn testlanseringen (understruken ovan) i textfÀltet för dApp-adress

5. Skriv ett litet belopp i fÀltet "Deposit" och tryck pÄ knappen:

Hur man bygger, distribuerar och testar Waves RIDE dApp
Waves Keeper begÀr tillstÄnd att signera InvokeScriptTransaction med en betalning av 10 WAVES.

6. BekrÀfta transaktionen:

Hur man bygger, distribuerar och testar Waves RIDE dApp
Transaktionen har skapats och sÀnds till nÀtverket. Nu kan ID:t ses

7. Övervaka transaktionen med hjĂ€lp av Waves Explorer. Ange ID:t i sökfĂ€ltet

Hur man bygger, distribuerar och testar Waves RIDE dApp

Slutsatser och ytterligare information

Vi har granskat verktygen för utveckling, testning, distribution och anvÀndning av enkla dApps pÄ Waves Platform:

  • SprĂ„k RIDE
  • VS Code-redigerare
  • Waves Explorer
  • Surfboard
  • Waves Keeper

LÀnkar för den som vill fortsÀtta studera RIDE:

Fler exempel
Online IDE med exempel
Waves dokumentation
Utvecklarchatt pÄ Telegram
Waves och RIDE pÄ stackoverflow
NYTT! Online-kurser om att skapa dApps pÄ Waves Platform

FortsÀtt att fördjupa dig i Àmnet RIDE och skapa din första dApp!

TL;DR: bit.ly/2YCFnwY

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