Изучение и анализ блокчейна Ethereum

Я хотел бы изучить данные внутри блокчейна Ethereum. Там хранятся все транзакции и контракты блокчейна Ethereum. Так что это интересный открытый набор данных, и я хотел бы извлечь из него некоторую информацию. Но я не совсем уверен, как я могу получить доступ к этим данным. Внутри ~/.ethereum/chaindata (Linux) я вижу файлы, содержащие блокчейн, но, в отличие от ключей, их нелегко изучить. Какая у него кодировка? Каковы наилучшие технические инструменты (например, базы данных) для работы с ним (неинтерактивным способом)?

Я действительно не думаю, что использование веб-сайта для изучения определенных транзакций или кода контракта, как это можно сделать на https://www.etherchain.org/ , является лучшим решением. Но вместо этого я хочу сначала изучить (все) данные, а затем провести классический исследовательский анализ данных, чтобы позже я мог сосредоточиться на определенных частях, которые хочу изучить.

Предложения о том, как работать с этими данными, о их формате и как ими манипулировать, приветствуются.

Взгляните на этот ethereum.stackexchange.com/questions/28976/…

Ответы (5)

Структуры данных хранятся в попытках Merkle Patricia (прочитайте это и это ), обычно внутри хранилища LevelDB . Это chaindataименно то.

Я думаю, что структура может немного зависеть от фактической реализации узла?

Вот две реализации trie, которые могут быть хорошей отправной точкой:

Как только это будет понято, вам нужно будет искать структуры данных, отправляемые по сети, особенно blocks, transactionsи accounts. storageУчетные записи относятся как к внешним, так и к контрактным учетным записям, последние имеют код контракта. Хранение относится к контрактному хранению.

Вернемся к анализу данных

Возможно, вам лучше создать традиционную базу данных NoSQL или SQL, если вы хотите иметь быстрый поиск любых транзакций, выполненных учетной записью или контрактом. Для чего chaindataоптимизирована проверка транзакций и поддержание действительного состояния, а не для поиска в истории.

Парсер цепочки Ethereum прослушивает события цепочки Ethereum (блока) и превращает их в записи MongoDB. Он устарел и в настоящее время не компилируется, но может быть хорошей отправной точкой.

Я также заинтересован в анализе блокчейна 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, вероятно, не подходит для аналитики. Смотрите этот пост:

Можно ли получить контрактные сообщения от Geth?

всего 2 вопроса: сколько времени занимает заполнение таблицы транзакций в PostgreSQL и пробовали ли вы то же самое в базе данных NoSQL?
Моему коду потребовалось несколько дней, чтобы заполнить таблицу транзакций, хотя вполне возможно, что мой код неэффективен. Вызовы API для чтения блокчейна кажутся самой медленной частью. Я не пробовал подход NoSQL.

Это ваше местоположение: обеспечивайте полную прозрачность исполнения смарт-контракта:

https://live.ether.camp/

Вот как можно отследить смарт-контракт

введите описание изображения здесь

Вот руководство о том, как экспортировать данные 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      |