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.
2. Surfboard-Befehlszeilentool
- Laden Sie Node.js hier mit ppa, homebrew oder exe herunter und installieren Sie es: .
- 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 .
Laden Sie Visual Studio Code herunter und installieren Sie es:
Öffnen Sie VS Code und installieren Sie das Waves-Ride-Plugin:

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

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 . 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 erfordertwithdraw(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() = falseBeispielcode finden Sie auch unter .
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 . 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:
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 (bedeutet „ausführlich“) aus:
surfboard test -v
Verwenden von Apps mit Waves Keeper
1. Richten Sie Waves Keeper so ein, dass es funktioniert:

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.
3. Sie können mit npm selbst eine serverlose Einzelseitenanwendung ausführen. Oder gehen Sie zum bestehenden:
4. Geben Sie die Wallet-Adresse aus dem Testlauf (oben unterstrichen) in das Textfeld der dApp-Adresse ein
5. Geben Sie einen kleinen Betrag in das Feld „Einzahlung“ ein und klicken Sie auf die Schaltfläche:

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

Die Transaktion wird erstellt und an das Netzwerk gesendet. Jetzt können Sie ihren Ausweis sehen
7. Überwachen Sie die Transaktion mit Waves Explorer. Geben Sie die ID in das Suchfeld ein

Schlussfolgerungen und zusätzliche Informationen
Wir haben uns die Tools zum Entwickeln, Testen, Bereitstellen und Verwenden einfacher dApps auf der Waves-Plattform angesehen:
- RIDE-Sprache
- VS-Code-Editor
- Wellen-Explorer
- Surfboard
- Wellenhüter
Links für diejenigen, die RIDE weiter lernen möchten:
Tauchen Sie weiter in das RIDE-Thema ein und erstellen Sie Ihre erste dApp!
TL; DR:
Source: habr.com
