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 Siemoonbeam --helpausführen.
Hinweis Sie können einen benutzerdefinierten Prometheus-Port mit dem Flag--prometheus-port XXXXangeben (wobeiXXXXdurch 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-NAMEan 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.targetMoonriver
[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.targetCollator
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.targetMoonriver
[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.targetHinweis Sie können einen benutzerdefinierten Prometheus-Port mit dem Flag--prometheus-port XXXXangeben (wobeiXXXXdurch 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_traceTransactionMethode. 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_filterMethode. 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 dendebug_traceTransactionRPC-Aufruf -
--ethapi=trace: aktiviert das OpenEthereum-Trace-Modul für denrace_filterRPC-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 vontrace_filterfü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.