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
