Hallo! In diesem Artikel zeige ich Ihnen, wie Sie einen einfachen dApp auf der Waves-Node schreiben und ausfĂŒhren können. Wir betrachten die erforderlichen Tools, Methoden und ein Entwicklungsbeispiel.

Das Schema fĂŒr die Entwicklung von dApps und Standardanwendungen unterscheidet sich kaum:
- Wir schreiben Code
- Wir schreiben automatisierte Tests
- Starten Sie die Anwendung
- Wir testen
Werkzeuge
1. docker fĂŒr die AusfĂŒhrung der Node und Waves Explorer
Wenn Sie die Node nicht starten möchten, können Sie diesen Schritt ĂŒberspringen. Es gibt schlieĂlich ein Test- und ein Experimentennetzwerk. Aber ohne die Bereitstellung Ihrer eigenen Node kann der Testprozess sich in die LĂ€nge ziehen.
- Sie werden stĂ€ndig neue Konten mit Test-Token benötigen. Der Testnetz-Kran ĂŒberweist alle 10 Minuten 10 WAVES.
- Die durchschnittliche Blockzeit im Testnetz betrĂ€gt 1 Minute, in der Node 15 Sekunden. Dies ist besonders spĂŒrbar, wenn eine Transaktion mehrere BestĂ€tigungen benötigt.
- Ăffentliche Testnodes können aggressives Caching betreiben.
- AuĂerdem können sie aufgrund von Wartungsarbeiten vorĂŒbergehend nicht verfĂŒgbar sein.
Ich werde kĂŒnftig davon ausgehen, dass Sie mit Ihrer eigenen Node arbeiten.
2. Surfboard-Befehlszeilentool
- 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 vorhandenen Node ausfĂŒhren können.
npm install -g @waves/surfboard
3. Visual Studio Code Plugin
Dieser Schritt ist nicht obligatorisch, wenn Sie kein Fan von IDEs sind und Texteditoren bevorzugen. Alle erforderlichen Tools sind Befehlszeilen-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:

BrowserergÀnzung Waves Keeper:
Fertig!
Starten Sie die Node und Waves Explorer
1. Starten Sie die Node:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Stellen Sie sicher, dass die Node ĂŒber die REST API in :

Swagger REST API-Interface fĂŒr die 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 einen Browser und gehen Sie zu . Sie werden sehen, wie schnell eine leere Kette der lokalen Node aufgebaut wird.

Waves Explorer zeigt die Instanz der lokalen Node an
Die Struktur von RIDE und das Werkzeug 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
- Im Verzeichnis ./ride/ finden Sie eine einzelne Datei wallet.ride â das Verzeichnis, in dem der dApp-Code gespeichert ist. Wir werden dApp im nĂ€chsten Abschnitt kurz analysieren.
- Unter dem Ordner .\/test\/ finden Sie die Datei *.js. Hier werden die Tests gespeichert.
- .\/surfboard.config.json â die Konfigurationsdatei zum AusfĂŒhren von Tests.
Envs â ein wichtiger Abschnitt. Jede Umgebung wird so konfiguriert:
- Die REST API-Endpunktadresse, die verwendet wird, um dApp und das CHAIN_ID des Netzwerks zu starten.
- Der geheimen Satz fĂŒr das Konto mit den Token, die die Quellen fĂŒr Ihre Tests sein werden.
Wie Sie sehen können, unterstĂŒtzt surfboard.config.json standardmĂ€Ăig mehrere Umgebungen. Die lokale Umgebung ist standardmĂ€Ăig eingestellt (SchlĂŒssel defaultEnv â Ă€nderbarer Parameter).
Die Wallet-demo-Anwendung
Dieser Abschnitt ist kein Handbuch zur RIDE-Sprache. Vielmehr ist es ein Blick auf 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 Token an die dApp-Adresse senden. Nur eigene WAVES können ausgezahlt werden. Zwei @Callable-Funktionen sind ĂŒber InvokeScriptTransaction verfĂŒgbar:
deposit(), die eine angehĂ€ngte Zahlung in WAVES erfordertwithdraw(amount: Int), die Tokens zurĂŒckgibt
WĂ€hrend des gesamten Lebenszyklus der dApp wird die Struktur (address â amount) beibehalten:
Aktionen
Resultierender Zustand
anfÀnglich
leer
Alice hinterlegt 5 WAVES
alice-address â 500000000
Bob hinterlegt 2 WAVES
alice-address â 500000000
bob-address â 200000000
Bob zieht 7 WAVES ab
ABGELEHNT!
Alice zieht 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 kann auch auf der .
Der VSCode-Plugin unterstĂŒtzt die kontinuierliche Kompilierung beim Bearbeiten der Datei. Daher können Sie Fehler jederzeit im Tab PROBLEMS verfolgen.

