So synchronisieren Sie einen Ethereum-Knoten, ohne die Fehler zu machen, die ich gemacht habe

Als ich anfing, auf der Ethereum-Plattform zu entwickeln, war das Synchronisieren eines Knotens eines der ersten Dinge, die ich tat. Da niemand meine Hand hielt und nirgendwo all die häufig auftretenden Fehler konsolidieren konnte, verschwendete ich Wochen damit, nur einen Knoten zu synchronisieren. Es war so ein Kopfschmerz, dass ich fast aufgab.

Die Terminologie nicht zu kennen, machte es nur schwieriger.

In diesem Artikel möchte ich daher alle häufig auftretenden Fehler zusammenfassen und die Gründe für jeden Schritt bei der Synchronisierung eines Knotens erläutern. Hoffentlich wirst du nicht so böse frühe Erfahrungen machen wie ich.

Ein kurzes Intro

In Ethereum erstellen Entwickler Teile einer Anwendung, die im Netzwerk ausgeführt werden. Diese werden als intelligente Verträge bezeichnet . Obwohl Sie sie manuell bereitstellen können, ohne sie mit einem Ethereum-Knoten zu synchronisieren, ist es auf lange Sicht bequemer, den Entwicklungsprozess zu synchronisieren (insbesondere, wenn wir Entwicklungsframeworks wie Truffle verwenden möchten).

Um einen Ethereum-Knoten zu synchronisieren, benötigen wir die folgende Software:

  • Geth - Client für einen Ethereum-Knoten.
  • Ethereum Wallet - Benutzeroberfläche für einen Ethereum-Knoten.

Lass uns anfangen.

Installieren Sie Geth

Um Geth herunterzuladen, klicken Sie hier für Windows-Benutzer. Klicken Sie dann auf die Schaltfläche "Geth für Windows".

Für MacOS-Benutzer empfehle ich den Download mit Homebrew. Sie können dies mit den folgenden Befehlen tun:

brew tap ethereum/ethereumbrew install ethereum

Weitere Informationen finden Sie in den Anweisungen von Geth.

Überprüfen Sie, ob Geth ordnungsgemäß installiert ist, indem Sie geth versiondas Terminal (MacOS) oder PowerShell (Windows) eingeben .

Installieren Sie die Ethereum-Brieftasche

Wir nennen die GUI, die mit dem Netzwerk interagiert, die "Brieftasche". Mit einer schnellen Google-Suche können Sie viele verschiedene Brieftaschen für Ethereum finden (z. B. Parity, Jaxx und MyEtherWallet). Ich persönlich benutze gerne Ethereum Wallet. Es hat eine benutzerfreundliche Oberfläche und ich bin auch ein bisschen voreingenommen, weil es von Ethereum selbst entwickelt wurde.

Den Installer finden Sie hier.

Hinweis: Ich bevorzuge Ethereum Wallet gegenüber Mist . Mist ist im Grunde ein Browser, der dezentrale Anwendungen (dApps) und Websites rendert.

Für die Entwicklung eines intelligenten Vertrags benötigen wir nur das Ethereum Wallet.

Mainnet gegen Testnet

In Ethereum gibt es zwei Hauptnetzwerke: das Hauptnetz und das Testnetz.

Das Hauptnetz wird verwendet, um echten Äther zu handeln. Der Wert des Ethers ist über Kryptowährungsbörsen an die reale Fiat-Währung gebunden.

Als Entwickler möchten wir keine Anwendungstests mit echtem Geld durchführen. Dafür ist das Testnetz da.

Wir nennen das Testnetz Ropsten .

Führen Sie Geth and Ethereum Wallet aus

Wenn Sie einen intelligenten Vertrag entwickeln, sollten Sie zuerst das Testnetz synchronisieren. Wir müssen das Mainnet nur synchronisieren, wenn wir bereit sind, es bereitzustellen.

Sie benötigen ca. 30 GB Speicherplatz, um ein Testnetz zu synchronisieren. Da das Mainnet mehr Transaktionen enthält, benötigen Sie ca. 100 GB, um ein Mainnet zu synchronisieren.

Hinweis: Einige sagen, dass Sie einen SSD-Speicher zum schnellen Schreiben benötigen, damit die Synchronisierung den neuesten Block einholen kann. Persönlich finde ich, dass HDD-Speicher in Ordnung ist. Wenn ich jedoch die Wahl hätte, würde ich definitiv SSD-Speicher verwenden.

Für Windows-Benutzer

Für einen einfachen Zugriff empfehle ich, einen Ordner zum Speichern der Blockchain zu erstellen. Zum Beispiel "C: \ EthereumTestnet".

Führen Sie nach dem Erstellen des Ordners den folgenden Befehl aus:

geth — testnet — data-dir=”C:\EthereumTestnet” — rpc — rpcapi eth,web3,net,personal

