So greifen Sie auf den Zustand von Geth zu Trie

Wie kann ich mit Geth einen Snapshot des Netzwerkstatus für einen bestimmten Block extrahieren?

Mein Geth-Knoten führt eine vollständige Synchronisierung (~ 300 GB) aus, was bedeutet, dass der Zustandsversuch bereits gespeichert sein sollte. Ich habe versucht, direkt auf die leveldb-Datenbank zuzugreifen, aber sie ist mit der Blockchain im Chaindata-Ordner vermischt, sodass die Struktur nicht klar ist.

Ich habe auch versucht, die Methode web3 dumpBlock zu verwenden, die theoretisch funktioniert, aber es dauert viel zu lange, bis sie praktisch nutzbar ist (Stunden).

Gibt es eine andere API-Methode, die schneller auf den Zustandsversuch zugreifen kann? Irgendeine Dokumentation darüber, wie die Datenbank im Chaindata-Ordner organisiert ist?

Antworten (2)

Dies über RPC zu tun, web3wird ewig dauern, wie Sie festgestellt haben. Das Lesen der .ldbDateien ist der richtige Weg und etwas, das in ähnlichen Fragen schon einmal auftauchte.

Ich kenne keinen funktionierenden, aktuellen .ldbParser, obwohl es einige geben muss, also verschiebe ich mich auf andere, sachkundigere Antworten, die Sie möglicherweise erhalten.


In der Zwischenzeit...

Siehe: LDB-Dateien lesen , die versuchen, das OP in die Richtung von Teilen der State Trie (Go) -API von Geth zu weisen, um einen Parser von Grund auf neu zu schreiben. ( Hier gibt es auch einen alten Go-Parser, obwohl er wahrscheinlich veraltet ist.)

Um besser zu verstehen, wie die Datenbank aufgebaut ist, lesen Sie Exploring Ethereum’s state trie With Node.js . Der Beispielcode ist ziemlich alt, kann aber mit ein paar Änderungen zum Laufen gebracht werden.

Auch verwandt, wenn auch ohne klare Antwort: How to parse blocks with Python?

Auch im Zusammenhang mit der RPL-Codierung in den .ldbDateien: Format der LevelDB-Dateien im Knotenverzeichnis? Probleme beim Abrufen von Inhalten mit der Python-Leveldb-API

Vielen Dank. Hilfreiche Informationen. Das Node-Beispiel ist das, dem ich gefolgt bin. Leider ist das Layout von Geths Datenbank nicht das gleiche, und die Go-Links sind tatsächlich veraltet. Gibt jedoch eine Vorstellung davon, wo Sie nach dem aktuellen Schema suchen müssen.

Sie können Daten auch über eine Localhost-IPC-API lesen, die viel schneller ist als der RPC-HTTP-Endpunkt.