Lesen von LDB-Dateien

Ich suche nach dem Format der LDB-Dateien, um alle von meinem Konto erstellten Verträge abzurufen.

Ich habe in einem Beitrag auf reddit ( https://www.reddit.com/r/ethereum/comments/64hhp1/getting_block_data_from_ldb_files/ ) gelesen, dass ich vielleicht die Go-API verwenden möchte. Aber ich kann keine API finden, die nicht den RPC-Geth-Dienst durchläuft. Dies ist aus folgenden Gründen ein Problem: a) Der RPC-Dienst stellt diese Art von Dienst nicht bereit. b) Selbst wenn dies der Fall wäre, wäre es wahrscheinlich zu langsam.

Kann mir jemand auf eine vorhandene Lösung oder eine Go-API-Bibliothek verweisen oder mir erklären, welcher Teil von Geth auf die Kettendateien zugreift, um sie selbst entwickeln zu können?

Danke vielmals!!

Ich habe darüber nachgedacht, diesen Ansatz für meine Arbeit an QuickBlocks.io zu verwenden, aber ich habe mich dagegen entschieden, weil ich dem Go- (oder Rust-) Code ausgeliefert wäre. Ich denke, es ist eine viel bessere Idee, den RPC zu verwenden. Es ist langsam, aber es funktioniert, und Sie können die Daten jederzeit zwischenspeichern, wenn Sie möchten. Genau das haben wir mit QuickBlocks gemacht.

Antworten (1)

...oder eine Go-API-Bibliothek oder um mir zu erklären, welcher Teil von Geth auf die Kettendateien zugreift, um es selbst entwickeln zu können?

Werfen Sie einen Blick auf Geth's database.go, das Teil des ethdbPakets ist.

Überprüfen Sie für die tatsächlich bereitgestellte Schnittstelle interface.go:

type Database interface {
    Put(key []byte, value []byte) error
    Get(key []byte) ([]byte, error)
    Delete(key []byte) error
    Close()
    NewBatch() Batch
}

bench_test.gokönnte für Beispiele zur Verwendung der bereitgestellten Funktionen nützlich sein.


Wenn Sie eine Vorstellung davon haben möchten, was kopiert werden soll, finden Sie hier ein Tutorial zum Lesen der LDB-Daten mit Node.js. Natürlich müssten Sie die Ideen übertragen, aber es könnte helfen, zu verstehen, wie die Daten angeordnet sind.