Moonbeam
July 10, 2021

Moonbeam. Node Inbetriebnahme.

Einführung

Wenn Sie einen Full Node in einem Moonbeam-basierten Netzwerk laufen lassen, können Sie eine Verbindung zum Netzwerk herstellen, mit einem Bootnode synchronisieren, lokalen Zugriff auf RPC-Endpunkte erhalten, Blocks auf der Parachain erstellen und vieles mehr.

Es gibt mehrere deployments von Moonbeam, darunter das Moonbase Alpha TestNet, Moonriver auf Kusama und schließlich wird es Moonbeam auf Polkadot geben. So werden diese Umgebungen und ihre entsprechenden chain specification Dateinamen benannt:

Dieses Handbuch richtet sich an Personen mit Erfahrung in der Kompilierung von Substrat-basierten Blockchain-Noden. Ein Parachain-Node ähnelt einem typischen Substrat-Node, es gibt jedoch einige Unterschiede. Ein Substrate-Parachain-Node ist ein größerer Build, da er Code enthält, um die Parachain selbst auszuführen, sowie Code, um die relay chain zu synchronisieren und die Kommunikation zwischen den beiden zu erleichtern. Daher ist dieser Build ziemlich groß und kann über 30 Minuten dauern und benötigt 32 GB Arbeitsspeicher.

Hinweis

Moonbase Alpha wird immer noch als Alphanet betrachtet und wird daher keine 100%ige Verfügbarkeit haben. Die Parachain wird von Zeit zu Zeit gelöscht. Stellen Sie während der Entwicklung Ihrer Anwendung sicher, dass Sie eine Methode implementieren, um Ihre Verträge und Konten schnell in einer neuen Parachain bereitzustellen. Chainbereinigungen werden mindestens 24 Stunden im Voraus über unseren Discord-Kanal bekannt gegeben.

Anforderungen

Die zum Betreiben eines Nodes empfohlenen Mindestspezifikationen sind in der folgenden Tabelle aufgeführt. Für unsere MainNet-Bereitstellungen in Kusama und Polkadot werden die Festplattenanforderungen mit dem Wachstum des Netzwerks höher.

Hinweis

Wenn beim Betreiben eines Nodes keine Imported Meldung (ohne das [Relaychain]-Tag) angezeigt wird, müssen Sie möglicherweise Ihre Portkonfiguration überprüfen.

Laufende Ports

Wie bereits erwähnt, lauschen die Relay-/Parachain-Noden an mehreren Ports. Die Standard-Substrat-Ports werden in der Parachain verwendet, während die Relay-Chain auf dem nächsthöheren Port lauscht.

Die einzigen Ports, die für eingehenden Datenverkehr geöffnet sein müssen, sind die für P2P vorgesehenen Ports.

Standardports für einen Parachain-Full-Node

Standardports der Embedded Relay Chain

Installationsanleitung - Docker

Ein Moonbeam-Node kann mit Docker schnell hochgefahren werden. Weitere Informationen zur Installation von Docker finden Sie auf dieser Seite. Zum Zeitpunkt des Schreibens war die verwendete Docker-Version 19.03.6. Wenn Sie eine Verbindung zu Moonriver auf Kusama herstellen, dauert es einige Tage, bis die eingebettete Kusama relay chain vollständig synchronisiert ist. Stellen Sie sicher, dass Ihr System die Anforderungen erfüllt.

Erstellen Sie ein lokales Verzeichnis zum Speichern der Chaindaten:

Moonbase Alpha

 mkdir /var/lib/alphanet-data

Moonriver

mkdir /var/lib/moonriver-data

Stellen Sie sicher, dass Sie den Besitz und die Berechtigungen für das lokale Verzeichnis, in dem die Kettendaten gespeichert sind, entsprechend festlegen. Legen Sie in diesem Fall die erforderlichen Berechtigungen entweder für einen bestimmten oder den aktuellen Benutzer fest (ersetzen Sie DOCKER_USERdurch den tatsächlichen Benutzer, der den docker Befehl ausführt):

Moonbase Alpha

# chown to a specific user 
chown DOCKER_USER /var/lib/alphanet-data 
# chown to current user 
chown DOCKER_USER /var/lib/alphanet-data 

Moonriver

# chown to a specific user
chown DOCKER_USER /var/lib/moonriver-data# chown to current user
# chown to current user
sudo chown -R $(id -u):$(id -g) /var/lib/moonriver-data

Führen Sie nun den Befehl docker run aus. Wenn Sie einen Collator-Node einrichten, befolgen Sie unbedingt die Code-Snippets für "Collator". Beachten Sie, dass Sie YOUR-NODE-NAME an zwei verschiedenen Stellen ersetzen müssen.

Vollständiger Node (Full Node)

