为什么我会收到此错误错误:事务已在没有原因字符串的情况下恢复。当尝试在 uniswap 上交换代币时?

问题描述 投票:0回答:3

我正在尝试在uniswap unsing Hardhat 的主网分叉上交换代币,但我收到此错误:

Error: Transaction reverted without a reason string
。而且我真的不知道为什么。

这是我的交换功能:

    function swap(address router, address _tokenIn, address _tokenOut, uint _amount) public {
        IERC20(router).approve(router, _amount);
        address[] memory path;
        path = new address[](2);
        path[0] = _tokenIn;
        path[1] = _tokenOut;
        uint deadline = block.timestamp + 300;  
        IUniswapV2Router(router).swapExactTokensForTokens(_amount, 1, path, address(this), deadline);  
}

这是一个简单的功能,应该可以工作。我就是这样称呼它的:

await arb.swap(
    uniAddress,
    wethAddress,
    daiAddress,
    ethers.utils.parseEther('0.5')
);

感谢您的解答!

这里还有我打电话的地址,只是为了验证它们是否正确,但我很确定它们是:

const wethAddress = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';
const daiAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
const uniAddress = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D';
blockchain solidity smartcontracts uniswap
3个回答
5
投票

Weth
与其他代币不同,您无法使用
swapTokensForTokens
。我们必须使用
swapEthForTokens
函数来代替,并且您必须单独声明数据选项。

因此,对于您的情况,我们需要这样做:

可靠性代码:

function swapEth(address router, address _tokenIn, address _tokenOut, uint _amount) public {
    IERC20(router).approve(router, _amount);
    address[] memory path;
    path = new address[](2);
    path[0] = _tokenIn;
    path[1] = _tokenOut;
    uint deadline = block.timestamp + 300;
    IUniswapV2Router(router). swapExactETHForTokens(... parameters);  
}

JS代码

const dataOption = { gasPrice: ethers.getDefaultProvider().getGasPrice(), gasLimit: 310000, value: ethers.utils.parseEther('0.5') }

await arb.swap(`enter code here`
    uniAddress,
    wethAddress,
    daiAddress,
    ethers.utils.parseEther('0.5'), // this parameter should be remove from the function declaration as well as in this Javascript
    dataOption
);


0
投票

添加仅供参考,但如果您设置的 Gas 价格过高或过低,您也可能会从提供商/安全帽处收到此错误。在撰写本文时,5 gwei 似乎是合适的


0
投票

如果您正在生成存根(例如 Golang 的abigen),请检查使用的 ABI 是否是最新的。由于真正的智能合约和 Golang 存根之间不匹配,我得到了

Error: Transaction reverted without a reason string

© www.soinside.com 2019 - 2024. All rights reserved.