Wéi bauen, deployéieren an testen Wellen RIDE dApp

Hallo! An dësem Artikel weisen ech Iech wéi Dir e reegelméissegen dApp op engem Waves Node schreift an ausféiert. Loosst eis déi néideg Tools, Methoden an e Beispill vun der Entwécklung kucken.

Wéi bauen, deployéieren an testen Wellen RIDE dApp

Den Entwécklungsschema fir dApps a regelméisseg Uwendungen ass bal d'selwecht:

  • Mir schreiwen de Code
  • Schreiwen automatiséiert Testen
  • D'Applikatioun starten
  • Testen

Tools

1. docker fir den Node a Waves Explorer ze lafen

Wann Dir keen Node wëllt starten, kënnt Dir dëse Schrëtt iwwersprangen. No allem gëtt et en Test- an experimentellen Netzwierk. Awer ouni Ären eegene Node z'installéieren, kann den Testprozess weider zéien.

  • Dir wäert dauernd nei Konte mat Test Tokens brauchen. Den Testnetzkran transferéiert 10 WAVES all 10 Minutten.
  • Déi duerchschnëttlech Blockzäit am Testnetz ass 1 Minutt, am Node - 15 Sekonnen. Dëst ass besonnesch bemierkbar wann eng Transaktioun verschidde Bestätegunge erfuerdert.
  • Aggressiv Caching ass méiglech op ëffentlechen Testknoten.
  • Si kënnen och temporär net verfügbar sinn wéinst Ënnerhalt.

Vun elo un huelen ech un datt Dir mat Ärem eegene Node schafft.

2. Surfbrett Kommando Linn Tool

  • Luet an installéiert Node.js mat ppa, homebrew oder exe hei: https://nodejs.org/en/download/.
  • Installéiert Surfboard, en Tool dat Iech erlaabt Tester op engem existente Node auszeféieren.

npm install -g @waves/surfboard

3. Visual Studio Code Plugin

Dëse Schrëtt ass fakultativ wann Dir kee Fan vun IDEs sidd a léiwer Texteditoren. All déi néideg Tools sinn Kommandozeil Utilities. Wann Dir vim benotzt, oppassen op de Plugin vim-fueren.

Download an installéiert Visual Studio Code: https://code.visualstudio.com/

Open VS Code an installéiert de Waves-ride Plugin:

Wéi bauen, deployéieren an testen Wellen RIDE dApp

Waves Keeper Browser Extensioun: https://wavesplatform.com/products-keeper

Gemaach!

Lancéiere den Node a Waves Explorer

1. Start den Node:

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

Vergewëssert Iech datt den Node iwwer de REST API gestart gëtt http://localhost:6869:

Wéi bauen, deployéieren an testen Wellen RIDE dApp
Swagger REST API fir Node

2. Start eng Instanz vu Waves Explorer:

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

Öffnen e Browser a gitt op http://localhost:3000. Dir wäert gesinn wéi séier eng eidel lokal Node Circuit gebaut ass.

Wéi bauen, deployéieren an testen Wellen RIDE dApp
Waves Explorer weist eng lokal Node Instanz

RIDE Struktur a Surfboard Tool

Erstellt en eidele Verzeichnis a lafen de Kommando dran

surfboard init

De Kommando initialiséiert e Verzeechnes mat der Projektstruktur, "Hallo Welt" Uwendungen an Tester. Wann Dir dësen Dossier mam VS Code opmaacht, gesitt Dir:

Wéi bauen, deployéieren an testen Wellen RIDE dApp
Surfboard.config.json

  • Ënnert dem Dossier ./ride/ fannt Dir eng eenzeg Datei wallet.ride - den Dossier wou den dApp Code läit. Mir analyséieren dApps am nächste Block kuerz.
  • Ënnert dem Dossier ./test/ fannt Dir eng *.js Datei. Tester ginn hei gespäichert.
  • ./surfboard.config.json - Konfiguratiounsdatei fir Tester ze lafen.

Envs ass eng wichteg Sektioun. All Ëmfeld ass esou konfiguréiert:

  • REST API Endpunkt vum Node deen benotzt gëtt fir d'dApp an d'CHAIN_ID vum Netz ze starten.
  • E geheime Saz fir e Kont mat Tokens déi d'Quell vun Ären Test Tokens sinn.

Wéi Dir gesitt, ënnerstëtzt surfboard.config.json verschidde Ëmfeld par défaut. De Standard ass dat lokalt Ëmfeld (de StandardEnv Schlëssel ass e verännerbare Parameter).

Portemonnaie-Demo Applikatioun

Dës Sektioun ass keng Referenz op d'RIDE Sprooch. Éischter e Bléck op d'Applikatioun déi mir ofsetzen an testen fir besser ze verstoen wat an der Blockchain geschitt.

Loosst eis eng einfach Portemonnaie-Demo Applikatioun kucken. Jiddereen kann Tokens op eng dApp Adress schécken. Dir kënnt nëmmen Är WAVES zréckzéien. Zwee @Callable Funktiounen sinn iwwer InvokeScriptTransaction verfügbar:

  • deposit()déi eng befestegt Bezuelung a WAVES erfuerdert
  • withdraw(amount: Int)déi Tokens zréckginn

Während dem dApp Liewenszyklus gëtt d'Struktur (Adress → Betrag) erhale bleiwen:

Aktiounen
Resultéiert Staat