Wenn Sie einen anderen Texteditor zum Kompilieren der Datei verwenden möchten, verwenden Sie
surfboard compile ride\/wallet.ride
Das gibt eine Reihe von base64 kompiliertem RIDE-Code aus.
Test-Szenario fĂŒr âwallet.rideâ
Schauen wir uns die âBeforeâ finanzierte mehrere Konten durch MassTransferTransaction, kompilierte das Skript und stellte es in der Blockchain bereit.
- âKann einzahlenâ sendet InvokeScriptTransaction ins Netzwerk und aktiviert die Funktion deposit() fĂŒr jedes der beiden Konten.
- âKann nicht mehr abheben als eingezahlt wurdeâ testet, dass niemand die Tokens anderer stehlen kann.
- âKann einzahlenâ ĂŒberprĂŒft, dass Auszahlungen korrekt verarbeitet werden.
- Tests mit Surfboard ausfĂŒhren und Ergebnisse im Waves Explorer analysieren.
Um den Test auszufĂŒhren, fĂŒhren Sie aus
surfboard test
Wenn Sie mehrere Szenarien haben (z.B. benötigen Sie ein separates Bereitstellungsskript), können Sie ausfĂŒhren
Wenn Sie mehrere Szenarien haben (z. B. ein separates Bereitstellungsskript benötigen), können Sie es ausfĂŒhren
surfboard test my-scenario.js
Surfboard wird Testdateien im Ordner ./test/ sammeln und das Skript in dem Knoten ausfĂŒhren, der in surfboard.config.json konfiguriert ist. Nach einigen Sekunden werden Sie etwas Ăhnliches sehen:
wallet-Test-Suite
Generiere Konten mit Nonce: ce8d86ee
Konto erstellt: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Konto erstellt: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Konto erstellt: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Konten erfolgreich finanziert
Skript wurde festgelegt
â Kann einzahlen (4385ms)
â Kann nicht mehr abheben, als eingezahlt wurde
â Kann abheben (108ms)
3 bestehen (15s)
Hurra! Die Tests sind bestanden. Lassen Sie uns ansehen, was bei der Verwendung von Waves Explorer passiert: Sehen wir uns die Blöcke an oder geben wir eine der oben genannten Adressen in die Suche ein (zum Beispiel die entsprechende wallet#. Dort 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 im Testnetz zu testen, verwenden Sie:
surfboard test --env=testnet
2. Wenn Sie die JSON-Versionen von Transaktionen sehen möchten und wie sie vom Knoten verarbeitet werden, fĂŒhren Sie den Test mit -v (bedeutet 'verbose') aus:
surfboard test -v
Verwendung von Anwendungen mit Waves Keeper
1. Konfigurieren Sie Waves Keeper fĂŒr den Betrieb:

Einrichtung von Waves Keeper fĂŒr die Arbeit mit einem lokalen Knoten
2. Importieren Sie den geheimen Satz mit Tokens fĂŒr das Netzwerk? Zur Vereinfachung verwenden Sie den ursprĂŒnglichen Seed Ihres Knotens: waves private node seed with waves tokens. Adresse: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.
3. Sie können eine serverlose Einzelanwendungsanwendung selbst starten, indem Sie npm verwenden. Oder gehen Sie zu einem bestehenden:
4. Geben Sie die Wallet-Adresse aus dem Testlauf (oben hervorgehoben) in das Textfeld fĂŒr die dApp-Adresse ein.
5. Geben Sie einen kleinen Betrag in das Feld 'Einzahlung' ein und klicken Sie auf die SchaltflÀche:

Waves Keeper fragt nach Erlaubnis, um die InvokeScriptTransaction mit einer Zahlung von 10 WAVES zu signieren.
6. BestÀtigen Sie die Transaktion:

Die Transaktion wurde erstellt und wird ins Netzwerk ĂŒbertragen. Jetzt ist ihre ID sichtbar.
7. Ăberwachen Sie die Transaktion mit Waves Explorer. Geben Sie die ID in das Suchfeld ein.

Schlussfolgerungen und zusÀtzliche Informationen
Wir haben die Entwicklungs-, Test-, Bereitstellungs- und Nutzungstools fĂŒr einfache dApps auf der Waves-Plattform betrachtet:
- Die RIDE-Sprache
- VS Code-Editor
- Waves Explorer
- Surfboard
- Waves Keeper
Links fĂŒr diejenigen, die RIDE weiter lernen möchten:
Vertiefen Sie sich in das Thema RIDE und erstellen Sie Ihre erste dApp!
TL;DR:
Quelle: habr.com
