Moonbeam
July 17, 2021

Einrichtung eines Moonbeam Node und Verbindung mit der Polkadot JS GUI

Den gesamten relevanten Code für dieses Tutorial finden Sie auf der Seite mit den Code-Snippets

Einführung

In diesem Handbuch werden die Schritte beschrieben, die zum Erstellen eines development node (Entwicklungsnode) zum Testen der Ethereum-Kompatibilitätsfunktionen von Moonbeam erforderlich sind.

Hinweis Dieses Tutorial wurde mit dem tutorial-v7 tag von Moonbase Alpha erstellt. Die Moonbeam Plattform und die Frontier Komponenten, auf die sie für die Substrat-basierte Ethereum-Kompatibilität angewiesen ist, befinden sich noch in sehr aktiver Entwicklung. In den Beispielen in diesem Handbuch wird davon ausgegangen, dass Sie eine auf MacOS oder Ubuntu 18.04 basierende Umgebung haben. Entsprechend für Windows muss angepasst werden.

Ein Moonbeam-development node (Entwicklungsnode) ist Ihre eigene persönliche Entwicklungsumgebung zum Erstellen und Testen von Anwendungen auf Moonbeam. Für Ethereum-Entwickler ist es vergleichbar mit Ganache. Es ermöglicht Ihnen einen schnellen und einfachen Einstieg ohne den Aufwand einer relay chain. Sie können Ihren Noden mit der Option --sealing hochfahren, um Blöcke sofort, manuell oder in einem benutzerdefinierten Intervall nach dem Empfang von Transaktionen zu erstellen. Standardmäßig wird beim Eingang einer Transaktion ein Block erstellt, ähnlich der Instamine-Funktion von Ganache.

Wenn Sie dieser Anleitung folgen, wird in Ihrer lokalen Umgebung ein Moonbeam-development node (Entwicklungsnode) mit 10 pre-funded accounts (vorfinanzierten Konten) ausgeführt und Sie können ihn mit der default (standardmäßigen) Polkadot JS-GUI verbinden.

Es gibt zwei Möglichkeiten, Moonbeam-Node einzurichten: Sie können Docker verwenden, um eine vorgefertigte Binärdatei auszuführen (Docker to run a pre-built binary), oder Sie können die Binärdatei lokal kompilieren (compile the binary locally) und selbst einen development node (Entwicklungsnode) einrichten. Die Verwendung von Docker ist eine schnelle und bequeme Möglichkeit, um loszulegen, da Sie Substrate und alle Abhängigkeiten nicht installieren müssen und auch den Aufbau des Nodenprozesses überspringen können. Sie müssen Docker installieren. Wenn Sie sich entscheiden, Ihren eigenen development node (Entwicklungsnode) zu erstellen, kann dies je nach Hardware etwa 30 Minuten oder länger dauern.

Erste Schritte mit Docker

Mit Docker können Sie einen Node sehr schnell hochfahren. Sobald Sie Docker installiert haben, können Sie den folgenden Befehl ausführen, um das entsprechende Image herunterzuladen:

docker pull purestake/moonbeam:tutorial-v7

Das Ende des Konsolenprotokolls (logs) sollte so aussehen:

Nachdem das Docker-Image heruntergeladen wurde, muss das Image ausgeführt werden.

Sie können das Docker-Image wie folgt ausführen:

Ubuntu:

docker run --rm --name moonbeam_development --network host \
purestake/moonbeam:tutorial-v7 \
--dev

MacOS:

docker run --rm --name moonbeam_development -p 9944:9944 -p 9933:9933 \
purestake/moonbeam:tutorial-v7 \
--dev --ws-external --rpc-external

Windows:

docker run --rm --name moonbeam_development -p 9944:9944 -p 9933:9933 ^
purestake/moonbeam:tutorial-v7 ^
--dev --ws-external --rpc-external

Dies sollte einen Moonbeam-development node (Entwicklungsnode) im Instant-Seal-Modus für lokale Tests hochfahren, sodass Blöcke sofort erstellt werden, wenn Transaktionen empfangen werden. Bei Erfolg sollten Sie den Zustand sehen, der auf die Erstellung der Blöcken wartet:

Weitere Informationen zu einigen der im Beispiel verwendeten Flags und Optionen finden Sie unter Allgemeine Flags und Optionen. Wenn Sie eine vollständige Liste aller Flags, Optionen und Sub-Befehle anzeigen möchten, öffnen Sie das Hilfemenü, indem Sie Folgendes ausführen:

docker run --rm --name moonbeam_development \
purestake/moonbeam \
--help

Um mit dem Tutorial fortzufahren, ist der nächste Abschnitt nicht erforderlich, da Sie bereits einen Node mit Docker erstellt haben. Sie können mit dem Verbinden von Polkadot JS-Apps mit einem lokalen Moonbeam-Node fortfahren (Connecting Polkadot JS Apps to a Local Moonbeam Node).

Erste Schritte mit der Binärdatei

Hinweis Wenn Sie wissen, was Sie tun, können Sie die vorkompilierten Binärdateien, die jeder release beigefügt sind, direkt auf der Moonbeam-release Seite herunterladen. Diese funktionieren nicht in allen Systemen. Die Binärdateien funktionieren beispielsweise nur mit x86-64-Linux mit bestimmten Versionen von Abhängigkeiten (specific versions of dependencies). Der sicherste Weg, die Kompatibilität sicherzustellen, besteht darin, die Binärdatei in dem System zu kompilieren, von dem aus sie ausgeführt wird.

Klonen Sie zunächst ein specific tag des Moonbeam-Repositorys, das Sie hier finden:

https://github.com/PureStake/moonbeam/

git clone -b tutorial-v7 https://github.com/PureStake/moonbeam
cd moonbeam

Als nächstes installieren Sie Substrate und alle seine prerequisites (Voraussetzungen, einschließlich Rust), indem Sie Folgendes ausführen:

curl https://getsubstrate.io -sSf | bash -s -- --fast

Und jetzt build the development node:

cargo build --release

Wenn im Terminal ein Fehler "cargo not found" angezeigt wird, fügen Sie Rust manuell zu Ihrem Systempfad (system path) hinzu (oder starten Sie Ihr System neu):

source $HOME/.cargo/env

Hinweis Der erste Build wird eine Weile dauern. Abhängig von Ihrer Hardware sollten Sie mit ungefähr 30 Minuten rechnen, bis der Build-Prozess abgeschlossen ist.

So sollte das Ende der Build-Ausgabe aussehen:

Dann den Node im Dev-Modus mit dem folgenden Befehl ausführen:

./target/release/moonbeam --dev

Hinweis: Für Personen, die mit Substrate nicht vertraut sind, bietet das Flag --dev eine Möglichkeit, einen Substrate-basierten Node zu Testzwecken in einer Einzelnode Entwicklerkonfiguration auszuführen. In diesem Substrat-Tutorial erfahren Sie mehr über --dev.

Sie sollten eine Ausgabe sehen, die wie folgt aussieht und einen Ruhezustand (idle state) anzeigt, der auf die Erzeugung von Blöcken wartet:

Weitere Informationen zu einigen der im Beispiel verwendeten Flags und Optionen finden Sie unter Allgemeine Flags und Optionen. Wenn Sie eine vollständige Liste aller Flags, Optionen und Sub-befehle anzeigen möchten, öffnen Sie das Hilfemenü, indem Sie Folgendes ausführen:

./target/release/moonbeam --help

Verbinden von Polkadot JS-Apps mit einem lokalen Moonbeam-Node

Development node (der Entwicklungsnode) ist ein Substrat-basierter Node, sodass Sie mit ihm mit Standard-Substrat-Tools interagieren können. Die beiden bereitgestellten RPC-endpoints sind:

  • HTTP: http://127.0.0.1:9933
  • WS: ws://127.0.0.1:9944

Verbinden Sie sich zunächst mit Polkadot JS Apps. Öffnen Sie einen Browser:

https://polkadot.js.org/apps/#/explorer. Dadurch werden Polkadot JS Apps geöffnet, die sich automatisch mit Polkadot MainNet verbinden.

Klicken Sie auf die obere linke Ecke, um das Menü zum Konfigurieren der Netzwerke zu öffnen, und navigieren Sie dann nach unten, um das Development Sub-Menü zu öffnen. Dort sollten Sie die Option "Local Node" umschalten, die Polkadot JS Apps auf ws://127.0.0.1:9944 verweist. Wählen Sie als Nächstes die Schaltfläche Switch und die Seite sollte sich mit Ihrem Moonbeam-development node verbinden.

Wenn Polkadot JS Apps verbunden ist, sehen Sie, wie der Moonbeam-development node auf das Ankommen von Transaktionen wartet, um mit der Produktion von Blöcken zu beginnen.