initial
eidel

Alice Dépôten 5 WAVES
alice-Adress → 500000000

Bob Dépôten 2 WAVES

alice-Adress → 500000000
bob-Adress → 200000000

Bob entzu 7 WAVES
VERLECHT!

Alice zitt 4 WAVES zréck
alice-Adress → 100000000
bob-Adress → 200000000

Hei ass de Code fir d'Situatioun voll ze verstoen:

# 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 Code kann och fonnt ginn op GitHub.

De VSCode Plugin ënnerstëtzt kontinuéierlech Kompiléierung beim Änneren vun enger Datei. Dofir kënnt Dir ëmmer Fehler iwwerwaachen an der PROBLEMEN Tab.

Wéi bauen, deployéieren an testen Wellen RIDE dApp
Wann Dir en aneren Texteditor benotze wëllt wann Dir d'Datei kompiléiert, benotzt

surfboard compile ride/wallet.ride

Dëst wäert eng Serie vu base64 kompiléierten RIDE Code erausginn.

Testskript fir 'wallet.ride'

Loosst eis kucken Testdatei. Powered vum JavaScript's Mocha Kader. Et gëtt eng "Virun" Funktioun an dräi Tester:

  • "Virun" finanzéiert verschidde Konten iwwer MassTransferTransaction, kompiléiert de Skript an deployéiert et op de Blockchain.
  • "Kann deposéieren" schéckt eng InvokeScriptTransaction an d'Netz, aktivéiert d'Depot () Funktioun fir jiddereng vun den zwee Konten.
  • "Kann net méi zréckzéien wéi deposéiert gouf" Tester datt keen anere Leit seng Tokens klauen kann.
  • "Kann deposéieren" kontrolléiert datt d'Ausbezuelung richteg veraarbecht ginn.

Run Tester vum Surfboard an analyséiert Resultater am Waves Explorer

Fir den Test ze lafen, lafen

surfboard test

Wann Dir e puer Skripte hutt (zum Beispill, Dir braucht e separaten Deployment Skript), kënnt Dir lafen

surfboard test my-scenario.js

Surfboard sammelt d'Testdateien am ./test/ Dossier a leeft de Skript op den Node deen am surfboard.config.json konfiguréiert ass. No e puer Sekonnen gesitt Dir eppes wéi dat:

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)

Hour! Tester passéiert. Loosst eis elo kucken wat geschitt wann Dir Waves Explorer benotzt: kuckt op d'Blöcke oder paste eng vun den Adressen uewen an d'Sich (zum Beispill déi entspriechend wallet#. Do fannt Dir Transaktiounsgeschicht, dApp Status, dekompiléiert binär Datei.

Wéi bauen, deployéieren an testen Wellen RIDE dApp
Wellen Explorer. Eng Applikatioun déi just ofgesat gouf.

E puer Surfboard Tipps:

1. Fir am Testnet Ëmfeld ze testen, benotzt:

surfboard test --env=testnet

Kritt Test Tokens

2. Wann Dir d'JSON Versioune vun Transaktiounen gesinn wëllt a wéi se vum Node veraarbecht ginn, lafen den Test mat -v (heescht 'verbose'):

surfboard test -v

Benotzt Apps mat Waves Keeper

1. Waves Keeper opsetzen fir ze schaffen: http://localhost:6869

Wéi bauen, deployéieren an testen Wellen RIDE dApp
Waves Keeper opsetzen fir mat engem lokalen Node ze schaffen

2. Import geheime Saz mat Tokens fir de Reseau? Fir Einfachheet, benotzt den initialen Som vun Ärem Node: waves private node seed with waves tokens... D'Adress: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Dir kënnt eng serverlos Single-Säit-Applikatioun selwer mat npm lafen. Oder gitt op déi existent: chrome-ext.wvservices.com/dapp-wallet.html

4. Gitt d'Portemonnaie Adress aus dem Test Laf (ënnersträicht uewen) an dApp Adress Text Këscht

5. Gitt e klenge Betrag am Feld "Depot" a klickt op de Knäppchen:

Wéi bauen, deployéieren an testen Wellen RIDE dApp
Waves Keeper freet Erlaabnis fir eng InvokeScriptTransaktioun mat Bezuelung vun 10 WAVES z'ënnerschreiwen.

6. Bestätegt d'Transaktioun:

Wéi bauen, deployéieren an testen Wellen RIDE dApp
D'Transaktioun gëtt erstallt an am Netz iwwerdroen. Elo kënnt Dir hir ID gesinn

7. Iwwerwaacht d'Transaktioun mat Waves Explorer. Gitt ID am Sichfeld

Wéi bauen, deployéieren an testen Wellen RIDE dApp

Conclusiounen an zousätzlech Informatiounen

Mir hunn d'Tools gekuckt fir d'Entwécklung, Testen, Deployéieren an einfachen dApps op der Waves Plattform ze benotzen:

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

Links fir déi, déi weider wëllen RIDE léieren:

Méi Beispiller
Online IDE mat Beispiller
Wellen Dokumentatioun
Entwéckler Chat am Telegram
Wellen a RIDE op Stackoverflow
NEI! Online Coursen fir dApps op der Waves Plattform ze kreéieren

Fuert weider an d'RIDE Thema an erstellt Är éischt dApp!

TL; DR: bit.ly/2YCFnwY

Source: will.com

Setzt e Commentaire