首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UniswapV2 swapExactTokensForETH批准和转让

UniswapV2 swapExactTokensForETH批准和转让
EN

Stack Overflow用户
提问于 2022-01-13 20:44:57
回答 1查看 1.1K关注 0票数 0

我试着创造一份明智的合同。我按照本教程学习了uniswap交换示例https://cryptomarketpool.com/how-to-swap-tokens-on-uniswap-using-a-smart-contract/

这里是我的一个智能契约函数,在这个函数中,我想用一些象征性的金额来交换一些eth。

代码语言:javascript
复制
  function swapTokenToEth(uint tokenAmount, uint amountOutMin) public {
    uint deadline = block.timestamp + 150;
    IERC20(token).transferFrom(msg.sender, address(this), tokenAmount);
    IERC20(token).approve(UNISWAP_V2_ROUTER, tokenAmount);
    uniswapRouter.swapExactTokensForETH(tokenAmount, amountOutMin, getPath(), msg.sender, deadline);
  }

我是从一个信托基金测试环境中调用这个交换方法的。

代码语言:javascript
复制
await dex.swapTokenToEth(tokenAmount, amountOutMin {
  from: accounts[1],
});

我一直在犯这个错误:

代码语言:javascript
复制
Error: Returned error: VM Exception while processing transaction: revert ERC20: transfer amount exceeds allowance -- Reason given: ERC20: transfer amount exceeds allowance.

我试过几件事,但现在我被困住了,我不明白这个错误。对如何解决这个问题有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-13 21:15:20

ERC20:转移金额超过免税额

这是来自合同的自定义错误消息。

根据上下文,我假设它来自token契约的函数transferFrom() (或此函数调用的另一个函数),来自失败的require()条件。

这意味着accounts[1] (执行swapTokenToEth()函数的用户)没有批准dex契约来操作它们的令牌。

解决方案:在执行dex.swapTokenToEth()之前,还需要从accounts[1]地址执行tokenContract.approve(dexAddress)。只执行一次approve()函数就足够了(除非您重新部署合同),并且数量足够--随着transferFrom()函数中使用的数量的增加,审批就会减少。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70702899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档