IPancakeRouter02.sol 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity 0.8.28;
  3. /**
  4. * @title IPancakeRouter02
  5. * @dev PancakeSwap V2 Router接口,提供所有交易和流动性管理功能
  6. */
  7. interface IPancakeRouter02 {
  8. /**
  9. * @dev 获取PancakeSwap Factory合约地址
  10. * @return Factory合约地址
  11. */
  12. function factory() external pure returns (address);
  13. /**
  14. * @dev 获取WBNB合约地址
  15. * @return WBNB合约地址
  16. */
  17. function WETH() external pure returns (address);
  18. /**
  19. * @dev 添加两个代币的流动性
  20. * @param tokenA 第一个代币地址
  21. * @param tokenB 第二个代币地址
  22. * @param amountADesired 期望添加的tokenA数量
  23. * @param amountBDesired 期望添加的tokenB数量
  24. * @param amountAMin 最小接受的tokenA数量(滑点保护)
  25. * @param amountBMin 最小接受的tokenB数量(滑点保护)
  26. * @param to LP代币接收地址
  27. * @param deadline 交易截止时间
  28. * @return amountA 实际添加的tokenA数量
  29. * @return amountB 实际添加的tokenB数量
  30. * @return liquidity 获得的LP代币数量
  31. */
  32. function addLiquidity(
  33. address tokenA,
  34. address tokenB,
  35. uint256 amountADesired,
  36. uint256 amountBDesired,
  37. uint256 amountAMin,
  38. uint256 amountBMin,
  39. address to,
  40. uint256 deadline
  41. ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
  42. /**
  43. * @dev 添加代币和BNB的流动性
  44. * @param token 代币地址
  45. * @param amountTokenDesired 期望添加的代币数量
  46. * @param amountTokenMin 最小接受的代币数量(滑点保护)
  47. * @param amountETHMin 最小接受的BNB数量(滑点保护)
  48. * @param to LP代币接收地址
  49. * @param deadline 交易截止时间
  50. * @return amountToken 实际添加的代币数量
  51. * @return amountETH 实际添加的BNB数量
  52. * @return liquidity 获得的LP代币数量
  53. */
  54. function addLiquidityETH(
  55. address token,
  56. uint256 amountTokenDesired,
  57. uint256 amountTokenMin,
  58. uint256 amountETHMin,
  59. address to,
  60. uint256 deadline
  61. ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
  62. /**
  63. * @dev 移除两个代币的流动性
  64. * @param tokenA 第一个代币地址
  65. * @param tokenB 第二个代币地址
  66. * @param liquidity 要移除的LP代币数量
  67. * @param amountAMin 最小接受的tokenA数量(滑点保护)
  68. * @param amountBMin 最小接受的tokenB数量(滑点保护)
  69. * @param to 代币接收地址
  70. * @param deadline 交易截止时间
  71. * @return amountA 获得的tokenA数量
  72. * @return amountB 获得的tokenB数量
  73. */
  74. function removeLiquidity(
  75. address tokenA,
  76. address tokenB,
  77. uint256 liquidity,
  78. uint256 amountAMin,
  79. uint256 amountBMin,
  80. address to,
  81. uint256 deadline
  82. ) external returns (uint256 amountA, uint256 amountB);
  83. function removeLiquidityETH(
  84. address token,
  85. uint256 liquidity,
  86. uint256 amountTokenMin,
  87. uint256 amountETHMin,
  88. address to,
  89. uint256 deadline
  90. ) external returns (uint256 amountToken, uint256 amountETH);
  91. function removeLiquidityWithPermit(
  92. address tokenA,
  93. address tokenB,
  94. uint256 liquidity,
  95. uint256 amountAMin,
  96. uint256 amountBMin,
  97. address to,
  98. uint256 deadline,
  99. bool approveMax,
  100. uint8 v,
  101. bytes32 r,
  102. bytes32 s
  103. ) external returns (uint256 amountA, uint256 amountB);
  104. function removeLiquidityETHWithPermit(
  105. address token,
  106. uint256 liquidity,
  107. uint256 amountTokenMin,
  108. uint256 amountETHMin,
  109. address to,
  110. uint256 deadline,
  111. bool approveMax,
  112. uint8 v,
  113. bytes32 r,
  114. bytes32 s
  115. ) external returns (uint256 amountToken, uint256 amountETH);
  116. /**
  117. * @dev 精确输入代币交换(代币到代币)
  118. * @param amountIn 输入代币数量
  119. * @param amountOutMin 最小输出代币数量(滑点保护)
  120. * @param path 交换路径(代币地址数组)
  121. * @param to 输出代币接收地址
  122. * @param deadline 交易截止时间
  123. * @return amounts 交换路径中每个代币的数量数组
  124. */
  125. function swapExactTokensForTokens(
  126. uint256 amountIn,
  127. uint256 amountOutMin,
  128. address[] calldata path,
  129. address to,
  130. uint256 deadline
  131. ) external returns (uint256[] memory amounts);
  132. function swapTokensForExactTokens(
  133. uint256 amountOut,
  134. uint256 amountInMax,
  135. address[] calldata path,
  136. address to,
  137. uint256 deadline
  138. ) external returns (uint256[] memory amounts);
  139. /**
  140. * @dev 精确输入BNB交换(BNB到代币)
  141. * @param amountOutMin 最小输出代币数量(滑点保护)
  142. * @param path 交换路径(WBNB地址 + 代币地址数组)
  143. * @param to 输出代币接收地址
  144. * @param deadline 交易截止时间
  145. * @return amounts 交换路径中每个代币的数量数组
  146. */
  147. function swapExactETHForTokens(
  148. uint256 amountOutMin,
  149. address[] calldata path,
  150. address to,
  151. uint256 deadline
  152. ) external payable returns (uint256[] memory amounts);
  153. function swapTokensForExactETH(
  154. uint256 amountOut,
  155. uint256 amountInMax,
  156. address[] calldata path,
  157. address to,
  158. uint256 deadline
  159. ) external returns (uint256[] memory amounts);
  160. /**
  161. * @dev 精确输入代币交换(代币到BNB)
  162. * @param amountIn 输入代币数量
  163. * @param amountOutMin 最小输出BNB数量(滑点保护)
  164. * @param path 交换路径(代币地址 + WBNB地址数组)
  165. * @param to 输出BNB接收地址
  166. * @param deadline 交易截止时间
  167. * @return amounts 交换路径中每个代币的数量数组
  168. */
  169. function swapExactTokensForETH(
  170. uint256 amountIn,
  171. uint256 amountOutMin,
  172. address[] calldata path,
  173. address to,
  174. uint256 deadline
  175. ) external returns (uint256[] memory amounts);
  176. function swapETHForExactTokens(
  177. uint256 amountOut,
  178. address[] calldata path,
  179. address to,
  180. uint256 deadline
  181. ) external payable returns (uint256[] memory amounts);
  182. function quote(
  183. uint256 amountA,
  184. uint256 reserveA,
  185. uint256 reserveB
  186. ) external pure returns (uint256 amountB);
  187. function getAmountOut(
  188. uint256 amountIn,
  189. uint256 reserveIn,
  190. uint256 reserveOut
  191. ) external pure returns (uint256 amountOut);
  192. function getAmountIn(
  193. uint256 amountOut,
  194. uint256 reserveIn,
  195. uint256 reserveOut
  196. ) external pure returns (uint256 amountIn);
  197. /**
  198. * @dev 根据输入数量计算输出数量
  199. * @param amountIn 输入代币数量
  200. * @param path 交换路径(代币地址数组)
  201. * @return amounts 交换路径中每个代币的数量数组
  202. */
  203. function getAmountsOut(uint256 amountIn, address[] calldata path)
  204. external
  205. view
  206. returns (uint256[] memory amounts);
  207. function getAmountsIn(uint256 amountOut, address[] calldata path)
  208. external
  209. view
  210. returns (uint256[] memory amounts);
  211. function removeLiquidityETHSupportingFeeOnTransferTokens(
  212. address token,
  213. uint256 liquidity,
  214. uint256 amountTokenMin,
  215. uint256 amountETHMin,
  216. address to,
  217. uint256 deadline
  218. ) external returns (uint256 amountETH);
  219. function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
  220. address token,
  221. uint256 liquidity,
  222. uint256 amountTokenMin,
  223. uint256 amountETHMin,
  224. address to,
  225. uint256 deadline,
  226. bool approveMax,
  227. uint8 v,
  228. bytes32 r,
  229. bytes32 s
  230. ) external returns (uint256 amountETH);
  231. function swapExactTokensForTokensSupportingFeeOnTransferTokens(
  232. uint256 amountIn,
  233. uint256 amountOutMin,
  234. address[] calldata path,
  235. address to,
  236. uint256 deadline
  237. ) external;
  238. function swapExactETHForTokensSupportingFeeOnTransferTokens(
  239. uint256 amountOutMin,
  240. address[] calldata path,
  241. address to,
  242. uint256 deadline
  243. ) external payable;
  244. function swapExactTokensForETHSupportingFeeOnTransferTokens(
  245. uint256 amountIn,
  246. uint256 amountOutMin,
  247. address[] calldata path,
  248. address to,
  249. uint256 deadline
  250. ) external;
  251. }