Я хотел бы изучить данные внутри блокчейна Ethereum. Там хранятся все транзакции и контракты блокчейна Ethereum. Так что это интересный открытый набор данных, и я хотел бы извлечь из него некоторую информацию. Но я не совсем уверен, как я могу получить доступ к этим данным. Внутри ~/.ethereum/chaindata (Linux) я вижу файлы, содержащие блокчейн, но, в отличие от ключей, их нелегко изучить. Какая у него кодировка? Каковы наилучшие технические инструменты (например, базы данных) для работы с ним (неинтерактивным способом)?
Я действительно не думаю, что использование веб-сайта для изучения определенных транзакций или кода контракта, как это можно сделать на https://www.etherchain.org/ , является лучшим решением. Но вместо этого я хочу сначала изучить (все) данные, а затем провести классический исследовательский анализ данных, чтобы позже я мог сосредоточиться на определенных частях, которые хочу изучить.
Предложения о том, как работать с этими данными, о их формате и как ими манипулировать, приветствуются.
Структуры данных хранятся в попытках Merkle Patricia (прочитайте это и это ), обычно внутри хранилища LevelDB . Это chaindata
именно то.
Я думаю, что структура может немного зависеть от фактической реализации узла?
Вот две реализации trie, которые могут быть хорошей отправной точкой:
geth
): https://github.com/ethereum/go-ethereum/tree/master/trieКак только это будет понято, вам нужно будет искать структуры данных, отправляемые по сети, особенно blocks
, transactions
и accounts
. storage
Учетные записи относятся как к внешним, так и к контрактным учетным записям, последние имеют код контракта. Хранение относится к контрактному хранению.
Вернемся к анализу данных
Возможно, вам лучше создать традиционную базу данных NoSQL или SQL, если вы хотите иметь быстрый поиск любых транзакций, выполненных учетной записью или контрактом. Для чего chaindata
оптимизирована проверка транзакций и поддержание действительного состояния, а не для поиска в истории.
Я также заинтересован в анализе блокчейна Ethereum. На самом деле, я в первую очередь изучаю смарт-контракты. Пока я изучал документы и статьи об этом, я наткнулся на эту статью, где авторы анализируют Ethereum, namecoin и peercoin . У них есть довольно интересные выводы о количестве контрактов, расторжении контрактов и транзакциях.
В частности, они предоставляют модифицированный клиент geth для более глубокого изучения сети Ethereum. Он предоставлен на их странице GitHub . У меня еще не было времени попробовать это самому, но я сделаю это в ближайшие дни.
Меня интересует такой же проект. В настоящее время мне кажется, что API javascript обеспечивает наиболее надежный доступ к данным блокчейна:
https://github.com/ethereum/wiki/wiki/JavaScript-API
Вы можете использовать этот API от Geth или отдельный скрипт Node.js. С помощью этого API я заполнил таблицу транзакций в PostgreSQL. Однако мне неизвестен способ получения сообщений между контрактами в дополнение к транзакциям через этот API. Эти сообщения доступны через API etherchain.org, но я согласен с вами, что API etherchain, вероятно, не подходит для аналитики. Смотрите этот пост:
Это ваше местоположение: обеспечивайте полную прозрачность исполнения смарт-контракта:
Вот как можно отследить смарт-контракт
Вот руководство о том, как экспортировать данные Ethereum в csv и анализировать их с помощью Amazon Athena https://medium.com/@medvedev1088/exporting-and-analyzing-ethereum-blockchain-f5353414a94e.
Он использует https://github.com/medvedev1088/ethereum-etl , который выводит данные в файлы 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 |
Вишал Шарма