Wie kann ich einen Geth-Knoten dazu bringen, die Blockchain schnell herunterzuladen?

Ich betreibe einen Geth-Knoten auf langsamer Hardware. Bei der derzeitigen Fortschrittsrate könnte es mehrere Tage dauern, bis ich die gesamte Blockchain herunterladen kann. Gibt es eine Möglichkeit, es schneller zu synchronisieren?

Antworten (5)

Vergessen Sie nicht, eine SSD zu verwenden

Wenn Sie dazu in der Lage sind, ist die Verwendung einer NVMe-SSD noch besser.

Wenn Sie nur begrenzten Speicherplatz auf der SSD haben, siehe Können Kettendaten auf zwei (oder mehr) Standorte aufgeteilt werden?

Allerdings ist der Ethereum-Staat groß und wird immer größer. Seien Sie geduldig und es wird sich lohnen.


Vorherige Antwort

Nicht vergessen--cache

Jeder erwähnt --fast, aber Sie brauchen wahrscheinlich auch--cache=1024 . Ohne es laufen Sie mit dem Standard, der --cache=128(Geth 1.6.7) ist.

Eine Geschwindigkeitssteigerung von 50 % ist nur durch Erhöhen des Caches möglich.

Wenn Sie von vorne beginnen, verwenden Sie:geth --fast --cache=1024

Wenn Sie bereits einen Teil der Blockchain haben, verwenden Sie:geth --cache=1024

Abhängig von Ihrem Arbeitsspeicher können Sie es auch mit höheren Werten versuchen, z --cache=2048.

Quelle

Wenn Sie den Geth-Client verwenden, können Sie einige Dinge tun, um die Zeit zu verkürzen, die zum Herunterladen der Ethereum-Blockchain benötigt wird. Wenn Sie sich dafür entscheiden, das Flag --fast zu verwenden, um eine schnelle Ethereum-Synchronisierung durchzuführen, werden Sie keine vergangenen Transaktionsdaten behalten.

Notiz

Sie können dieses Flag nicht verwenden, nachdem Sie einen normalen Synchronisierungsvorgang ganz oder teilweise durchgeführt haben, was bedeutet, dass Sie keinen Teil der Ethereum-Blockchain heruntergeladen haben sollten, bevor Sie diesen Befehl verwenden. Weitere Informationen finden Sie in dieser Ethereum Stack.Exchange-Antwort.

Nachfolgend finden Sie einige Flags, die Sie verwenden können, wenn Sie Ihren Client schneller synchronisieren möchten.

--schnell

Dieses Flag ermöglicht eine schnelle Synchronisierung durch Zustandsdownloads, anstatt die vollständigen Blockdaten herunterzuladen. Dadurch wird auch die Größe Ihrer Blockchain drastisch reduziert. HINWEIS: --fast kann aus Sicherheitsgründen nur ausgeführt werden, wenn Sie Ihre Blockchain von Grund auf neu synchronisieren und nur beim ersten Herunterladen der Blockchain. Weitere Informationen finden Sie in diesem Reddit-Beitrag.

--cache=1024

Megabyte Speicher, der dem internen Caching zugewiesen ist (mindestens 16 MB / Datenbank erzwungen). Der Standardwert ist 16 MB, also sollte die Erhöhung auf 256, 512, 1024 (1 GB) oder 2048 (2 GB) je nachdem, wie viel RAM Ihr Computer hat, einen Unterschied machen.

Seit der Geth-Version 1.6.0 ist die Verwendung des Flags --fast veraltet, Sie sollten jetzt --syncmode=fast verwenden
@BarneyChambers, Blockwala und andere: Danke. Dies wurde auch in ein Wiki umgewandelt, um die Aktualisierung für jedermann zu erleichtern.
Wenn sich jemand im Jahr der Corona darauf bezieht, ist der Standard-Syncmode jetzt fast, und der Standardwert cacheist 1024.

Die --fastBefehlszeilenoption wird schneller synchronisiert. Sie müssen es jedoch von Grund auf neu verwenden, Sie können es nicht verwenden, wenn die Blockchain bereits heruntergeladen wurde. Wenn Sie einen Knoten haben, der bereits synchronisiert ist, können Sie die Javascript-Schnittstelle und die Befehle exportChain und importChain verwenden, um Ihren Knoten zu synchronisieren.

