Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp

Hallo! Yn dit artikel sil ik jo sjen litte hoe't jo in gewoane dApp skriuwe en útfiere op in Waves-knooppunt. Litte wy nei de nedige ark, metoaden en in foarbyld fan ûntwikkeling sjen.

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp

It ûntwikkelingskema foar dApps en reguliere applikaasjes is hast itselde:

  • Skriuwen koade
  • Automatysk testen skriuwe
  • It starten fan de applikaasje
  • Testen

Tools

1. docker om it knooppunt en Waves Explorer út te fieren

As jo ​​​​gjin knooppunt begjinne wolle, kinne jo dizze stap oerslaan. Der is ommers in test- en eksperiminteel netwurk. Mar sûnder jo eigen knooppunt yn te setten, kin it testproses trochslepe.

  • Jo sille konstant nije akkounts nedich hawwe mei testtokens. De testnetwurkkraan ferpleatst elke 10 minuten 10 WAVES.
  • De gemiddelde bloktiid yn it testnetwurk is 1 minút, yn 'e node - 15 sekonden. Dit is benammen opfallend as in transaksje meardere befêstigings fereasket.
  • Agressyf caching is mooglik op iepenbiere testknooppunten.
  • Se kinne ek tydlik net beskikber wêze fanwege ûnderhâld.

Fan no ôf gean ik der fan út dat jo mei jo eigen knooppunt wurkje.

2. Surfboard Command Line Tool

  • Download en ynstallearje Node.js mei ppa, homebrew of exe hjir: https://nodejs.org/en/download/.
  • Ynstallearje Surfboard, in ark wêrmei jo testen kinne útfiere op in besteande knooppunt.

npm install -g @waves/surfboard

3. Visual Studio Code plugin

Dizze stap is opsjoneel as jo gjin fan binne fan IDE's en leaver tekstbewurkers hawwe. Alle nedige ark binne kommando-rigel-helpprogramma's. As jo ​​vim brûke, jouwe dan omtinken oan it plugin vim-ride.

Download en ynstallearje Visual Studio Code: https://code.visualstudio.com/

Iepenje VS Code en ynstallearje de waves-ride plugin:

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp

Waves Keeper browser tafoeging: https://wavesplatform.com/products-keeper

Done!

Start it knooppunt en Waves Explorer

1. Start it knooppunt:

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

Soargje derfoar dat it knooppunt wurdt lansearre fia de REST API yn http://localhost:6869:

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
Swagger REST API foar node

2. Start in eksimplaar fan Waves Explorer:

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

Iepenje in browser en gean nei http://localhost:3000. Jo sille sjen hoe fluch in lege lokale node circuit wurdt boud.

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
Waves Explorer toant in lokale node-eksimplaar

RIDE-struktuer en Surfboard-ark

Meitsje in lege map en fier it kommando dêryn

surfboard init

It kommando initialisearret in map mei de projektstruktuer, "hallo wrâld" applikaasjes en tests. As jo ​​dizze map iepenje mei VS Code, sille jo sjen:

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
Surfboard.config.json

  • Under de map ./ride/ fine jo ien bestân wallet.ride - de map wêr't de dApp-koade leit. Wy sille dApps koart analysearje yn it folgjende blok.
  • Under de ./test/ map fine jo in *.js triem. Tests wurde hjir opslein.
  • ./surfboard.config.json - konfiguraasjetriem foar it útfieren fan testen.

Envs is in wichtige seksje. Elke omjouwing is sa ynsteld:

  • REST API-einpunt fan it knooppunt dat sil wurde brûkt om de dApp en CHAIN_ID fan it netwurk te starten.
  • In geheime sin foar in akkount mei tokens dy't de boarnen sille wêze fan jo testtokens.

Sa't jo sjen kinne, stipet surfboard.config.json standert meardere omjouwings. De standert is de lokale omjouwing (de standertEnv-kaai is in feroare parameter).

Wallet-demo-applikaasje

Dizze seksje is gjin ferwizing nei de RIDE-taal. Earder in blik op de applikaasje dy't wy ynsette en testen om better te begripen wat der bart yn 'e blockchain.

Litte wy nei in ienfâldige Wallet-demo-applikaasje sjen. Elkenien kin tokens stjoere nei in dApp-adres. Jo kinne allinne weromlûke jo WAVES. Twa @Callable-funksjes binne beskikber fia InvokeScriptTransaction:

  • deposit()dy't fereasket in taheakke betelling yn WAVES
  • withdraw(amount: Int)dy't tokens werombringt

Troch de dApp-libbenssyklus sil de struktuer (adres → bedrach) wurde hanthavene:

Aksje
Resultaat steat

earste
leech

Alice ôfsettings 5 ​​WAVES
alice-adres → 500000000

