Lectura de archivos LDB

Estoy buscando el formato de los archivos LDB para obtener todos los contratos creados por mi cuenta.

Leí en una publicación en reddit ( https://www.reddit.com/r/ethereum/comments/64hhp1/getting_block_data_from_ldb_files/ ) que es posible que desee usar la API de Go. Pero no puedo encontrar una API que no pase por el servicio RPC-Geth. Esto es un problema porque: a) El servicio RPC no proporciona este tipo de servicio. b) Incluso si lo hace, probablemente sería demasiado lento.

¿Alguien puede señalarme una solución existente, o una biblioteca Go API, o explicarme qué parte de Geth accede a los archivos de la cadena, para poder desarrollarla yo mismo?

¡¡Muchas gracias!!

Pensé en adoptar este enfoque para mi trabajo en QuickBlocks.io, pero decidí no hacerlo porque estaría a merced del código go (o Rust). Creo que es una idea mucho mejor usar el RPC. Es lento, pero funciona, y siempre puede almacenar en caché los datos si lo desea. Eso es exactamente lo que hicimos con QuickBlocks.

Respuestas (1)

...o una biblioteca Go API, o que me explique qué parte de Geth accede a los archivos de cadena, para poder desarrollarlo yo mismo?

Echa un vistazo a Geth's database.go, que forma parte del ethdbpaquete.

Para conocer la interfaz real que se proporciona, verifique 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.gopodría ser útil para ejemplos de cómo usar las funciones proporcionadas.


Si desea tener una idea de algo para copiar, aquí hay un tutorial sobre cómo leer los datos de ldb usando Node.js. Claramente, tendría que transferir las ideas, pero podría ayudar a comprender cómo se distribuyen los datos.