使用Uniswap V3的ISwapRouter实现ETH兑换DAI功能调用失败问题咨询
问题排查结果
你的代码存在3个核心错误直接导致所有调用失败,修正后即可正常运行:
1. SwapRouter地址填写错误
你当前用的0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D是Uniswap V2的路由合约地址,完全不兼容V3的接口规范,这是调用无理由回滚的核心原因。
以太坊主网Uniswap V3官方SwapRouter正确地址为:0xE592427A0AEce92De3Edee1F18E0157C05861564
2. WETH地址填写错误
你当前填的0xd0A1E359811322d97991E03f863a0C30C2cF029C是Kovan测试网的WETH地址,主网环境下无法匹配到对应的WETH-DAI交易池,直接触发回滚。
以太坊主网WETH9正确地址为:0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
3. 费率配置不统一(可选修正,避免后续逻辑异常)
你在兑换函数中用的是0.3%费率(fee=3000)的WETH-DAI池,但是报价函数getEstimatedETHforDAI中用的是1%费率(fee=10000)的池,两者的报价、流动性都不同,会出现查询结果和实际兑换结果偏差过大的问题,建议统一为相同费率。
其他注意事项
- 调用
convertEthToExactDai时,传入的ETH金额要比报价查询得到的所需ETH量多预留0.5%-5%的滑点空间,避免因价格波动触发amountInMaximum限制回滚。 - Quoter合约的报价接口本质是模拟交易执行,无需上链确认,调用时建议用静态调用即可,不需要发送实际交易。
内容的提问来源于stack exchange,提问作者Facundo La Rocca
相关产品推荐
相关产品推荐

