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.

So erstellen, implementieren und testen Sie die Waves RIDE dApp

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

So erstellen, implementieren und testen Sie die Waves RIDE dApp

Waves Keeper-Browsererweiterung: https://wavesplatform.com/products-keeper

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

So erstellen, implementieren und testen Sie die Waves RIDE dApp
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.

So erstellen, implementieren und testen Sie die Waves RIDE dApp
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:

So erstellen, implementieren und testen Sie die Waves RIDE dApp
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

Beispielcode finden Sie auch unter GitHub.

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.

So erstellen, implementieren und testen Sie die Waves RIDE dApp
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.

So erstellen, implementieren und testen Sie die Waves RIDE dApp
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

Holen Sie sich Testtokens

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

So erstellen, implementieren und testen Sie die Waves RIDE dApp
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: chrome-ext.wvservices.com/dapp-wallet.html

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:

So erstellen, implementieren und testen Sie die Waves RIDE dApp
Waves Keeper bittet um Erlaubnis, eine InvokeScriptTransaction mit der Zahlung von 10 WAVES zu signieren.

6. Bestätigen Sie die Transaktion:

So erstellen, implementieren und testen Sie die Waves RIDE dApp
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

So erstellen, implementieren und testen Sie die Waves RIDE dApp

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:

Mehr Beispiele
Online-IDE mit Beispielen
Waves-Dokumentation
Entwickler-Chat in Telegram
Wellen und RIDE auf Stackoverflow
NEU! Online-Kurse zum Erstellen von dApps auf der Waves-Plattform

Tauchen Sie weiter in das RIDE-Thema ein und erstellen Sie Ihre erste dApp!

TL; DR: bit.ly/2YCFnwY

Source: habr.com

Kommentar hinzufügen