我使用 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/