Bearbeiten: Es scheint, dass sich einige Argumente geändert haben. Wenn Sie auf einen solchen Fehler "Flag bereitgestellt, aber nicht definiert: -data-dir" gestoßen sind, ändern Sie den Argumentnamen in - datadir statt in data-dir.

Das Argument --testnetgibt an, dass wir mit dem Ropsten-Netzwerk synchronisieren möchten. Um das Mainnet zu synchronisieren, müssen Sie nur das Argument entfernen --testnetund das Datenverzeichnis ändern. Zum Beispiel:

geth — data-dir=”C:\EthereumMainnet” — rpc — rpcapi eth,web3,net,personal

Das --rpcArgument aktiviert den HTTP-RPC-Server. Dies ermöglicht es uns, bestimmte Dienste zu nutzen, wie z --rpcapi eth,web3,net,personal.

Nach Eingabe des Befehls sollte Folgendes angezeigt werden:

Um die Blockchain nicht zu beschädigen, insbesondere nach vielen Stunden der Synchronisierung, sollten Sie die Eingabeaufforderung NICHT abrupt schließen. Stoppen Sie die Synchronisierung immer durch Drücken von Strg + C und warten Sie, bis Geth das Programm für Sie beendet.

Es ist jedoch schwierig, sich alle benötigten Befehls- und RPC-Dienste zu merken. Aus diesem Grund schlage ich vor, eine Verknüpfung oder eine Batchdatei zu erstellen, um Ihnen zu helfen.

Erstellen Sie einfach eine Datei mit einem beliebigen Texteditor und speichern Sie sie als .bat- Datei. Zum Beispiel RunGethTestnet.bat (der Name ist nicht wichtig). Kopieren Sie den Befehl, fügen Sie ihn in die Datei ein und speichern Sie ihn. Wenn Sie Geth for Ropsten das nächste Mal ausführen müssen, doppelklicken Sie einfach auf die Datei.

Nachdem wir Geth ausgeführt haben, müssen wir die Ethereum-Brieftasche ausführen. Da die Benutzeroberfläche den genauen Speicherort ermitteln soll, an dem wir unsere Dateien mit Geth synchronisiert haben, führen wir sie über die Konsole aus.

Ähnlich wie bei Geth habe ich auch eine Batch-Datei mit einem Beispielbefehl wie dem folgenden gespeichert:

Beachten Sie, dass Ihr Befehl möglicherweise etwas anders aussieht als meiner, da Sie Ihre Anwendung möglicherweise in einem anderen Verzeichnis speichern.

Alternativ können Sie die Anwendung Ihrem Pfad hinzufügen.

Das Argument --node-datadir="C:\EthereumTestnet"besagt, wo ich meine Chaindata gespeichert habe, genau die gleiche, die ich für Geth angegeben habe.

Für Mac-Benutzer

Für MacOS ist dies etwas einfacher, da die Chaindata automatisch in die Bibliothek heruntergeladen und nicht vor uns verborgen werden. Wir müssen also nicht das Datenverzeichnis angeben.

Trotzdem empfehle ich, eine Skriptdatei zu erstellen, um das Ausführen von Geth und Ethereum Wallet zu vereinfachen.

Hinweis: Geth muss vor Ethereum Wallet laufen .

Wenn Sie Ethereum Wallet alleine ausführen, wird der Synchronisierungsprozess automatisch gestartet, da automatisch ein Geth-Client im Hintergrund ausgeführt wird. Dies ist benutzerfreundlich, aktiviert jedoch nicht die RPC-Dienste, die wir verwenden möchten. Daher möchten wir sicherstellen, dass RPC sowohl in unserer Geth- als auch in unserer Ethereum-Wallet-Ausführung aktiviert ist.

Ein paar Notizen

  1. Der Synchronisierungsprozess ist sehr lang und kann bis zu 2-3 Tage dauern. Bitte haben Sie Geduld und lassen Sie Ihren Computer über Nacht eingeschaltet.
  2. Die Synchronisierungsgeschwindigkeit hängt von Ihrer Internetgeschwindigkeit, der Anzahl der Peers und der Schreibgeschwindigkeit Ihres Speicherlaufwerks ab.
  3. Da die Daten in Blöcken gespeichert und miteinander verknüpft sind, kann eine Beschädigung in einem Block die gesamten Chaindata beschädigen. Dies kann möglicherweise Ihre Mühe in Wartezeiten für die Synchronisierung des Knotens verschwenden. Daher ist es sehr wichtig, dass Sie Ihren Geth ordnungsgemäß herunterfahren. In bestimmten Fällen möchten Sie möglicherweise ein Rollback durchführen. Aber Vorbeugen ist hier besser als Heilen.
  4. Der Fortschrittsbalken in Ihrer Ethereum-Brieftasche ist NICHT korrekt. Wenn Sie sich darauf verlassen, werden Sie viel Angst und Frustration bekommen.
  5. Geth läuft auf Port 30303 für externes Abhören.
  6. Der Standardport für die interne Kommunikation, z. B. zwischen Ihrer Brieftasche und Geth, ist 8545.