Moonbase Alpha

docker run --network="host" -v "/var/lib/alphanet-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam:v0.9.1 \
--base-path=/data \
--chain alphanet \
--name="YOUR-NODE-NAME" \
--execution wasm \
--wasm-execution compiled \
--pruning archive \
--state-cache-size 1 \
-- \
--pruning archive \
--name="YOUR-NODE-NAME (Embedded Relay)"

Moonriver

docker run --network="host" -v "/var/lib/moonriver-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam:v0.9.1 \
--base-path=/data \
--chain moonriver \
--name="YOUR-NODE-NAME" \
--execution wasm \
--wasm-execution compiled \
--pruning archive \
--state-cache-size 1 \
-- \
--pruning archive \
--name="YOUR-NODE-NAME (Embedded Relay)"

Wenn Sie MacOS verwenden, finden Sie alle Code-Snippets hier.

Sobald Docker die erforderlichen Images abruft, startet Ihr vollständiger Moonbeam (oder Moonriver)-Node und zeigt viele Informationen an:

Hinweis
Wenn Sie einen RPC-Endpunkt ausführen, polkadot.js.org verbinden oder Ihre eigene Anwendung ausführen möchten, verwenden Sie die Flags --unsafe-rpc-externalund/oder --unsafe-ws-external, um den vollständigen Node mit auszuführen externer Zugriff auf die RPC-Ports. Weitere Informationen erhalten Sie, wenn Sie moonbeam --help ausführen.
Hinweis Sie können einen benutzerdefinierten Prometheus-Port mit dem Flag --prometheus-port XXXX angeben (wobei XXXX durch die tatsächliche Portnummer ersetzt wird). Dies ist sowohl für die Parachain als auch für die embedded relay chain möglich.

Der obige Befehl aktiviert alle exponierten Ports, die für den grundlegenden Betrieb erforderlich sind, einschließlich der P2P- und Prometheus-(Telemetrie)Ports. Dieser Befehl ist mit der Gantree Node Watchdog-Telemetrie kompatibel. Wenn Sie bestimmte Ports verfügbar machen möchten, aktivieren Sie diese in der Docker-Befehlszeile wie unten gezeigt. Dadurch wird jedoch verhindert, dass der Gantree Node Watchdog (Telemetrie) Container auf den Moonbeam-Container zugreift. Tun Sie dies also nicht, wenn Sie einen Collator ausführen, es sei denn, Sie verstehen Docker-Netzwerke.

docker run -p 30334:30334 -p 30333:30333 -p 9933:9933 -p 9944:9944 
#rest of code goes here

Während des Synchronisierungsvorgangs sehen Sie Nachrichten sowohl von der embedded relay chain als auch von der Parachain (ohne Tag). Diese Nachrichten zeigen einen target block (Live-Netzwerkstatus) und einen best block (lokaler Node synchronisierter Status) an.

Hinweis
Es dauert einige Tage, bis die embedded Kusama relay chain vollständig synchronisiert ist. Stellen Sie sicher, dass Ihr System die Anforderungen erfüllt.

Wenn Sie die Installationsanweisungen für Moonbase Alpha befolgt haben, wird nach der Synchronisierung ein Node des Moonbase Alpha TestNet lokal ausgeführt!

Wenn Sie die Installationsanweisungen für Moonriver befolgt haben, werden Sie nach der Synchronisierung mit Peers verbunden und sehen, dass Blöcke im Moonriver-Netzwerk produziert werden! Beachten Sie, dass Sie in diesem Fall auch eine Synchronisierung mit der Kusama relay chain durchführen müssen, was einige Tage dauern kann.

Installationsanweisungen - Binär

In diesem Abschnitt wird beschrieben, wie Sie die Release-Binärdatei verwenden und einen Moonbeam full node als systemd-Dienst ausführen. Die folgenden Schritte wurden auf einer Ubuntu 18.04 getestet. Moonbeam funktioniert möglicherweise mit anderen Linux-Varianten, aber Ubuntu ist derzeit die einzige getestete Version.

Um die Binärdateien manuell selbst zu erstellen, lesen Sie die Anleitung zum Kompilieren von Moonbeam-Binärdateien.

Verwenden Sie die Release-Binärdatei

Es gibt mehrere Möglichkeiten, mit der Moonbeam-Binärdatei zu beginnen. Sie können die Binärdatei selbst kompilieren, aber der gesamte Vorgang kann etwa 30 Minuten dauern. Wenn Sie an diesem Weg interessiert sind, lesen Sie die Seite Compile the Binary in unserer Dokumentation.

Oder Sie können die release binary verwenden, um sofort loszulegen.

Verwenden Sie wget, um die neueste Binärversion zu erhalten:

Moonbase Alpha

