// SPDX-License-Identifier: MIT pragma solidity 0.8.28; /** * @title IPancakePair * @dev PancakeSwap V2 Pair接口,代表一个交易对合约 */ interface IPancakePair { /** * @dev 授权事件 * @param owner 代币所有者 * @param spender 被授权者 * @param value 授权数量 */ event Approval(address indexed owner, address indexed spender, uint value); /** * @dev 转账事件 * @param from 发送方 * @param to 接收方 * @param value 转账数量 */ event Transfer(address indexed from, address indexed to, uint value); // ERC20标准函数 /** * @dev 获取LP代币名称 * @return LP代币名称 */ function name() external pure returns (string memory); /** * @dev 获取LP代币符号 * @return LP代币符号 */ function symbol() external pure returns (string memory); /** * @dev 获取LP代币小数位数 * @return LP代币小数位数 */ function decimals() external pure returns (uint8); /** * @dev 获取LP代币总供应量 * @return LP代币总供应量 */ function totalSupply() external view returns (uint); /** * @dev 获取指定地址的LP代币余额 * @param owner 地址 * @return LP代币余额 */ function balanceOf(address owner) external view returns (uint); /** * @dev 获取授权额度 * @param owner 代币所有者 * @param spender 被授权者 * @return 授权额度 */ function allowance(address owner, address spender) external view returns (uint); /** * @dev 授权函数 * @param spender 被授权者 * @param value 授权数量 * @return 是否成功 */ function approve(address spender, uint value) external returns (bool); /** * @dev 转账函数 * @param to 接收方 * @param value 转账数量 * @return 是否成功 */ function transfer(address to, uint value) external returns (bool); /** * @dev 授权转账函数 * @param from 发送方 * @param to 接收方 * @param value 转账数量 * @return 是否成功 */ function transferFrom(address from, address to, uint value) external returns (bool); /** * @dev 获取域名分隔符(用于签名验证) * @return 域名分隔符 */ function DOMAIN_SEPARATOR() external view returns (bytes32); /** * @dev 获取许可类型哈希 * @return 许可类型哈希 */ function PERMIT_TYPEHASH() external pure returns (bytes32); /** * @dev 获取地址的nonce值 * @param owner 地址 * @return nonce值 */ function nonces(address owner) external view returns (uint); /** * @dev 使用签名进行授权 * @param owner 代币所有者 * @param spender 被授权者 * @param value 授权数量 * @param deadline 截止时间 * @param v 签名v值 * @param r 签名r值 * @param s 签名s值 */ function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; /** * @dev 铸造LP代币事件 * @param sender 铸造者 * @param amount0 添加的token0数量 * @param amount1 添加的token1数量 */ event Mint(address indexed sender, uint amount0, uint amount1); /** * @dev 销毁LP代币事件 * @param sender 销毁者 * @param amount0 移除的token0数量 * @param amount1 移除的token1数量 * @param to 代币接收地址 */ event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); /** * @dev 交换事件 * @param sender 交换者 * @param amount0In 输入的token0数量 * @param amount1In 输入的token1数量 * @param amount0Out 输出的token0数量 * @param amount1Out 输出的token1数量 * @param to 输出代币接收地址 */ event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); /** * @dev 储备同步事件 * @param reserve0 token0储备量 * @param reserve1 token1储备量 */ event Sync(uint112 reserve0, uint112 reserve1); /** * @dev 获取最小流动性数量 * @return 最小流动性数量 */ function MINIMUM_LIQUIDITY() external pure returns (uint); /** * @dev 获取Factory合约地址 * @return Factory合约地址 */ function factory() external view returns (address); /** * @dev 获取token0地址 * @return token0地址 */ function token0() external view returns (address); /** * @dev 获取token1地址 * @return token1地址 */ function token1() external view returns (address); /** * @dev 获取当前储备量 * @return reserve0 token0储备量 * @return reserve1 token1储备量 * @return blockTimestampLast 最后更新的区块时间戳 */ function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); /** * @dev 获取token0的累积价格 * @return token0累积价格 */ function price0CumulativeLast() external view returns (uint); /** * @dev 获取token1的累积价格 * @return token1累积价格 */ function price1CumulativeLast() external view returns (uint); /** * @dev 获取最后的k值(用于计算手续费) * @return 最后的k值 */ function kLast() external view returns (uint); /** * @dev 铸造LP代币(添加流动性) * @param to LP代币接收地址 * @return liquidity 铸造的LP代币数量 */ function mint(address to) external returns (uint liquidity); /** * @dev 销毁LP代币(移除流动性) * @param to 代币接收地址 * @return amount0 获得的token0数量 * @return amount1 获得的token1数量 */ function burn(address to) external returns (uint amount0, uint amount1); /** * @dev 执行代币交换 * @param amount0Out 输出的token0数量 * @param amount1Out 输出的token1数量 * @param to 输出代币接收地址 * @param data 回调数据 */ function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; /** * @dev 提取多余的代币(防止储备不平衡) * @param to 代币接收地址 */ function skim(address to) external; /** * @dev 同步储备量 */ function sync() external; /** * @dev 初始化交易对 * @param _token0 第一个代币地址 * @param _token1 第二个代币地址 */ function initialize(address _token0, address _token1) external; }