Я создаю базовую аналитическую структуру для блокчейна Ethereum. В качестве первого шага мне нужно извлечь данные, и я хотел бы сделать это на Python. Я использую Geth в качестве клиента на OSX, поэтому, насколько я понимаю, блокчейн хранится локально ~/Library/Ethereum/chaindata
в LevelDB, то есть в бинарных файлах типа 496355.ldb
.
Как разобрать .ldb
файлы? Есть ли библиотека Python, которую я могу использовать для этого? Я просмотрел pyethereum, но не знаю, где искать, так как документации довольно мало.
Я могу использовать API etherchain.org, но это повлечет за собой много вызовов API и, вероятно, расстроит хороших людей на etherchain.org. Вот почему я предпочитаю анализировать блокчейн, хранящийся локально на моей машине. Но если на мгновение проигнорировать эту проблему, кто-нибудь знает краткое руководство по результату вызова API для данных транзакции, в результате чего получаются такие данные:
{'accountNonce': '200642', «сумма»: 2678970350000000000, 'blockHash': '0x47525d00eab0dcd87e9f8b0e9de2fe9f553f72576ef4f892ace49b2832e985bd', 'block_id': 1039153, 'газЛимит': 21000, «хеш»: «0x41bb75d8b20ae7e23fa7457d21a30a4007d0eb97fdb887caac834b759eeb3572», 'isContractTx': Нет, 'новый контракт': 0, 'parentHash': '0x41bb75d8b20ae7e23fa7457d21a30a4007d0eb97fdb887caac834b759eeb3572', 'цена': 50000000000, «получатель»: «0x30906581413d556de1a018adbe6cc63c88d58512», «отправитель»: «0x2a65aca4d5fc5b5c859090a6c34d164135398226», «время»: «2016-02-21T18:53:56.000Z», 'txIndex': Нет}
Я считаю, что понимаю большую часть этих данных, но был бы очень признателен за дополнительную информацию, чтобы заполнить пробелы в моем понимании.
Я реализовал парсер биткойн-блокчейна после того, как прочитал этот пост в блоге . Я не пытался изменить его для работы с блокчейном Ethereum, но, возможно, он может дать вам некоторые рекомендации. Вот синтаксический анализатор, реализованный в Go , который, мы надеемся, даст вам некоторые конкретные примеры Ethereum, от которых можно отталкиваться.
Ваш узел geth также будет действовать как сервер JSON-RPC. Вы можете использовать вики-страницу API для обхода блокчейна и извлечения данных блока. Вот интересный репозиторий git , который вы можете разветвить. Однако это небольшое шоу требует некоторых модификаций кода, поскольку владелец больше не поддерживает его. В этом репозитории вы найдете запрос на вытягивание, который работает значительно быстрее, однако для его работы требуется больше модификаций.
Поскольку вам нужны результаты в python, вы можете подключиться к своему экземпляру geth через IPC с помощью web3.py *. Это будет выглядеть примерно так :
>>> from web3.auto import w3
>>> w3.eth.getBlock(2000000)
AttributeDict({
'difficulty': 49824742724615,
'extraData': '0xe4b883e5bda9e7a59ee4bb99e9b1bc',
'gasLimit': 4712388,
'gasUsed': 21000,
'hash': '0xc0f4906fea23cf6f3cce98cb44e8e1449e455b28d684dfa9ff65426495584de6',
'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
'miner': '0x61c808d82a3ac53231750dadc13c777b59310bd9',
'nonce': '0x3b05c6d5524209f1',
'number': 2000000,
'parentHash': '0x57ebf07eb9ed1137d41447020a25e51d30a0c272b5896571499c82c33ecb7288',
'receiptRoot': '0x84aea4a7aad5c5899bd5cfc7f309cc379009d30179316a2a7baa4a2ea4a438ac',
'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
'size': 650,
'stateRoot': '0x96dbad955b166f5119793815c36f11ffa909859bbfeb64b735cca37cbf10bef1',
'timestamp': 1470173578,
'totalDifficulty': 44010101827705409388,
'transactions': ['0xc55e2b90168af6972193c1f86fa4d7d7b31a29c156665d15b9cd48618b5177ef'],
'transactionsRoot': '0xb31f174d27b99cdae8e746bd138a01ce60d8dd7b224f7c60845914def05ecc58',
'uncles': [],
})
* Попробуйте бета-версию (v4), установленную вместе с:
pip install --pre web3
антикемпер
Ричард Хоррокс