我正在尝试使用 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
);
}
}