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?
Dies über RPC zu tun, web3
wird ewig dauern, wie Sie festgestellt haben. Das Lesen der .ldb
Dateien ist der richtige Weg und etwas, das in ähnlichen Fragen schon einmal auftauchte.
Ich kenne keinen funktionierenden, aktuellen .ldb
Parser, 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 .ldb
Dateien: Format der LevelDB-Dateien im Knotenverzeichnis? Probleme beim Abrufen von Inhalten mit der Python-Leveldb-API
Sie können Daten auch über eine Localhost-IPC-API lesen, die viel schneller ist als der RPC-HTTP-Endpunkt.
mgalka