Uniswap
Pancakeswap(壽司交換叉)交換令牌恢復
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。我究竟做錯了什麼?
謝謝。
編輯:它的行為很奇怪,因為程式碼適用於一些高流動性的代幣,但停止使用鮮為人知的代幣。
這個函式有一個參數
uint256 amountOutMin
。該參數基本上表示如果您從交換中獲得的代幣數量少於該數量,則必須取消交換。如果您收到
INSUFFICIENT_OUTPUT_AMOUNT
錯誤,則意味著您從交換中獲得的令牌低於amountOutMin
您設置的令牌。這通常是由於交易發送和開采之間的價格變化,或者如果您的掉期比流動資金池規模大,則滑點高。