Cómo acceder al trie estatal de Geth

Usando Geth, ¿cómo puedo extraer una instantánea del estado de la red para un bloque determinado?

Mi nodo Geth ejecuta una sincronización completa (~300 gb), lo que significa que el trie de estado ya debería estar guardado. Intenté acceder directamente a la base de datos leveldb, pero está mezclada con la cadena de bloques en la carpeta chaindata, por lo que no está claro cuál es la estructura.

También intenté usar el método web3 dumpBlock, que funciona en teoría, pero lleva demasiado tiempo para ser prácticamente utilizable (horas).

¿Existe otro método API que pueda acceder al estado de prueba más rápido? ¿Alguna documentación sobre cómo se organiza la base de datos en la carpeta chaindata?

Respuestas (2)

Hacer esto usando web3RPC llevará una eternidad, como descubrió. Leer los .ldbarchivos es el camino a seguir, y es algo que ha surgido antes en preguntas similares.

No conozco ningún .ldbanalizador que funcione, actualizado, aunque debe haber alguno en existencia, por lo que me remito a otras respuestas más informadas que pueda obtener.


Mientras tanto...

Consulte: lectura de archivos LDB , que intenta apuntar el OP en la dirección de partes de la API trie (Go) de estado de Geth, con miras a escribir un analizador desde cero. (También hay un analizador de Go antiguo, aquí , aunque es probable que esté desactualizado).

Para obtener una mejor comprensión de cómo se presenta la base de datos, lea Explorando el estado de Ethereum trie con Node.js. El código de ejemplo es bastante antiguo, pero se puede hacer que funcione con algunos ajustes.

También relacionado, aunque sin una respuesta clara: ¿Cómo analizar bloques con Python?

También relacionado, específicamente con la codificación RPL dentro de los .ldbarchivos: ¿Formato de archivos LevelDB en el directorio de nodos? Problemas para extraer contenido con la API de python leveldb

Gracias. Información útil. El ejemplo de Node es el que he estado siguiendo. Desafortunadamente, el diseño de la base de datos de Geth no es el mismo y los enlaces de Go están desactualizados. Sin embargo, da una idea de dónde buscar el esquema actual.

También puede leer datos a través de una API de IPC localhost, que es mucho más rápida que el punto final http de RPC.