UniswapV2 swapExactTokensForETH 批准并转账
UniswapV2 swapExactTokensForETH approve and transfer
我尝试创建一个智能合约。我按照本教程获得了 uniswap 交换示例 https://cryptomarketpool.com/how-to-swap-tokens-on-uniswap-using-a-smart-contract/
这是我的智能合约功能之一,我想在其中用一些代币金额交换一些 eth。
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);
}
我正在从 Truffle 测试环境中调用此交换方法
await dex.swapTokenToEth(tokenAmount, amountOutMin {
from: accounts[1],
});
我不断收到此错误:
Error: Returned error: VM Exception while processing transaction: revert ERC20: transfer amount exceeds allowance -- Reason given: ERC20: transfer amount exceeds allowance.
我尝试了几件事,但现在卡住了,我不明白这个错误。
关于如何解决这个问题的任何提示?
ERC20: transfer amount exceeds allowance
这是合同中的自定义错误消息。
根据上下文,我假设它来自 token
合约的函数 transferFrom()
(或此函数调用的另一个函数),来自失败的 require()
条件。
这意味着 accounts[1]
(执行 swapTokenToEth()
函数的用户)尚未批准 dex
合约来操纵他们的代币。
解决方法:在执行dex.swapTokenToEth()
之前,还需要从accounts[1]
地址执行tokenContract.approve(dexAddress)
。只需执行一次 approve()
函数(除非您重新部署合约)并提供足够的金额就足够了 - 批准会随着 transferFrom()
函数中使用的每个金额而减少。
我尝试创建一个智能合约。我按照本教程获得了 uniswap 交换示例 https://cryptomarketpool.com/how-to-swap-tokens-on-uniswap-using-a-smart-contract/
这是我的智能合约功能之一,我想在其中用一些代币金额交换一些 eth。
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);
}
我正在从 Truffle 测试环境中调用此交换方法
await dex.swapTokenToEth(tokenAmount, amountOutMin {
from: accounts[1],
});
我不断收到此错误:
Error: Returned error: VM Exception while processing transaction: revert ERC20: transfer amount exceeds allowance -- Reason given: ERC20: transfer amount exceeds allowance.
我尝试了几件事,但现在卡住了,我不明白这个错误。 关于如何解决这个问题的任何提示?
ERC20: transfer amount exceeds allowance
这是合同中的自定义错误消息。
根据上下文,我假设它来自 token
合约的函数 transferFrom()
(或此函数调用的另一个函数),来自失败的 require()
条件。
这意味着 accounts[1]
(执行 swapTokenToEth()
函数的用户)尚未批准 dex
合约来操纵他们的代币。
解决方法:在执行dex.swapTokenToEth()
之前,还需要从accounts[1]
地址执行tokenContract.approve(dexAddress)
。只需执行一次 approve()
函数(除非您重新部署合约)并提供足够的金额就足够了 - 批准会随着 transferFrom()
函数中使用的每个金额而减少。