wget https://github.com/PureStake/moonbeam/releases/download/v0.9.1/moonbeam

Moonriver

wget https://github.com/PureStake/moonbeam/releases/download/v0.9.1/moonbeam

Um zu überprüfen, ob Sie die richtige Version heruntergeladen haben, können Sie sha256sum moonbeam in Ihrem Terminal ausführen. Sie sollten die folgende Ausgabe erhalten:

Moonbase Alpha

de4cbbd849b70b2215d5fc9b67f5841d985c6bad496940a2eb3f15534e6f735f

Moonriver

de4cbbd849b70b2215d5fc9b67f5841d985c6bad496940a2eb3f15534e6f735f

Nachdem Sie die Binärdatei abgerufen haben, können Sie damit den systemd-Dienst ausführen.

Ausführen des Systemd-Dienstes

Die folgenden Befehle richten alles zum Ausführen des Dienstes ein.

Erstellen wir zunächst ein Dienstkonto, um den Dienst auszuführen:

Moonbase Alpha

adduser moonbase_service --system --no-create-home

Moonriver

adduser moonriver_service --system --no-create-home

Erstellen Sie als Nächstes ein Verzeichnis zum Speichern der Binärdatei und der Daten. Stellen Sie sicher, dass Sie den Besitz und die Berechtigungen für das lokale Verzeichnis, in dem die chain Daten gespeichert sind, entsprechend festlegen.:

Moonbase Alpha

mkdir /var/lib/alphanet-data 
chown moonbase_service /var/lib/alphanet-data

Moonriver

mkdir /var/lib/moonriver-data 
chown moonriver_service /var/lib/moonriver-data

Kopieren Sie nun die im letzten Abschnitt erstellte Binärdatei in den erstellten Ordner. Wenn Sie die Binärdatei selbst kompiliert haben, müssen Sie die Binärdatei in das Zielverzeichnis (./target/release/moonbeam) kopieren. Andernfalls kopieren Sie die Moonbeam-Binärdatei in das root Verzeichnis:

Moonbase Alpha

cp ./moonbeam /var/lib/alphanet-data

Moonriver

cp ./moonbeam /var/lib/moonriver-data

Der nächste Schritt besteht darin, die systemd-Konfigurationsdatei zu erstellen. Wenn Sie einen Collator Node einrichten, befolgen Sie unbedingt die Code-Snippets für "Collator". Beachten Sie, dass Sie Folgendes tun müssen:

  • Ersetzen Sie YOUR-NODE-NAME an zwei verschiedenen Stellen
  • Überprüfen Sie, ob sich die Binärdatei im richtigen Pfad befindet, wie unten beschrieben (ExecStart)
  • Überprüfen Sie den Basispfad (base path), wenn Sie ein anderes Verzeichnis verwendet haben
  • Benennen Sie die Datei /etc/systemd/system/moonbeam.service

Full Node

Moonbase Alpha

[Unit]
Description="Moonbase Alpha systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbase_service
SyslogIdentifier=moonbase
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/alphanet-data/moonbeam \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --pruning=archive \
     --state-cache-size 1 \
     --base-path /var/lib/alphanet-data \
     --chain alphanet \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --pruning=archive \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target

Moonriver

[Unit]
Description="Moonriver systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonriver_service
SyslogIdentifier=moonriver
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonriver-data/moonbeam \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --pruning=archive \
     --state-cache-size 1 \
     --base-path /var/lib/moonriver-data \
     --chain moonriver \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --pruning=archive \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target

Collator

Moonbase Alpha

[Unit]
Description="Moonbase Alpha systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbase_service
SyslogIdentifier=moonbase
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/alphanet-data/moonbeam \
     --validator \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --pruning=archive \
     --state-cache-size 1 \
     --base-path /var/lib/alphanet-data \
     --chain alphanet \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --pruning=archive \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target

Moonriver

[Unit]
Description="Moonriver systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonriver_service
SyslogIdentifier=moonriver
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonriver-data/moonbeam \
     --validator \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --pruning=archive \
     --state-cache-size 1 \
     --base-path /var/lib/moonriver-data \
     --chain moonriver \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --pruning=archive \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target
Hinweis Sie können einen benutzerdefinierten Prometheus-Port mit dem Flag --prometheus-port XXXX angeben (wobei XXXX durch die tatsächliche Portnummer ersetzt wird). Dies ist sowohl für die Parachain als auch für die embedded relay chain möglich.

Registrieren und starten Sie den Dienst, indem Sie Folgendes ausführen:

systemctl enable moonbeam.service
systemctl start moonbeam.service

Überprüfen Sie abschließend, ob der Dienst ausgeführt wird:

systemctl status moonbeam.service

Sie können logs auch überprüfen, indem Sie Folgendes ausführen:

