// SPDX-License-Identifier: MIT pragma solidity 0.8.28; /** * @title IPancakeRouter02 * @dev PancakeSwap V2 Router接口,提供所有交易和流动性管理功能 */ interface IPancakeRouter02 { /** * @dev 获取PancakeSwap Factory合约地址 * @return Factory合约地址 */ function factory() external pure returns (address); /** * @dev 获取WBNB合约地址 * @return WBNB合约地址 */ function WETH() external pure returns (address); /** * @dev 添加两个代币的流动性 * @param tokenA 第一个代币地址 * @param tokenB 第二个代币地址 * @param amountADesired 期望添加的tokenA数量 * @param amountBDesired 期望添加的tokenB数量 * @param amountAMin 最小接受的tokenA数量(滑点保护) * @param amountBMin 最小接受的tokenB数量(滑点保护) * @param to LP代币接收地址 * @param deadline 交易截止时间 * @return amountA 实际添加的tokenA数量 * @return amountB 实际添加的tokenB数量 * @return liquidity 获得的LP代币数量 */ function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); /** * @dev 添加代币和BNB的流动性 * @param token 代币地址 * @param amountTokenDesired 期望添加的代币数量 * @param amountTokenMin 最小接受的代币数量(滑点保护) * @param amountETHMin 最小接受的BNB数量(滑点保护) * @param to LP代币接收地址 * @param deadline 交易截止时间 * @return amountToken 实际添加的代币数量 * @return amountETH 实际添加的BNB数量 * @return liquidity 获得的LP代币数量 */ function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); /** * @dev 移除两个代币的流动性 * @param tokenA 第一个代币地址 * @param tokenB 第二个代币地址 * @param liquidity 要移除的LP代币数量 * @param amountAMin 最小接受的tokenA数量(滑点保护) * @param amountBMin 最小接受的tokenB数量(滑点保护) * @param to 代币接收地址 * @param deadline 交易截止时间 * @return amountA 获得的tokenA数量 * @return amountB 获得的tokenB数量 */ function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); /** * @dev 精确输入代币交换(代币到代币) * @param amountIn 输入代币数量 * @param amountOutMin 最小输出代币数量(滑点保护) * @param path 交换路径(代币地址数组) * @param to 输出代币接收地址 * @param deadline 交易截止时间 * @return amounts 交换路径中每个代币的数量数组 */ function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); /** * @dev 精确输入BNB交换(BNB到代币) * @param amountOutMin 最小输出代币数量(滑点保护) * @param path 交换路径(WBNB地址 + 代币地址数组) * @param to 输出代币接收地址 * @param deadline 交易截止时间 * @return amounts 交换路径中每个代币的数量数组 */ function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); /** * @dev 精确输入代币交换(代币到BNB) * @param amountIn 输入代币数量 * @param amountOutMin 最小输出BNB数量(滑点保护) * @param path 交换路径(代币地址 + WBNB地址数组) * @param to 输出BNB接收地址 * @param deadline 交易截止时间 * @return amounts 交换路径中每个代币的数量数组 */ function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); /** * @dev 根据输入数量计算输出数量 * @param amountIn 输入代币数量 * @param path 交换路径(代币地址数组) * @return amounts 交换路径中每个代币的数量数组 */ function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; }