Wie man die Waves RIDE dApp erstellt, implementiert und testet

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.

Wie man die Waves RIDE dApp erstellt, implementiert und testet

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: https://nodejs.org/en/download/.
  • 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 vim-ride.

Laden Sie Visual Studio Code herunter und installieren Sie es: https://code.visualstudio.com/

Öffnen Sie VS Code und installieren Sie das Plugin waves-ride:

Wie man die Waves RIDE dApp erstellt, implementiert und testet

Browsererweiterung Waves Keeper: https://wavesplatform.com/products-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 http://localhost:6869:

Wie man die Waves RIDE dApp erstellt, implementiert und testet
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 http://localhost:3000. Sie werden sehen, wie schnell eine leere Kette auf dem lokalen Node aufgebaut wird.

Wie man die Waves RIDE dApp erstellt, implementiert und testet
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:

Wie man die Waves RIDE dApp erstellt, implementiert und testet
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() = false

Beispielcode ist auch verfügbar unter GitHub.

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.

Wie man die Waves RIDE dApp erstellt, implementiert und testet
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 die Testdatei. 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.

Wie man die Waves RIDE dApp erstellt, implementiert und testet
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

Test-Tokens anfordern

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: http://localhost:6869

Wie man die Waves RIDE dApp erstellt, implementiert und testet
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: chrome-ext.wvservices.com/dapp-wallet.html

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:

Wie man die Waves RIDE dApp erstellt, implementiert und testet
Waves Keeper fordert die Erlaubnis an, um eine InvokeScriptTransaction mit einer Zahlung von 10 WAVES zu signieren.

6. Bestätigen Sie die Transaktion:

Wie man die Waves RIDE dApp erstellt, implementiert und testet
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

Wie man die Waves RIDE dApp erstellt, implementiert und testet

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:

Mehr Beispiele
Online-IDE mit Beispielen
Waves-Dokumentation
Entwickler-Chat in Telegram
Waves und RIDE auf StackOverflow
NEU! Online-Kurse zur Erstellung von dApps auf der Waves Platform

Vertiefen Sie Ihr Wissen über RIDE und erstellen Sie Ihre erste dApp!

TL;DR: bit.ly/2YCFnwY

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster