0

我正在尝试使用 IPancakeRouter02 交换两个令牌。由于 BSC 测试网上没有流动性,我创建了两个要交换的代币,但是当我调用交换时,调用“swapExactTokensForTokens”函数时交易会恢复。有谁知道如何修理它?addLiquidity 功能有效,因此路由器应该没有问题。

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

import "./IPancakeFactory.sol";
import "./IPancakeRouter02.sol";
import "./TokenA.sol";
import "./TokenB.sol";

contract LiquidityPool {
    PancakeswapFactoryInterface pancakeswapFactory;
    IPancakeRouter02 pancakeswapRouter;

    // Test Tokens (for swap)
    TokenA public tokenA = TokenA(new TokenA());
    TokenB public tokenB = TokenB(new TokenB());

    constructor() {
        // MAINNET

        /*pancakeswapFactory = PancakeswapFactoryInterface(
            0x6725F303b657a9451d8BA641348b6761A6CC7a17
        );

        pancakeswapRouter = IPancakeRouter02(
            0x10ED43C718714eb63d5aA57B78B54704E256024E
        );*/

        // TESTNET
        pancakeswapFactory = PancakeswapFactoryInterface(
            0x6725F303b657a9451d8BA641348b6761A6CC7a17
        );

        pancakeswapRouter = IPancakeRouter02(
            0xD99D1c33F9fC3444f8101754aBC46c52416550D1
        );
    }

    function createNewPair() public returns (address) {
        require(
            pancakeswapFactory.getPair(address(tokenA), address(tokenB)) ==
                address(0),
            "Pair already exists"
        );
        return pancakeswapFactory.createPair(address(tokenA), address(tokenB));
    }

    function approveRouter() public {
        IERC20(address(tokenA)).approve(
            0xD99D1c33F9fC3444f8101754aBC46c52416550D1,
            20000
        );
        IERC20(address(tokenB)).approve(
            0xD99D1c33F9fC3444f8101754aBC46c52416550D1,
            20000
        );
    }

    function mint(uint256 amount) public {
        tokenA.mint(address(this), amount);
        tokenB.mint(address(this), amount);
    }

    function addLiquidity() public {
        pancakeswapRouter.addLiquidity(
            address(tokenA),
            address(tokenB),
            10000,
            10000,
            10000,
            10000,
            msg.sender,
            block.timestamp + 360
        );
    }

    function swapTokens() public {
        address[] memory path;
        path[0] = address(tokenA);
        path[1] = address(tokenB);

        IERC20(address(tokenA)).approve(
            0xD99D1c33F9fC3444f8101754aBC46c52416550D1,
            100
        );

        pancakeswapRouter.swapExactTokensForTokens(
            100 wei, // amountIn
            0, // amountOutMax
            path, //
            msg.sender,
            block.timestamp + 15
        );
    }
}
4

0 回答 0