Hallo! In diesem Artikel zeige ich Ihnen, wie Sie eine einfache dApp auf der Waves-Node schreiben und ausführen. Wir betrachten die notwendigen Werkzeuge, Methoden und ein Beispiel für die Entwicklung.

Das Schema zur Entwicklung von dApps und herkömmlichen Anwendungen unterscheidet sich kaum:
- Code schreiben
- Automatisierte Tests erstellen
- Starten Sie die Anwendung
- Testen
Werkzeuge
1. docker zum Starten der Node und des Waves Explorers
Wenn Sie die Node nicht starten möchten, können Sie diesen Schritt überspringen. Es gibt jedoch ein Testnetzwerk und ein experimentelles Netzwerk. Ohne Ihre eigene Node könnte der Testprozess sich jedoch verzögern.
- Sie benötigen ständig neue Konten mit Test-Token. Der Faucet des Testnetzwerks überweist alle 10 Minuten 10 WAVES.
- Die durchschnittliche Zeit für Blöcke im Testnetzwerk beträgt 1 Minute, auf der Node 15 Sekunden. Dies ist besonders spürbar, wenn eine Transaktion mehrere Bestätigungen erfordert.
- In öffentlichen Test-Nodes kann aggressives Caching auftreten.
- Außerdem können sie vorübergehend aufgrund technischer Wartungsarbeiten nicht verfügbar sein.
Ich werde davon ausgehen, dass Sie mit Ihrer eigenen Node arbeiten.
2. Surfboard Kommandozeilen-Tool
- Laden Sie Node.js über ppa, homebrew oder exe hier herunter und installieren Sie es: .
- Installieren Sie Surfboard – ein Tool, mit dem Sie Tests auf einer bestehenden Node ausführen können.
npm install -g @waves/surfboard
3. Visual Studio Code Plugin
Dieser Schritt ist optional, wenn Sie kein Fan von IDEs sind und Texteditoren bevorzugen. Alle notwendigen Tools sind Kommandozeilen-Utilities. Wenn Sie vim verwenden, achten Sie auf das Plugin .
Laden Sie Visual Studio Code herunter und installieren Sie es:
Öffnen Sie VS Code und installieren Sie das Plugin waves-ride:

Browsererweiterung Waves Keeper:
Fertig!
Starten Sie den Node und Waves Explorer
1. Starten Sie den Node:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Stellen Sie sicher, dass der Node über die REST API gestartet wird in :

Swagger REST API Interface für den Node
2. Starten Sie eine Instanz von Waves Explorer:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Öffnen Sie Ihren Browser und gehen Sie zu . Sie werden sehen, wie schnell eine leere Kette auf dem lokalen Node aufgebaut wird.

Waves Explorer zeigt eine Instanz des lokalen Nodes an
RIDE-Struktur und das Tool Surfboard
Erstellen Sie ein leeres Verzeichnis und führen Sie darin den Befehl aus
surfboard init
Der Befehl initialisiert das Verzeichnis mit der Projektstruktur, einer "Hello World"-Anwendung und Tests. Wenn Sie diesen Ordner mit VS Code öffnen, sehen Sie:

Surfboard.config.json
- Unter dem Ordner ./ride/ finden Sie eine einzelne Datei wallet.ride – das Verzeichnis, in dem der Code der dApp abgelegt ist. Wir werden die dApp im nächsten Abschnitt kurz analysieren.
- Im Verzeichnis ./test/ finden Sie die Datei *.js. Hier werden die Tests gespeichert.
- ./surfboard.config.json – die Konfigurationsdatei zum Ausführen der Tests.
Envs – ein wichtiger Abschnitt. Jede Umgebung wird wie folgt konfiguriert:
- Der REST API-Endpunkt der Node, der verwendet wird, um dApp und den CHAIN_ID der Netzwerk zu starten.
- Der geheime Schlüssel für das Konto mit den Tokens, die als Quellen für Ihre Tests dienen.
Wie Sie sehen, unterstützt surfboard.config.json standardmäßig mehrere Umgebungen. Die lokale Umgebung ist standardmäßig eingestellt (der Schlüssel defaultEnv ist ein variabler Parameter).
Wallet-Demo-Anwendung
Dieser Abschnitt ist kein Handbuch für die RIDE-Sprache. Vielmehr bietet er einen Einblick in die Anwendung, die wir bereitstellen und testen, um besser zu verstehen, was in der Blockchain passiert.
Betrachten wir die einfache Anwendung Wallet-Demo. Jeder kann Tokens an die dApp-Adresse senden. Es können jedoch nur eigene WAVES abgehoben werden. Zwei @Callable-Funktionen sind über InvokeScriptTransaction verfügbar:
deposit(), die eine angehängte Zahlung in WAVES erfordert.withdraw(amount: Int), die Tokens zurückgibt.
Im gesamten Lebenszyklus der dApp wird die Struktur (address → amount) beibehalten:
Aktionen
Ergebnisstatus
initial
leer
Alice hinterlegt 5 WAVES
alice-address → 500000000
Bob hinterlegt 2 WAVES
alice-address → 500000000
bob-address → 200000000
Bob hebt 7 WAVES ab
ABGELEHNT!
Alice hebt 4 WAVES ab
alice-address → 100000000
bob-address → 200000000
Hier ist der Code für ein vollständiges Verständnis der Situation:
# 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() = falseBeispielcode ist auch verfügbar unter .
Das VSCode-Plugin unterstützt die kontinuierliche Kompilierung während der Bearbeitung einer Datei. So können Sie immer die Fehler im Tab PROBLEMS verfolgen.

