概述
Ethereum-ETL 可将区块链数据转换为方便的格式,如 CSV 和关系数据库。
1. 安装 Ethereum ETL
pip3 install ethereum-etl
2. 命令
Options:
-s, --start-block INTEGER
起始区块
-e, --end-block INTEGER
结束区块(必需)
-b, --batch-size INTEGER
每次要导出的块的数量
-p, --provider-uri TEXT
web3提供程序的URI
例如:file://$HOME/Library/Ethereum/geth.ipc
或者 https://mainnet.infura.io
-w, --max-workers INTEGER
工人的最大数量
--blocks-output TEXT
块的输出文件。如果没有提供,块将不会被导出。使用“-”表示标准输出
--transactions-output TEXT
事务的输出文件。如果未提供事务将不会被导出。使用“-”表示标准输出
-h, --help
显示此消息并退出
2.1 导出block和transaction
ethereumetl export_blocks_and_transactions --start-block 0 --end-block 500000
--provider-uri file://$HOME/Library/Ethereum/geth.ipc
--blocks-output blocks.csv --transactions-output transactions.csv
如果你只想导出事务/块,可以省略–blocks-output或–transactions-output选项。
通过设置–batch-size、–max-workers可以调整性能。
2.2 导出token transfer
ethereumetl export_token_transfers --start-block 0 --end-block 500000
--provider-uri file://$HOME/Library/Ethereum/geth.ipc --output token_transfers.csv
--tokens 0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C --tokens 0x80fB784B7eD66730e8b1DBd9820aFD29931aab03
2.3 导出收据和日志
首先从transactions.csv
(用export_blocks_and_transactions
导出)中提取事务散列:
ethereumetl extract_csv_column --input transactions.csv --column hash --output transaction_hashes.txt
然后导出receipt和log:
ethereumetl export_receipts_and_logs --transaction-hashes transaction_hashes.txt
--provider-uri file://$HOME/Library/Ethereum/geth.ipc --receipts-output receipts.csv --logs-output logs.csv
更多功能请参考https://ethereum-etl.readthedocs.io/en/latest/commands/
3. 测试
启动ganache测试链
ganache-cli -p 7545
生成一笔transaction
accounts = eth.accounts
eth.sendTransaction({from:accounts[0],to:accounts[1],value:100})
# "0xe4468de59b064dd9243eb19361e6b46e701faf1ed79937d7a27d108383412b5f"
导出block和transaction
ethereumetl export_blocks_and_transactions --start-block 0 --end-block 1
--provider-uri http://localhost:7545
--blocks-output blocks.csv --transactions-output transactions.csv
查看transactions.csv
cat transactions.csv
#hash,nonce,block_hash,block_number,transaction_index,from_address,to_address,value,gas,gas_price,input,block_timestamp,max_fee_per_gas,max_priority_fee_per_gas,transaction_type
#0xe4468de59b064dd9243eb19361e6b46e701faf1ed79937d7a27d108383412b5f,57,0xd241f04650dca9527ada74078e1c123dcca454987d69f82b8d5df4c37fa787fb,60,0,0x6788994d9c3319d49b91e8736c0f948d34a7275e,0x7fe332d2b77d584909a4a6f7901d6996b0ef485b,100,90000,20000000000,0x,1667475822,,,
附:如果只想要获取原生的transfer transaction,则需要修改ethereum-etl
的代码,操作比较简单
cd /usr/local/lib/python3.8/dist-packages/ethereumetl/jobs
vim export_blocks_job.py
修改其中的_export_block(self, block)
方法
def _export_block(self, block):
if self.export_blocks:
self.item_exporter.export_item(self.block_mapper.block_to_dict(block))
if self.export_transactions:
for tx in block.transactions:
self.item_exporter.export_item(self.transaction_mapper.transaction_to_dict(tx))
替换为
def _export_block(self, block):
if self.export_blocks:
self.item_exporter.export_item(self.block_mapper.block_to_dict(block))
if self.export_transactions:
for tx in block.transactions:
# 过滤掉value为0的交易,剩下的即为原生的transfer transaction
if tx.value == 0:
continue
self.item_exporter.export_item(self.transaction_mapper.transaction_to_dict(tx))
最后
以上就是害羞月饼为你收集整理的ethereum-etl拉取以太坊数据的全部内容,希望文章能够帮你解决ethereum-etl拉取以太坊数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复