journalctl -f -u moonbeam.service

Erweiterte Flags und Optionen

Mit der Veröffentlichung von Moonbase Alpha v7 bieten Node 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 in diesem Link 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 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
  • --ethapi=trace: aktiviert das OpenEthereum-Trace-Modul für den race_filter RPC-Aufruf

Hinweis Debug-/Trace-Funktionen werden noch aktiv entwickelt. Da diese Anforderungen sehr CPU-lastig sind, wird empfohlen, Node mit dem Flag --execution=Native auszuführen. Dadurch wird die native Laufzeitumgebung verwendet, die als Teil der ausführbaren Datei des Nodes enthalten ist, anstelle der in der 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 von trace_filter zurückgeben darf, 500. Eine Anfrage, die diese Grenze überschreitet, gibt einen Fehler zurück. Mit dem folgenden Flag können Sie eine andere Höchstgrenze festlegen:

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

Von Anfragen verarbeitete Blöcke werden vorübergehend für eine bestimmte Zeit im Cache gespeichert (Standard ist 300 Sekunden), danach werden sie gelöscht. Mit folgendem Kennzeichen 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

Aktualisieren des Clients

Im Laufe der Entwicklung von Moonbeam wird es manchmal erforderlich sein, Ihre Nodesoftware zu aktualisieren. Nodebetreiber werden auf unserem Discord-Kanal benachrichtigt, wenn Upgrades verfügbar sind und ob diese erforderlich sind (einige Client-Upgrades sind optional). Der Upgrade-Prozess ist unkompliziert und für einen vollständigen Node oder Collator gleich.

Stoppen Sie zunächst den Docker-Container oder den systemd-Dienst:

sudo docker stop `CONTAINER_ID`
# or
sudo systemctl stop moonbeamm

Installieren Sie dann die neue Version, indem Sie die zuvor beschriebenen Schritte wiederholen und sicherstellen, dass Sie das neueste verfügbare Tag verwenden. Nach dem Update können Sie den Dienst erneut starten.

Chain Bereinigung

Gelegentlich kann Moonbase Alpha bei größeren Upgrades gelöscht und zurückgesetzt werden. Wie immer werden Nodebetreiber im Voraus (über unseren Discord-Kanal) benachrichtigt, wenn dieses Upgrade von einer Bereinigung begleitet wird. Sie können Ihren Node auch bereinigen, wenn Ihr individuelles Datenverzeichnis beschädigt wird.

Stoppen Sie dazu zunächst den Docker-Container oder den systemd-Dienst:

sudo docker stop `CONTAINER_ID`
# or
sudo systemctl stop moonbeam

Entfernen Sie als Nächstes den Inhalt des Ordners, in dem die Kettendaten gespeichert sind (sowohl für die Parachain als auch für die relay chain):

sudo rm -rf /var/lib/alphanet-data/*

Installieren Sie zuletzt die neueste Version, indem Sie die zuvor beschriebenen Schritte wiederholen und sicherstellen, dass Sie das neueste verfügbare Tag verwenden. In diesem Fall können Sie einen neuen Node mit einem neuen Datenverzeichnis starten.

Telemetrie

Um den Telemetrieserver zu aktivieren, können Sie diesem Tutorial folgen.

Das Ausführen von Telemetrie auf einem full node ist nicht erforderlich. Dies ist jedoch für Collatoren erforderlich.

Außerdem können Sie sich die aktuellen Telemetriedaten von Moonbase Alpha und Moonriver ansehen.

Logs und Fehlerbehebung

Sie sehen logs sowohl von der relay chain als auch von der Parachain. Der relay chain wird [Relaychain] vorangestellt, während die Parachain kein Präfix hat.

P2P Ports nicht geöffnet

Wenn keine Imported Meldung (ohne das [Relaychain]-Tag) angezeigt wird, müssen Sie die P2P-Port-Konfiguration überprüfen. Der P2P-Port muss für eingehenden Datenverkehr geöffnet sein.

In Sync

Beide chains müssen jederzeit synchron sein, und Sie sollten entweder Imported oder Idle Nachrichten sehen und verbundene Peers haben.

Genesis Mismatching

Das Moonbase Alpha TestNet wird oft aktualisiert. Folglich wird möglicherweise die folgende Meldung angezeigt:

DATE [Relaychain] Bootnode with peer id `ID` is on a different
chain (our genesis: GENESIS_ID theirs: OTHER_GENESIS_ID)

Dies bedeutet normalerweise, dass Sie eine ältere Version verwenden und ein Upgrade durchführen müssen.

Wir kündigen die Upgrades (und die entsprechende chain purge) über unseren Discord-Kanal mindestens 24 Stunden im Voraus an.

Original Artikel (engl.)