Kontostatus abfragen

Mit der Veröffentlichung von Moonbase Alpha v3 arbeitet Moonbeam nun unter einem einzigen Kontoformat, das H160 im Ethereum-Stil ist und jetzt auch in Polkadot JS Apps unterstützt wird. Um den Saldo einer Adresse zu überprüfen, können Sie Ihr Konto einfach in die Registerkarte Konten (Accounts tab) importieren. Weitere Informationen finden Sie im Abschnitt Unified Accounts.

Wenn Sie jedoch die vollen RPC-Funktionen von Ethereum von Moonbeam nutzen, können Sie MetaMask verwenden, um auch den Saldo dieser Adresse zu überprüfen. Darüber hinaus können Sie auch andere Entwicklungstools wie Remix und Truffle verwenden.

Allgemeine Befehle, Flags und Optionen

Purging the Chain (Reinigung der chain)

Wenn ein Node über die Binärdatei ausgeführt wird, werden die Daten in einem lokalen Verzeichnis gespeichert, das sich normalerweise in ~/.local/shared/moonbeam/chains/development/db befindet. Wenn Sie eine neue Instanz des Nodes starten möchten, können Sie entweder den Inhalt des Ordners löschen oder den folgenden Befehl im moonbeamOrdner ausführen:

./target/release/moonbeam purge-chain --dev -y

Dadurch wird der Datenordner entfernt. Beachten Sie, dass jetzt alle Chaindaten verloren sind.

Wenn Sie Docker verwendet haben, bezieht sich der Datenordner auf den Docker-Container selbst.

Node Flags

Um ein Flag zu verwenden, fügen Sie es am Ende eines Befehls hinzu. Beispielsweise:

./target/release/moonbeam --dev
  • --dev: Gibt die development chain an
  • --no-telemetry: Deaktiviert die Verbindung zum Substrate-Telemetrieserver. Für globale chains ist die Telemetrie standardmäßig aktiviert. Telemetrie ist nicht verfügbar, wenn Sie einen development (--dev) node ausführen.
  • --tmp: Führt einen temporären Node aus, in dem die gesamte Konfiguration am Ende des Prozesses gelöscht wird
  • --rpc-external: Alle RPC-Schnittstellen anhören
  • --ws-external: Alle Websocket-Schnittstellen anhören

Nodeoptionen

Optionen können ein Argument auf der rechten Seite der Option enthalten. Beispielsweise:

./target/release/moonbeam --dev --sealing 6000
  • -l <log pattern> oder --log <log pattern>: setzt einen benutzerdefinierten Logsfilter. Die Syntax für das log pattern ist <target>=<level>. Um beispielsweise alle RPC-Logs zu drucken, würde der Befehl wie folgt aussehen: -l rpc=trace.
  • --sealing <interval>: Wann Blöcke im Entwicklungsdienst (dev service) versiegelt werden sollen. Akzeptierte Argumente für das Intervall: instant, manualoder eine number, die das Timer-Intervall in Millisekunden angibt (z. B. 6000wird der Node alle 6 Sekunden Blöcke produzieren). Die Standardeinstellung ist instant
  • --rpc-port <port>: Legt den TCP-Port des HTTP-RPC-Servers fest. Akzeptiert einen Port als Argument
  • --ws-port <port>: Legt den TCP-Port des WebSockets-RPC-Servers fest. Akzeptiert einen Port als Argument.

Um eine vollständige Liste der Flags und Optionen zu erhalten, starten Sie Ihren Moonbeam-development node mit --help am Ende des Befehls.

Erweiterte Flags und Optionen

Mit der Veröffentlichung von Moonbase Alpha v7 bieten Noden auch Zugriff auf einige nicht standardmäßige RPC-Methoden, die es Entwicklern ermöglichen, Transaktionen während der Laufzeit zu überprüfen und zu debuggen. Derzeit sind zwei Funktionen verfügbar:

  • Geth debug API: Genauer gesagt die debug_traceTransaction-Methode. Dadurch wird versucht, die Transaktion auf die gleiche Weise auszuführen, wie sie ausgeführt wurde. Sie können mehr über diese RPC-Methode hier lesen.
  • OpenEthereum trace module: genauer gesagt die trace_filter Methode. Dadurch wird die Ablaufverfolgung zurückgegeben, die einem bestimmten Filter entspricht, der als Eingabe für den RPC-Aufruf (RPC call) bereitgestellt wird. Sie können mehr über diese RPC-Methode hier lesen.

