首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pancakeswap (寿司交换叉)交换代币

Pancakeswap (寿司交换叉)交换代币
EN

Ethereum用户
提问于 2021-03-22 18:26:39
回答 1查看 879关注 0票数 1
代码语言:javascript
复制
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。我做错了什么?

谢谢。

编辑:它的行为非常奇怪,因为代码使用一些高流动性的令牌,但停止使用不太知名的令牌。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2021-03-22 19:25:17

此函数接受一个参数uint256 amountOutMin。这个参数基本上表示,如果从交换区中得到的令牌数量小于该值,则必须取消交换。

如果您得到一个INSUFFICIENT_OUTPUT_AMOUNT错误,这意味着您从交换中得到的令牌低于您设置的amountOutMin。这通常是由于交易在交易发送和开采之间的价格变化,或者如果你的掉期比流动性池的规模大的话,价格会出现很大的下滑。

票数 3
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/95057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档