我是靠谱客的博主 害羞月饼,最近开发中收集的这篇文章主要介绍ethereum-etl拉取以太坊数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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拉取以太坊数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部