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.
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.
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:
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:
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.
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:
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:
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
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.
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.
Wellen Explorer. Eng Applikatioun déi just ofgesat gouf.
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.