You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UniswapV2 swapExactTokensForETH在Kovan测试网执行失败排查

代码存在的问题如下:
  • 核心逻辑缺失:你注释了DAI.transferFrom(msg.sender, address(this), amountIn)这行代码,导致合约没有从调用者账户中拿到对应数量的DAI。后续你给Uniswap路由授权的是合约自身持有的DAI额度,而合约账户里根本没有对应DAI,兑换操作自然会失败。
  • 变量名拼写错误:你定义的Uniswap路由实例变量名为uniswapRouter2,但调用兑换方法时写的是uniswapRouter.swapExactTokensForETH,该变量未定义,代码甚至无法正常编译。
  • 交易有效期设置不合理:deadline = block.timestamp + 15仅给交易留了15秒的打包窗口,Kovan测试网出块时间波动极大,很容易出现交易还没被打包就过期的问题,建议将有效期调整为block.timestamp + 1800(预留30分钟)。
  • 未处理ETH接收逻辑:你调用swapExactTokensForETH时指定接收兑换后ETH的地址是合约自身address(this),如果你的合约没有实现receive()或fallback() payable函数来接收ETH,Uniswap向合约转ETH时会触发回滚,导致整个交易失败。
  • ERC20授权逻辑不兼容:DAI等部分ERC20代币要求,当已给某地址授权过非0额度时,再次调整授权额度需要先将额度设为0再写入新值,你直接调用approve的写法如果碰到合约之前已经给路由授权过剩余额度的情况,会直接触发approve failed报错。
  • 输入参数校验缺失:你没有校验传入的daiAmount是否是符合DAI 18位小数精度的数值,若调用方传入的是按DAI枚数计算的数值(比如传1代表1枚DAI)而没有转成wei单位,会导致实际兑换金额过小,触发交易池的最小输出限制导致失败。
  • 滑点设置不规范:你将swapExactTokensForETH的最小接收量参数设为0,虽然不会直接导致交易失败,但测试网资金池深度差,很容易出现兑换后得到的ETH数量远低于预期的情况,同时主网环境下该写法会让你面临极高的抢跑损失风险,建议按预期输出的90%设置最小接收量阈值。

内容的提问来源于stack exchange,提问作者Steven Ooi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:45:03