Bob ôfsettings 2 WAVES

alice-adres → 500000000
bob-adres → 200000000

Bob lûkt 7 WAVES werom
DENIED!

Alice lûkt 4 WAVES werom
alice-adres → 100000000
bob-adres → 200000000

Hjir is de koade om de situaasje folslein te begripen:

# 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

Sample koade is ek te finen op GitHub.

De VSCode-plugin stipet trochgeande kompilaasje by it bewurkjen fan in bestân. Dêrom kinne jo altyd flaters kontrolearje yn it ljepblêd PROBLEMEN.

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
As jo ​​​​in oare tekstbewurker wolle brûke by it kompilearjen fan it bestân, brûk dan

surfboard compile ride/wallet.ride

Dit sil in searje fan base64 kompilearre RIDE-koade útfiere.

Testskript foar 'wallet.ride'

Litte wy nei sjen test triem. Oandreaun troch JavaScript's Mocha framework. D'r is in "Foar" funksje en trije tests:

  • "Foar" finansiert meardere akkounts fia MassTransferTransaction, kompilearret it skript en set it yn 'e blockchain.
  • "Kin deponearje" stjoert in InvokeScriptTransaction nei it netwurk, aktivearret de boarch () funksje foar elk fan de twa akkounts.
  • "Kin net weromlûke mear as waard dellein" tests dat gjinien kin stelle oare minsken syn tokens.
  • "Kin deponearje" kontrolearret dat ûntlûken goed wurde ferwurke.

Run tests út Surfboard en analysearje resultaten yn Waves Explorer

Om de test út te fieren, rinne

surfboard test

As jo ​​meardere skripts (Jo moatte bygelyks in apart ynset skript), kinne jo rinne

surfboard test my-scenario.js

Surfboard sil de testbestannen sammelje yn 'e map ./test/ en it skript útfiere op it knooppunt dat is konfigureare yn surfboard.config.json. Nei in pear sekonden sille jo sa'n ding sjen:

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)

Hoera! Tests slagge. Litte wy no ris sjen wat der bart by it brûken fan Waves Explorer: sjoch nei de blokken of plak ien fan de adressen hjirboppe yn it sykjen (bygelyks de oerienkommende wallet#. Dêr kinne jo transaksjeskiednis fine, dApp-status, dekompilearre binêre triem.

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
Waves Explorer. In applikaasje dy't krekt ynset is.

Guon Surfboard Tips:

1. Om te testen yn 'e testnet-omjouwing, brûk:

surfboard test --env=testnet

Get test tokens

2. As jo ​​de JSON-ferzjes fan transaksjes sjen wolle en hoe't se troch it knooppunt ferwurke wurde, útfiere de test mei -v (betsjut 'verbose'):

surfboard test -v

Mei help fan apps mei Waves Keeper

1. Stel Waves Keeper yn om te wurkjen: http://localhost:6869

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
Waves Keeper ynstelle om te wurkjen mei in lokale knooppunt

2. Geheime frase ymportearje mei tokens foar it netwurk? Brûk foar ienfâld it earste sied fan jo knooppunt: waves private node seed with waves tokens. Adres: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Jo kinne sels in serverless single-side-applikaasje útfiere mei npm. Of gean nei de besteande: chrome-ext.wvservices.com/dapp-wallet.html

4. Fier it slúfadres yn fan 'e testrun (hjirboppe ûnderstreke) yn it dApp-adres tekstfak

5. Fier in lyts bedrach yn yn it fjild "Boarchsom" en klikje op de knop:

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
Waves Keeper freget tastimming om in InvokeScriptTransaksje te ûndertekenjen mei betelling fan 10 WAVES.

6. Befêstigje de transaksje:

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
De transaksje wurdt makke en útstjoerd nei it netwurk. No kinne jo har ID sjen

7. Monitor de transaksje mei help fan Waves Explorer. Fier ID yn it sykfjild

Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp

Konklúzjes en oanfoljende ynformaasje

Wy seagen nei de ark foar it ûntwikkeljen, testen, ynsetten en brûken fan ienfâldige dApps op it Waves-platfoarm:

  • RIDE taal
  • VS Code Editor
  • Waves Explorer
  • Surfplankje
  • Waves Keeper

Keppelings foar dyjingen dy't trochgean wolle leare RIDE:

Mear foarbylden
Online IDE mei foarbylden
Waves Documentation
Developer chat yn Telegram
Wellen en RIDE op stackoverflow
NIJ! Online kursussen oer it meitsjen fan dApps op it Waves Platform

Trochgean mei dûken yn it RIDE-ûnderwerp en meitsje jo earste dApp!

TL; DR: bit.ly/2YCFnwY

Boarne: www.habr.com

Add a comment