如何更快速地获取以太坊区块的总ETH交易价值
以太坊区块总交易价值查询优化方案
核心优化点
- 消除RPC请求瓶颈:原代码在循环中逐笔查询交易,每笔交易对应一次独立的HTTP请求,单区块包含上千笔交易时会产生大量网络IO开销。调用
w3.eth.get_block()时传入第二个参数full_transactions=True,可一次性拉取该区块所有交易的完整数据,仅需1次RPC请求,是性能提升的核心。 - 移除冗余逻辑:无需使用倒序计数的while循环,直接遍历返回的交易列表即可;同时移除不必要的pandas类型转换依赖,web3返回的交易数值可直接做类型转换与算术运算,执行效率更高。
- 修复原代码存在的低级错误:包括
block_hegiht变量拼写错误、Web3初始化语句缺少右括号的问题。
优化后代码
from web3 import Web3 # 注意自行引入你的config配置 import config w3 = Web3(Web3.HTTPProvider(config.INFURA_URL)) block_height = 13179360 # 传True直接获取完整交易列表,无需后续逐笔查询 block = w3.eth.get_block(block_height, full_transactions=True) total_value_eth = 0 for tx in block["transactions"]: trans_value_wei = tx["value"] if trans_value_wei > 0: # 直接在wei阶段判断大于0,避免不必要的单位转换 trans_value_eth = w3.from_wei(trans_value_wei, "ether") total_value_eth += float(trans_value_eth) print(total_value_eth)
优化后代码的运行耗时通常在1秒以内,远低于原实现的最高30秒耗时。
内容的提问来源于stack exchange,提问作者Diop Chopra
相关产品推荐
相关产品推荐