Die oben genannten Funktionen können über die folgenden Flags aktiviert werden:

  • --ethapi=debug: aktiviert die Geth-Debug-API für den debug_traceTransaction RPC-Aufruf (RPC call)
  • --ethapi=trace: aktiviert das OpenEthereum Trace-Modul für den trace_filter RPC-Aufruf (RPC call)

Hinweis Debug-/Trace-Funktionen werden noch aktiv entwickelt. Da diese Anforderungen sehr CPU-lastig sind, wird empfohlen, den Node mit dem --execution=Native Flag auszuführen. Dadurch wird die native Laufzeitumgebung verwendet, die als Teil der ausführbaren Datei des Nodes enthalten ist, anstelle der on-chain gespeicherten Wasm-Binärdatei.

Sie können beide Flags kombinieren.

Standardmäßig beträgt die maximale Anzahl von Trace-Einträgen, die eine einzelne Anfrage vontrace_filter zurückgeben darf, 500. Eine Anfrage, die dieses Limit überschreitet, gibt einen Fehler zurück. Mit dem folgenden Flag können Sie eine andere Höchstgrenze festlegen:

  • --ethapi-trace-max-count <uint>: setzt die maximale Anzahl von Trace-Einträgen, die vom Node zurückgegeben werden

Durch Anfragen verarbeitete Blöcke werden für eine bestimmte Zeit (Standard ist 300 Sekunden) vorübergehend im Cache gespeichert und danach gelöscht. Mit folgendem Flag können Sie einen anderen Zeitpunkt für das Löschen setzen:

  • -ethapi-trace-cache-duration <uint>: legt die Dauer (in Sekunden) fest, nach der der Cache von trace_filter für einen bestimmten Block verworfen wird

Wenn Sie beispielsweise die Binärdatei ausführen:

./target/release/moonbeam --dev --execution=Native --ethapi=debug,trace

Pre-funded Development Accounts (Vorfinanzierte Entwicklungskonten)

Ihr Moonbeam-development node wird mit zehn vorfinanzierten Konten für die Entwicklung geliefert. Die Adressen sind aus der kanonischen Entwicklungsmnemonik von Substrate abgeleitet:

 bottom drive obey lake curtain smoke basket hold race lonely fit walk
  • Alith:
    • Public Address: 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac
    • Private Key: 0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133
  • Baltathar:
    • Public Address: 0x3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0
    • Private Key: 0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b
  • Charleth:
    • Public Address: 0x798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc
    • Private Key: 0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b
  • Dorothy:
    • Public Address: 0x773539d4Ac0e786233D90A233654ccEE26a613D9
    • Private Key: 0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68
  • Ethan:
    • Public Address: 0xFf64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB
    • Private Key: 0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4
  • Faith:
    • Public Address: 0xC0F0f4ab324C46e55D02D0033343B4Be8A55532d
    • Private Key: 0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df
  • Goliath:
    • Public Address: 0x7BF369283338E12C90514468aa3868A551AB2929
    • Private Key: 0x96b8a38e12e1a31dee1eab2fffdf9d9990045f5b37e44d8cc27766ef294acf18
  • Heath:
    • Public Address: 0x931f3600a299fd9B24cEfB3BfF79388D19804BeA
    • Private Key: 0x0d6dcaaef49272a5411896be8ad16c01c35d6f8c18873387b71fbc734759b0ab
  • Ida:
    • Public Address: 0xC41C5F1123ECCd5ce233578B2e7ebd5693869d73
    • Private Key: 0x4c42532034540267bf568198ccec4cb822a025da542861fcb146a5fab6433ff8
  • Judith:
    • Public Address: 0x2898FE7a42Be376C8BC7AF536A940F7Fd5aDd423
    • Private Key: 0x94c49300a58d576011096bcb006aa06f5a91b34b4383891e8029c21dc39fbb8b

Verwenden von MetaMask anschauen:

Using MetaMask

Außerdem ist im development node ein Konto (prefunded account) enthalten, das zu Testzwecken verwendet wird:

  • Gerald:
    • Public Address: 0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b
    • Private Key: 0x99b3c12287537e38c90a9219d4cb074a89a16e9cdb20bf85728ebd97c343e342

Original (engl.)