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.
Las estructuras de datos se almacenan en los intentos de Merkle Patricia (lea esto y esto ), generalmente dentro de una tienda LevelDB . El chaindata
es 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:
geth
): https://github.com/ethereum/go-ethereum/tree/master/trieUna 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.transactions
accounts
storage
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 chaindata
está optimizado es para validar transacciones y mantener un estado válido, y no para búsquedas históricas.
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.
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:
Esa es su ubicación: proporcione total transparencia de la ejecución del contrato inteligente:
Así es como se puede rastrear el contrato inteligente
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 |
Vishal Sharma