javascript - 交易已恢复 : function returned an unexpected amount of data while testing with ether. js(uniswapv2router.swapExactTokensForTokens 函数)

标签 javascript solidity hardhat ether

我使用 ether.js 测试 UNISWAP_V2_ROUTER.swapExactTokensForTokens 和此行:await swapInstances.connect(accounts[0]).swap(tokenIn, tokenOut, amountIn, amountOutMin, to); 导致此错误:事务已恢复:函数返回了意外数量的数据

为什么?

单元测试:

 it("should be able to swap tokens", async function () {
            accounts = await ethers.getSigners()
            to = await accounts[1].getAddress();
            const Swap = await ethers.getContractFactory("Swap", accounts[0]);
            const swapInstances = await Swap.deploy();
            const LocandaToken = await ethers.getContractFactory("LocandaToken", accounts[0]); //ERC20
            const locandaToken = await LocandaToken.deploy();
            const RubiconPoolToken = await ethers.getContractFactory("RubiconPoolToken", accounts[1]); //ERC20
            const rubiconPoolToken = await RubiconPoolToken.deploy();
            tokenIn = locandaToken.address;
            tokenOut = rubiconPoolToken.address;

            await locandaToken.connect(accounts[0]).transfer(swapInstances.address, amountIn);
            await rubiconPoolToken.connect(accounts[1]).transfer(swapInstances.address, amountIn);

            
            const ethBalance = await ethers.provider.getBalance(accounts[0].address);
            console.log("eth balance" + ethBalance);

            await locandaToken.connect(accounts[0]).approve(swapInstances.address, amountIn)
            const test = await swapInstances.connect(accounts[0]).swap(tokenIn, tokenOut, amountIn, amountOutMin, to);
        })

交换功能:

function swap(
        address _tokenIn,
        address _tokenOut,
        uint256 _amountIn,
        uint256 _amountOutMin,
        address _to // address where sending the tokenout
    ) external {
        IERC20(_tokenIn).transferFrom(msg.sender, address(this), _amountIn); // transfer from user wallet to this contract
        IERC20(_tokenIn).approve(UNISWAP_V2_ROUTER, _amountIn); // aprove the router to spend _tokenin
        address[] memory path; //represents the path/flow of the swap

        if (_tokenIn == WETH || _tokenOut == WETH) {
            path = new address[](2);
            path[0] = _tokenIn;
            path[1] = _tokenOut;
        } else {
            path = new address[](3);
            path[0] = _tokenIn;
            path[1] = WETH;
            path[2] = _tokenOut;
        }

        IUniswapV2Router(UNISWAP_V2_ROUTER).swapExactTokensForTokens(
            _amountIn,
            _amountOutMin,
            path,
            _to,
            block.timestamp
        );

     
    }

最佳答案

当我使用 Router1 地址而不是 Router2 地址时,我也遇到了此错误。

使用正确的路由器地址后,问题解决。

关于javascript - 交易已恢复 : function returned an unexpected amount of data while testing with ether. js(uniswapv2router.swapExactTokensForTokens 函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73395638/

相关文章:

javascript - es6 传播运算符如何处理对象到 Prop 的转换?

javascript - 安全帽 "deployed()"有什么作用?

solidity - 将结构数组传递给 Solidity Contract 的构造函数

javascript - 如何通过 Hardhat 测试 RSK 测试网部署的智能合约?

ethereum - 从私有(private)区 block 链中的另一个合约调用一个合约中的函数

javascript - 如何显示智能合约中的所有事件日志?

javascript - 如何使复选框选中 onclick 从下拉列表中选择一个选项 : JS

具有就地值定义的 javascript 对象字面量

javascript - 如何将值/数据放入选项值 =""中?

arrays - Solidity:UnimplementedFeatureError:此处未实现嵌套动态数组