使用web3.py通过区块哈希获取Avalanche区块数据的报错问题咨询
报错原因
Avalanche C链采用POA类共识机制,区块头的extraData字段长度为80字节,而Web3.py默认采用以太坊POW链的校验规则,要求该字段长度不超过32字节,校验失败就会抛出该错误,以太坊主网是POW链所以不会触发该校验。
解决方案
给Web3实例注入Geth POA中间件,修改校验规则适配POA链即可,修改后的完整代码如下:
from web3 import Web3 # 导入POA中间件 from web3.middleware import geth_poa_middleware avalanche_url = 'https://api.avax.network/ext/bc/C/rpc' provider = Web3(Web3.HTTPProvider(avalanche_url)) # 注入POA中间件,layer=0表示优先加载该中间件 provider.middleware_onion.inject(geth_poa_middleware, layer=0) new_block_filter = provider.eth.filter('latest') while True: block_hashes = new_block_filter.get_new_entries() for block_hash in block_hashes: block = provider.eth.get_block(block_hash.hex()) # 提取时间戳直接取block.timestamp字段即可,为Unix时间戳格式 print(f"区块高度: {block.number}, 时间戳: {block.timestamp}")
内容的提问来源于stack exchange,提问作者MikkoP
相关产品推荐
相关产品推荐

