function swapTokenForToken(uint256 amountIn, address tokenIn, address tokenOut, uint256 amountOutMin) public payable returns (uint256){
address[] memory path = new address[](2);
path[0] = tokenIn;
path[1] = tokenOut;
uint256[] memory amounts = PancakeLibrary.getAmountsOut(Pancakeswap_Factory_Address, amountIn, path);
require(amounts[amounts.length - 1] >= amountOutMin, 'BSCBB: INSUFFICIENT_OUTPUT_AMOUNT');
assert(IERC20(tokenIn).transfer(PancakeLibrary.pairFor(Pancakeswap_Factory_Address, path[0], path[1]), amounts[0]));
(address input, address output) = (path[0], path[1]);
(address token0,) = PancakeLibrary.sortTokens(input, output);
uint amountOut = amounts[1];
(uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
IPancakePair(PancakeLibrary.pairFor(Pancakeswap_Factory_Address, input, output)).swap(
amount0Out, amount1Out, address(this), new bytes(0)
);
return amountOut;
}我正在尝试使用以下代码交换两个令牌。唯一的问题是事务恢复,并使用错误代码: Pancake: INSUFFICIENT_OUTPUT_AMOUNT。我做错了什么?
谢谢。
编辑:它的行为非常奇怪,因为代码使用一些高流动性的令牌,但停止使用不太知名的令牌。
发布于 2021-03-22 19:25:17
此函数接受一个参数uint256 amountOutMin。这个参数基本上表示,如果从交换区中得到的令牌数量小于该值,则必须取消交换。
如果您得到一个INSUFFICIENT_OUTPUT_AMOUNT错误,这意味着您从交换中得到的令牌低于您设置的amountOutMin。这通常是由于交易在交易发送和开采之间的价格变化,或者如果你的掉期比流动性池的规模大的话,价格会出现很大的下滑。
https://ethereum.stackexchange.com/questions/95057
复制相似问题