Stellen Sie sicher, dass Ihr Port zum Geth-Client geöffnet ist

Es ist wirklich wichtig sicherzustellen, dass die Verbindung zu Ihrem Geth-Client nicht eingeschränkt ist. Ein großes Problem war, dass meine Firewall die Anzahl der Verbindungen, die ich über den Geth-Client herstellen konnte, begrenzen ließ.

Sie können dieses Problem erkennen, indem Sie sich die Anzahl der Peers ansehen . Wenn es bei etwa 1 bis 3 Peers (für mindestens eine halbe Stunde) konstant niedrig bleibt, besteht eine gute Chance, dass Ihre Verbindung begrenzt ist. Ein gesunder Bereich liegt über 5 Peers.

MacOS-Benutzer

Wenn Sie Geth ausführen, sollte eine Benachrichtigung angezeigt werden, damit Sie die Verbindung zulassen können. Klicken Sie natürlich auf „Zulassen.

Um dies zu überprüfen, gehen Sie zu Systemeinstellungen> System & Datenschutz.

Unter Firewall Registerkarte, klicken Sie auf Firewall - Optionen .

Windows-Benutzer

Um Ihren Port zu öffnen, gehen Sie zu Systemsteuerung> System und Sicherheit> Windows Defender-Firewall.

Klicken Sie auf Erweiterte Einstellungen . Klicken Sie im Seitenbereich auf Eingehende Regeln .

Die eingehenden Ports, die Sie öffnen möchten, sind TCP und UDP 30303. Daher habe ich eine Regel für TCP 30303 und eine andere für UDP 30303 erstellt.

Möglicherweise müssen Sie Ihre ausgehenden Ports auch für TCP 30303 öffnen.

Beachten Sie, dass Firewall / Antivirenprogramme von Drittanbietern möglicherweise auch Ihre Verbindungen einschränken. Konfigurieren Sie sie daher entsprechend.

An Geth befestigen

Um weitere Informationen zu Ihrem Knoten abzurufen, können Sie eine Verbindung zum Geth-Client herstellen und mit ihm mithilfe der RPC-Dienste Befehle ausführen.

Hier ist eine einfache Möglichkeit, Ihren Synchronisierungsstatus zu überprüfen: Stellen Sie eine Verbindung zum Client her, indem Sie den folgenden Befehl auf einem separaten Terminal / einer separaten Konsole eingeben.

geth attach //127.0.0.1:8545

Auch hier möchten Sie es möglicherweise in einer Batch- / Skriptdatei speichern.

Nachdem Sie den Befehl ausgeführt haben, sollte Folgendes angezeigt werden.

Geben web3.ethSie ein und Sie sollten viele Informationen sehen. Geben Sie web3.eth.syncingstattdessen ein, um bestimmte Informationen zur Synchronisierung abzurufen .

Wie Sie sehen können, ist der Fortschrittsbalken oben in der Ethereum-Brieftasche lediglich ein Vergleich zwischen dem höchsten Block und dem aktuellen Block . Da das highestBlock auf Ihren Computer nicht bekannt , der tatsächliche höchste Block sein könnte, könnte der Fortschrittsbalken nicht reflektiert den wirklichen Fortschritt.

Tatsächlich werden der höchste Block und die bekannten Zustände weiter erhöht, wenn Sie Ihre Knoten synchronisieren.

Einige letzte Punkte

Verwenden Sie immer die stabile Version des Clients und der Brieftasche, um schnellere Kopfschmerzen zu vermeiden, da sich die Technologie schnell ändert.

Beachten Sie außerdem, dass es immer eine Problemumgehung für alle Probleme gibt, mit denen Sie konfrontiert sind. Wenn Sie auf ein Problem bei der Synchronisierung stoßen, können Sie versuchen, nach Lösungen zu suchen, da Sie wahrscheinlich nicht der erste sind, der mit demselben Problem konfrontiert ist.

Und erinnern Sie sich immer daran, dass Sie keinen Knoten synchronisieren müssen, um einen intelligenten Vertrag zu entwickeln. Dies hilft nur dabei, Ihr Verständnis der Umgebung sowie Ihres Entwicklungsprozesses zu erleichtern. Schlagen Sie sich also nicht darüber hinweg, wenn Sie so früh im Entwicklungsprozess auf Probleme stoßen.

Folgen Sie mir für weitere Artikel oder besuchen Sie meine Website - Die Perspektive eines Entwicklers.