Uniswap

Pancakeswap(壽司交換叉)交換令牌恢復

  • April 9, 2021
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您設置的令牌。這通常是由於交易發送和開采之間的價格變化,或者如果您的掉期比流動資金池規模大,則滑點高。

引用自:https://ethereum.stackexchange.com/questions/95057