Denn --fastes muss getan werden, bevor irgendetwas synchronisiert wurde.
geth removeb kann verwendet werden, um die Datenbank zu zerstören. Es sollte sich nicht auf den Keystore auswirken, aber machen Sie trotzdem zuerst ein Backup des Datenverzeichnisses
In meinem Fall scheint -fast keine Konsequenzen zu haben und Geth beschwert sich: I0508 13:29:49.476026 30960 handler.go:92] blockchain not empty, fast sync disabled
Hast du geth removeb gemacht, um die Datenbank zu leeren?
Gibt es einen offiziellen Torrent oder ähnliches mit einer aktualisierten Kette zum schnellen Importieren?
@paulmorriss Ich hoffe, es macht Ihnen nichts aus, dass dies in ein Wiki umgewandelt wurde, in der Hoffnung, dass es für die Community einfacher ist, auf dem Laufenden zu bleiben. Um potenziell verlorene Wiederholungen zu kompensieren, kann ich eine Prämie für eine bestehende oder neue Frage Ihrer Wahl anbieten.

Es gibt 2 Möglichkeiten mit geth, die mir bekannt sind

1. Synchronisieren mit dem--fastgeth --fast Sie beginnen können . Ermöglicht schnelles Synchronisieren durch Status-Downloads

2. Verwenden Sie dazu den importBefehl in Geth , Sie benötigen eine bereits synchronisierte Blockchain von Geth und sie muss mit exportiert werden geth export filename, die importiert werden kanngeth import filename

Um Geth am schnellsten zu synchronisieren , empfehle ich die Verwendung von Geth 1.4.6. Ältere Versionen sind viel langsamer.

Spoiler : HDD-Synchronisation ist sehr langsam.

Es gibt zwei Modi für die Synchronisation:

  • geth --fast --cache 1024 --jitvm: Diese Methode ist auf leistungsstarken Computern sehr schnell (25 Minuten auf meinem System i7 Quad Core 16Go, SSD und Gbit/s Bandbreite). Es verwendet 4,5 GB auf der Festplatte
  • geth --cache 1024 --jitvm: Diese Methode ist langsamer (3h auf meinem System i7 Quad Core 16Go, SSD und Gbit/s Bandbreite). Es verwendet 21 GB auf der Festplatte

Tipp 1 : Wenn Sie bereits ein Geth auf einem Computer synchronisiert haben, können Sie das Chaindata-Verzeichnis sichern und für einen anderen Computer kopieren. Ich überprüfe OS X, Linux und Windows (alle in der 64-Bit-Version).

Tipp 2 : Die Export/Import-Methode funktioniert. Die Importdauer ist sehr lang, da alle Transaktionen geprüft werden.

Tipp 3 : Wenn Sie genug RAM und keine SSD haben, verwenden Sie Ihren RAM als Ramdisk und wählen Sie Ihre Ramdisk mit der Option --datadir aus. Sie benötigen 4,2 GB für eine schnelle Synchronisierung. Wenn die Synchronisierung abgeschlossen ist, kopieren Sie das Verzeichnis chaindata an seinen ursprünglichen Platz:

  • ~/.ethereum unter Linux
  • ~/Library/Ethereum auf OS X
  • %APPDATA%\Ethereum unter Windows

Ich habe viele Benchmarks mit verschiedenen Versionen für diese Frage gemacht: Wie viel schneller ist es, mit --jitvm zu synchronisieren?

Hinweis 1: Wenn Sie eine Festplatte verwenden, scheint die Synchronisierung langsamer zu sein. Die schnelle Methode war 4h auf meinem System.

Hinweis 2: RAMDiskCreator unter OS X ist eine Freeware zum Erstellen einer RAM-Disk.

Jitvm- und Cache-Optionen haben einen geringen Einfluss auf meine Bank

in Geth 1.7.3, --fastist veraltet und --jitvmwird entfernt. Brauchen wir alternative Flaggen?
Das --fastwird durch ersetzt --syncmode fast, daher ist es nicht wirklich veraltet, es zu verwenden, es muss nur in den neuen Parameter konvertiert werden.

3. Synchronisieren Sie auf einem schnellen Rechner und kopieren Sie das Chaindata-Verzeichnis auf Ihren langsamen Rechner . Chaindata ist über Architekturen hinweg portierbar. Also, synchronisieren Sie, stoppen Sie den Knoten sauber, übertragen Sie das Chaindata-Verzeichnis (ersetzen Sie Ihr altes) und starten Sie den Knoten auf einem anderen Computer. Um das Risiko zu minimieren, verwenden Sie auf beiden Rechnern identische Versionen von geth. (Ich habe dies für x86_64 -> armv7h erfolgreich mit Geth 1.4.5 gemacht, andere auch .)