在Optimism网络使用Python调用Web3时遭遇ExtraDataLength错误求助
问题解决:extraData长度不匹配(POA链适配问题)
问题根源
你已经手动给自己创建的w3实例注入了POA中间件,但Uniswap库内部会用你传入的provider字符串重新生成一个未配置中间件的Web3实例,导致中间件没实际生效,所以依然触发extraData长度错误。
解决方案
不要给Uniswap传provider字符串,而是直接传入你已经配置好中间件的w3实例,用web3参数替代provider参数。
修改后的完整代码
from uniswap import Uniswap import web3 from web3.middleware import geth_poa_middleware TOKEN_ID = 240756 # 创建并配置好POA中间件的Web3实例 w3 = web3.Web3(web3.HTTPProvider('https://optimism-mainnet.infura.io/v3/{MY_ID}')) w3.middleware_onion.inject(geth_poa_middleware, layer=0) address = "" private_key = "" version = 3 # 初始化Uniswap时传入已配置好的w3实例,而非provider字符串 uniswap = Uniswap(address=address, private_key=private_key, version=version, web3=w3) tx = uniswap.close_position(TOKEN_ID) print(tx)
关键说明
- 确保所有和链交互的Web3实例都应用了POA中间件,这里直接复用同一个实例给Uniswap库,避免重复创建导致的配置不一致
- Optimism属于POA类链,必须注入该中间件才能正常处理区块头的extraData字段
内容的提问来源于stack exchange,提问作者ALBERT V
相关产品推荐
相关产品推荐

