web3.py连Ganache部署合约报eth_maxPriorityFeePerGas不支持错误
错误原因
- 核心触发逻辑是你使用的web3.py版本默认启用EIP-1559动态手续费交易模式,只要没有显式指定交易类型为传统Legacy模式,就算手动传入
gasPrice参数,库仍会优先尝试调用eth_maxPriorityFeePerGas、eth_feeHistory两个RPC接口计算优先费与基础费;你本地运行的Ganache节点版本较旧、或未开启伦敦升级兼容,没有实现这两个RPC方法,因此先弹出方法调用异常的警告,后续直接抛出参数不支持的报错。 - 部分场景下参数未生效是因为字段拼写错误:EIP-1559模式下gas相关参数字段为
maxFeePerGas、maxPriorityFeePerGas,传统Legacy交易的gas字段才是gasPrice,字段不匹配时传入的gas配置会被直接忽略。
修复方案
- 方案1:显式指定使用传统Legacy交易,彻底绕开EIP-1559逻辑,适配旧版本本地区块链节点
构建交易时新增type字段指定交易类型,参考代码如下:# 合约部署交易构建示例 deploy_tx = SimpleStorage.constructor().build_transaction( { "chainId": w3.eth.chain_id, "from": your_deploy_address, "nonce": w3.eth.get_transaction_count(your_deploy_address), "gas": 6721975, # 可根据合约实际大小调整gas上限 "gasPrice": w3.eth.gas_price, "type": "0x0" # 关键配置:强制指定为传统Legacy交易类型,不触发EIP-1559相关RPC调用 } ) - 方案2:升级本地Ganache到最新正式版本,新版Ganache默认兼容伦敦升级与EIP-1559规则,支持上述两个RPC方法,可直接使用动态费模式构建交易,参考代码如下:
# 新版Ganache下EIP-1559交易构建示例 deploy_tx = SimpleStorage.constructor().build_transaction( { "chainId": w3.eth.chain_id, "from": your_deploy_address, "nonce": w3.eth.get_transaction_count(your_deploy_address), "gas": 6721975, "maxFeePerGas": w3.eth.gas_price * 2, "maxPriorityFeePerGas": w3.to_wei(2, "gwei") } ) - 避坑提示:web3.py v6及以上版本中,旧版
buildTransaction方法已更名为build_transaction,方法名不匹配也可能导致参数传入失效,编写代码时注意和本地安装的web3.py版本API对齐。
内容的提问来源于stack exchange,提问作者Alex Pan
相关产品推荐
相关产品推荐