Wenn Sie einen anderen Texteditor für die Kompilierung der Datei verwenden möchten, nutzen Sie
surfboard compile ride/wallet.ride
Das gibt eine Reihe von base64 kompiliertem RIDE-Code aus.
Testskript für 'wallet.ride'
Lassen Sie uns einen Blick auf . Es läuft auf dem JavaScript-Framework Mocha. Es gibt eine "Before"-Funktion und drei Tests:
- "Before" finanziert mehrere Konten über eine MassTransferTransaction, kompiliert das Skript und deployt es in die Blockchain.
- "Can deposit" sendet eine InvokeScriptTransaction, die die Funktion deposit() für jedes der beiden Konten aktiviert.
- "Can’t withdraw more than was deposited" testet, dass niemand fremde Token stehlen kann.
- "Can deposit" prüft, dass Auszahlungen korrekt verarbeitet werden.
Führen Sie die Tests mit Surfboard aus und analysieren Sie die Ergebnisse im Waves Explorer
Um den Test auszuführen, geben Sie ein
surfboard test
Wenn Sie mehrere Skripte haben (z. B. ein separates Deployment-Skript benötigen), können Sie es starten
surfboard test my-scenario.js
Surfboard erstellt Testdateien im Verzeichnis ./test/ und führt das Skript auf dem Knoten aus, der in surfboard.config.json konfiguriert ist. Nach einigen Sekunden sollten Sie etwas Ähnliches sehen:
Wallet-Test-Suite
Konten werden mit Nonce generiert: ce8d86ee
Konto erstellt: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Konto erstellt: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Konto erstellt: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Konten erfolgreich finanziert
Skript wurde festgelegt
√ Einzahlung möglich (4385ms)
√ Es kann nicht mehr abgehoben werden als eingezahlt
√ Abhebung möglich (108ms)
3 bestanden (15s)
Hurra! Die Tests sind bestanden. Schauen wir uns an, was passiert, wenn wir den Waves Explorer verwenden: Wir durchstöbern die Blöcke oder fügen eine der oben genannten Adressen in die Suche ein (zum Beispiel die passende wallet#. Hier finden Sie die Transaktionshistorie, den Status der dApp, die dekompilierte Binärdatei.

Waves Explorer. Eine Anwendung, die gerade bereitgestellt wurde.
Einige Tipps zu Surfboard:
1. Um in der Testnet-Umgebung zu testen, verwenden Sie:
surfboard test --env=testnet
2. Wenn Sie die JSON-Versionen von Transaktionen und deren Verarbeitung durch den Knoten sehen möchten, führen Sie den Test mit -v aus (steht für 'verbose'):
surfboard test -v
Verwendung von Anwendungen mit Waves Keeper
1. Konfigurieren Sie Waves Keeper für die Nutzung:

Einrichtung von Waves Keeper für die Verwendung mit einem lokalen Knoten
2. Importieren Sie den geheimen Satz mit den Token für das Netzwerk? Zur Einfachheit verwenden Sie den Start-Seed Ihres Knotens: Waves privater Knoten Seed mit Waves-Token. Adresse: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.
3. Sie können selbst eine einseitige serverlose Anwendung starten, indem Sie npm verwenden. Oder gehen Sie zu einer bestehenden:
4. Geben Sie die Adresse aus dem Testlauf (oberhalb hervorgehoben) in das Adressfeld der dApp ein
5. Tragen Sie einen kleinen Betrag im Feld "Einzahlung" ein und klicken Sie auf die Schaltfläche:

Waves Keeper fordert die Erlaubnis an, um eine InvokeScriptTransaction mit einer Zahlung von 10 WAVES zu signieren.
6. Bestätigen Sie die Transaktion:

Transaktion erstellt und wird ins Netzwerk übertragen. Jetzt ist ihre ID sichtbar
7. Beobachten Sie die Transaktion mit dem Waves Explorer. Geben Sie die ID in das Suchfeld ein

Zusammenfassungen und zusätzliche Informationen
Wir haben die Werkzeuge für Entwicklung, Test, Bereitstellung und Nutzung einfacher dApps auf der Waves-Plattform betrachtet:
- RIDE Sprache
- VS Code-Editor
- Waves Explorer
- Surfboard
- Waves Keeper
Links für diejenigen, die RIDE weiter erkunden möchten:
Vertiefen Sie Ihr Wissen über RIDE und erstellen Sie Ihre erste dApp!
TL;DR:
Quelle: habr.com
