以太坊链授权Uniswap Router花费WETH时遇「Method not found」错误求助
问题解决:以太坊链上授权交易报Method not found错误
核心原因分析
错误码-32601表示JSON-RPC方法未找到,大概率是节点配置错误或EIP-1559交易参数不完整导致的——BSC链对交易参数兼容性更宽松,而以太坊主网要求严格遵循EIP-1559规范,同时必须连接以太坊专属RPC节点。
具体修复步骤
1. 确认RPC节点为以太坊主网节点
检查PROVIDER变量,必须使用以太坊主网的RPC地址,比如公开节点https://ethereum.publicnode.com/,或第三方服务商(Alchemy/Infura)提供的带API密钥的节点地址。若继续使用BSC节点地址,会因链不匹配导致方法调用失败。
2. 补充EIP-1559必填交易参数
以太坊主网要求EIP-1559交易必须同时设置maxFeePerGas和maxPriorityFeePerGas,当前代码仅设置了前者。同时建议自动估算gas用量,避免硬编码不足:
UNISWAP_ROUTER = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D" WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" web3 = Web3(HTTPProvider(PROVIDER)) token = web3.eth.contract(address=WETH, abi=abi) nonce = web3.eth.get_transaction_count(WALLET_ADDRESS) amount = web3.to_wei(0.01, 'ether') block = web3.eth.get_block('latest') next_gas_price = math.ceil(block.baseFeePerGas) # 新增优先级矿工费,通常设置为2-5 gwei max_priority_fee = web3.to_wei(2, 'gwei') # 自动估算gas用量,预留10%余量避免gas不足 gas_estimate = token.functions.approve(UNISWAP_ROUTER, amount).estimate_gas({ "from": WALLET_ADDRESS }) x = token.functions.approve(UNISWAP_ROUTER, amount).build_transaction({ "from": WALLET_ADDRESS, "maxFeePerGas": next_gas_price, "maxPriorityFeePerGas": max_priority_fee, "gas": int(gas_estimate * 1.1), "nonce": nonce })
3. 验证web3版本兼容性
确保使用web3.py v5.x及以上版本,旧版本对EIP-1559支持不完善。可通过以下命令升级:
pip install --upgrade web3
内容的提问来源于stack exchange,提问作者Westel
相关产品推荐
相关产品推荐

