Explorando y analizando la cadena de bloques de Ethereum

Me gustaría explorar los datos dentro de la cadena de bloques de Ethereum. Todas las transacciones y contratos de Ethereum Blockchain se almacenan allí. Por lo tanto, es un conjunto de datos abierto interesante y me gustaría obtener algunas ideas de él. Pero no estoy del todo seguro de cómo puedo acceder a estos datos. Dentro de ~/.ethereum/chaindata (Linux) puedo ver los archivos que contienen la cadena de bloques pero, a diferencia de las claves, no se pueden explorar fácilmente. ¿Qué tipo de codificación tiene? ¿Cuáles son las mejores herramientas técnicas (como bases de datos) para trabajar con él (de forma no interactiva)?

Realmente no creo que usar un sitio web para explorar ciertas transacciones o contratar código como lo que puede hacer en https://www.etherchain.org/ sea la mejor solución. Pero en cambio, primero quiero explorar los datos (todos) y hacer un análisis de datos exploratorio clásico, para luego poder concentrarme en ciertas partes que quiero explorar.

Se agradecen sugerencias sobre cómo trabajar con estos datos, sobre su formato y cómo manipularlos.

Respuestas (5)

Las estructuras de datos se almacenan en los intentos de Merkle Patricia (lea esto y esto ), generalmente dentro de una tienda LevelDB . El chaindataes exactamente eso.

Creo que la estructura podría depender ligeramente de la implementación real del nodo.

Aquí hay dos de las implementaciones trie, podrían ser un buen punto de partida:

Una vez que lo entienda, deberá buscar las estructuras de datos enviadas a través de la red, especialmente blocks, y . Las cuentas se refieren tanto a cuentas de propiedad externa como de contrato, estas últimas con código de contrato. El almacenamiento se refiere al almacenamiento por contrato.transactionsaccountsstorage

De vuelta al punto de análisis de datos

Es mejor que cree una base de datos NoSQL o SQL tradicional si desea tener búsquedas rápidas sobre cualquier transacción realizada por una cuenta o contrato. Para lo que chaindataestá optimizado es para validar transacciones y mantener un estado válido, y no para búsquedas históricas.

El analizador de cadena Ethereum escucha los eventos de la cadena Ethereum (bloque) y los convierte en registros MongoDB. Está desactualizado y no se está compilando actualmente, pero podría ser un buen punto de partida.

También estoy interesado en analizar la cadena de bloques de Ethereum. De hecho, estoy buscando principalmente contratos inteligentes. Mientras investigaba documentos y artículos sobre esto, me topé con este documento donde los autores analizan Ethereum, namecoin y peercoin . Tienen algunos hallazgos bastante interesantes sobre el número de contratos, la terminación de contratos y las transacciones.

Más específicamente, proporcionan un cliente geth modificado para profundizar en la red Ethereum. Se proporciona en su página de GitHub . Todavía no he tenido tiempo de probarlo yo mismo, pero lo haré en los próximos días.

hágame saber qué tan bien funciona y/o considere hacer una guía o tutorial sobre esta herramienta. Hay muchas personas interesadas en el análisis de blockchain pero no suficientes recursos.

Estoy interesado en el mismo proyecto. Actualmente, me parece que la API de JavaScript proporciona el acceso más sólido a los datos de la cadena de bloques:

https://github.com/ethereum/wiki/wiki/JavaScript-API

Puede usar esta API desde Geth o un script independiente de Node.js. Rellené una tabla de transacciones en PostgreSQL usando esta API. Sin embargo, no conozco una forma de obtener mensajes de contrato a contrato además de transacciones a través de esta API. Estos mensajes están disponibles a través de la API de etherchain.org, pero estoy de acuerdo con usted en que la API de etherchain probablemente no sea adecuada para el análisis. Ver esta publicación:

¿Es posible obtener mensajes de contrato de Geth?

solo 2 preguntas: ¿cuánto tiempo se tarda en completar una tabla de transacciones en PostgreSQL y ha intentado lo mismo en una base de datos NoSQL?
Mi código tardó varios días en llenar la tabla de transacciones, aunque es muy posible que mi código sea ineficiente. Las llamadas a la API para leer la cadena de bloques parecen ser la parte lenta. No he probado un enfoque NoSQL.

Esa es su ubicación: proporcione total transparencia de la ejecución del contrato inteligente:

https://live.ether.camp/

Así es como se puede rastrear el contrato inteligente

ingrese la descripción de la imagen aquí

Aquí hay una guía sobre cómo exportar datos de Ethereum a csv y analizarlos con Amazon Athena https://medium.com/@medvedev1088/exporting-and-analyzing-ethereum-blockchain-f5353414a94e

Utiliza https://github.com/medvedev1088/ethereum-etl que genera los datos en blocks.csv, transactions.csv, erc20_transfers.csv.

blocks.csv

Column                  | Type               |
------------------------|---------------------
block_number            | bigint             |
block_hash              | hex_string         |
block_parent_hash       | hex_string         |
block_nonce             | hex_string         |
block_sha3_uncles       | hex_string         |
block_logs_bloom        | hex_string         |
block_transactions_root | hex_string         |
block_state_root        | hex_string         |
block_miner             | hex_string         |
block_difficulty        | bigint             |
block_total_difficulty  | bigint             |
block_size              | bigint             |
block_extra_data        | hex_string         |
block_gas_limit         | bigint             |
block_gas_used          | bigint             |
block_timestamp         | bigint             |
block_transaction_count | bigint             |

transactions.csv

Column              |    Type     |
--------------------|--------------
tx_hash             | hex_string  |
tx_nonce            | bigint      |
tx_block_hash       | hex_string  |
tx_block_number     | bigint      |
tx_index            | bigint      |
tx_from             | hex_string  |
tx_to               | hex_string  |
tx_value            | bigint      |
tx_gas              | bigint      |
tx_gas_price        | bigint      |
tx_input            | hex_string  |

erc20_transfers.csv

Column              |    Type     |
--------------------|--------------
erc20_token         | hex_string  |
erc20_from          | hex_string  |
erc20_to            | hex_string  |
erc20_value         | bigint      |
erc20_tx_hash       | hex_string  |
erc20_block_number  | bigint      |