ProHoster > Blog > Verwaltung > So erstellen, implementieren und testen Sie die Waves RIDE dApp
So erstellen, implementieren und testen Sie die Waves RIDE dApp
Guten Tag! In diesem Artikel zeige ich Ihnen, wie Sie eine reguläre dApp auf einem Waves-Knoten schreiben und ausführen. Schauen wir uns die notwendigen Tools, Methoden und ein Entwicklungsbeispiel an.
Das Entwicklungsschema für dApps und reguläre Anwendungen ist fast das gleiche:
Wir schreiben den Code
Automatisierte Tests schreiben
Starten der Anwendung
Testen
Werkzeuge
1. docker um den Knoten und den Waves Explorer auszuführen
Wenn Sie keinen Knoten starten möchten, können Sie diesen Schritt überspringen. Schließlich gibt es ein Test- und Experimentiernetzwerk. Ohne die Bereitstellung eines eigenen Knotens kann sich der Testprozess jedoch in die Länge ziehen.
Sie benötigen ständig neue Accounts mit Testtokens. Der Testnetzwerk-Faucet überträgt alle 10 Minuten 10 WELLEN.
Die durchschnittliche Blockzeit im Testnetzwerk beträgt 1 Minute, im Knoten 15 Sekunden. Dies macht sich insbesondere dann bemerkbar, wenn eine Transaktion mehrere Bestätigungen erfordert.
Auf öffentlichen Testknoten ist aggressives Caching möglich.
Aufgrund von Wartungsarbeiten können sie auch vorübergehend nicht verfügbar sein.
Von nun an gehe ich davon aus, dass Sie mit Ihrem eigenen Knoten arbeiten.
Installieren Sie Surfboard, ein Tool, mit dem Sie Tests auf einem vorhandenen Knoten 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 Befehlszeilen-Dienstprogramme. Wenn Sie vim verwenden, achten Sie auf das Plugin vim-ride.
Laden Sie Visual Studio Code herunter und installieren Sie es: https://code.visualstudio.com/
Öffnen Sie VS Code und installieren Sie das Waves-Ride-Plugin:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Stellen Sie sicher, dass der Knoten über die REST-API in gestartet wird http://localhost:6869:
Swagger REST API für Knoten
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 http://localhost:3000. Sie werden sehen, wie schnell ein leerer lokaler Knotenkreis aufgebaut wird.
Waves Explorer zeigt eine lokale Knoteninstanz an
RIDE-Struktur und Surfbrett-Werkzeug
Erstellen Sie ein leeres Verzeichnis und führen Sie den Befehl darin aus
surfboard init
Der Befehl initialisiert ein Verzeichnis mit der Projektstruktur, „Hallo Welt“-Anwendungen 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 sich der dApp-Code befindet. Im nächsten Block werden wir dApps kurz analysieren.
Unter dem Ordner ./test/ finden Sie eine *.js-Datei. Tests werden hier gespeichert.
./surfboard.config.json – Konfigurationsdatei zum Ausführen von Tests.
Envs ist ein wichtiger Abschnitt. Jede Umgebung ist wie folgt konfiguriert:
REST-API-Endpunkt des Knotens, der zum Starten der dApp und CHAIN_ID des Netzwerks verwendet wird.
Eine geheime Phrase für ein Konto mit Token, die als Quelle für Ihre Test-Token dienen.
Wie Sie sehen, unterstützt surfboard.config.json standardmäßig mehrere Umgebungen. Der Standardwert ist die lokale Umgebung (der defaultEnv-Schlüssel ist ein änderbarer Parameter).
Wallet-Demo-Anwendung
Dieser Abschnitt ist kein Verweis auf die RIDE-Sprache. Vielmehr ist es ein Blick auf die Anwendung, die wir bereitstellen und testen, um besser zu verstehen, was in der Blockchain passiert.
Schauen wir uns eine einfache Wallet-Demoanwendung an. Jeder kann Token an eine dApp-Adresse senden. Sie können Ihre WAVES nur abheben. Zwei @Callable-Funktionen sind über InvokeScriptTransaction verfügbar:
deposit()was eine angehängte Zahlung in WAVES erfordert
withdraw(amount: Int)was Token zurückgibt
Während des gesamten dApp-Lebenszyklus bleibt die Struktur (Adresse → Betrag) erhalten:
Action
Resultierender Zustand
Anfangs-
leer
Alice zahlt 5 WAVES ein
Alice-Adresse → 500000000
Bob zahlt 2 WAVES ein
Alice-Adresse → 500000000
Bob-Adresse → 200000000
Bob zieht 7 WELLEN zurück
BESTRITTEN!
Alice zieht 4 WELLEN zurück
Alice-Adresse → 100000000
Bob-Adresse → 200000000
Hier ist der Code, um die Situation vollständig zu verstehen:
# 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
Das VSCode-Plugin unterstützt die kontinuierliche Kompilierung während der Bearbeitung einer Datei. Daher können Sie Fehler jederzeit auf der Registerkarte PROBLEME überwachen.
Wenn Sie beim Kompilieren der Datei einen anderen Texteditor verwenden möchten, verwenden Sie
surfboard compile ride/wallet.ride
Dadurch wird eine Reihe von Base64-kompiliertem RIDE-Code ausgegeben.
Testskript für „wallet.ride“
Schauen wir uns an Testdatei. Unterstützt durch das Mocha-Framework von JavaScript. Es gibt eine „Vorher“-Funktion und drei Tests:
„Bevor“ mehrere Konten über MassTransferTransaction auflädt, kompiliert das Skript und stellt es in der Blockchain bereit.
„Kann einzahlen“ sendet eine InvokeScriptTransaction an das Netzwerk und aktiviert die Funktion „deposit()“ für jedes der beiden Konten.
„Kann nicht mehr abheben, als eingezahlt wurde“ testet, dass niemand die Token anderer Leute stehlen kann.
„Kann einzahlen“ prüft, ob Auszahlungen korrekt verarbeitet werden.
Führen Sie Tests von Surfboard aus durch und analysieren Sie die Ergebnisse im Waves Explorer
Um den Test auszuführen, führen Sie ihn aus
surfboard test
Wenn Sie über mehrere Skripts verfügen (z. B. benötigen Sie ein separates Bereitstellungsskript), können Sie diese ausführen
surfboard test my-scenario.js
Surfboard sammelt die Testdateien im Ordner ./test/ und führt das Skript auf dem Knoten aus, der in surfboard.config.json konfiguriert ist. Nach ein paar Sekunden sehen Sie etwa Folgendes:
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)
Hurra! Tests bestanden. Schauen wir uns nun an, was passiert, wenn Sie Waves Explorer verwenden: Schauen Sie sich die Blöcke an oder fügen Sie eine der oben genannten Adressen in die Suche ein (z. B. die entsprechende wallet#. Dort finden Sie den Transaktionsverlauf, den dApp-Status und die dekompilierte Binärdatei.
Wellen-Explorer. Eine Anwendung, die gerade bereitgestellt wurde.
Einige Surfbrett-Tipps:
1. Um in der Testnet-Umgebung zu testen, verwenden Sie:
2. Wenn Sie die JSON-Versionen von Transaktionen und deren Verarbeitung durch den Knoten sehen möchten, führen Sie den Test mit -v (bedeutet „ausführlich“) aus:
Einrichten von Waves Keeper für die Arbeit mit einem lokalen Knoten
2. Geheimphrase mit Token für das Netzwerk importieren? Verwenden Sie der Einfachheit halber den ursprünglichen Startwert Ihres Knotens: waves private node seed with waves tokens. Adresse: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.