跳到主要内容

BDEX V3

BDEX V3 引入了集中流动性(Concentrated Liquidity),允许 LP 在自定义价格区间内配置资金,从而显著提升资金效率。它基于 Uniswap V3 架构,并针对 BOT Chain 0.75 秒出块时间和低 Gas 环境进行了适配。

集中流动性指南

BDEX V3 采用集中流动性模型。与 V2 不同,流动性并非始终分布在整个价格区间内。流动性提供者可以选择一个自定义价格区间,在该区间内其资金处于活跃状态。

当市场价格位于所选区间内时,该头寸赚取兑换手续费。当市场价格移动到区间之外时,该头寸变为非活跃状态,不再赚取手续费,直到价格重新进入区间。

核心合约:

合约用途
V3 Factory创建并管理 V3 资金池
NonfungiblePositionManager以 NFT 形式创建并管理 LP 头寸
QuoterV2在链下模拟兑换输出
Universal Router跨受支持的协议执行兑换

支持的费率档位:

费率档位费率值Tick 间距典型适用场景
0.05%50010稳定币或高度相关的交易对
0.30%300060大多数标准交易对
1.00%10000200高波动或长尾资产

创建 V3 资金池:

function createPool(
address tokenA,
address tokenB,
uint24 fee
) external returns (address pool);

资金池创建后,必须先用初始价格进行初始化,然后才能添加流动性。

function initialize(uint160 sqrtPriceX96) external;

添加集中流动性:

开发者应使用 NonfungiblePositionManager.mint 来创建头寸。该头寸以 ERC-721 NFT 形式表示。

struct MintParams {
address token0;
address token1;
uint24 fee;
int24 tickLower;
int24 tickUpper;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
address recipient;
uint256 deadline;
}

function mint(MintParams calldata params)
external
payable
returns (
uint256 tokenId,
uint128 liquidity,
uint256 amount0,
uint256 amount1
);

集成注意事项:

  • 在铸造头寸前,用户必须授权 NonfungiblePositionManager 使用两种代币。

  • tickLowertickUpper 必须与资金池的 tick 间距匹配。

  • 应设置 amount0Minamount1Min 以保护用户免受滑点影响。

  • 价格区间越窄,资金效率越高,但头寸变为非活跃状态的概率也越高。

头寸管理

BDEX V3 的 LP 头寸由 NonfungiblePositionManager 管理。每个头寸都是一个 NFT,拥有各自的代币对、费率档位、价格区间、流动性数量和累积手续费。

常用头寸操作:

function increaseLiquidity(IncreaseLiquidityParams calldata params)
external
payable
returns (uint128 liquidity, uint256 amount0, uint256 amount1);

function decreaseLiquidity(DecreaseLiquidityParams calldata params)
external
payable
returns (uint256 amount0, uint256 amount1);

function collect(CollectParams calldata params)
external
payable
returns (uint256 amount0, uint256 amount1);

function burn(uint256 tokenId) external payable;

头寸生命周期:

  1. Mint(铸造) —— 创建一个新的集中流动性头寸 NFT。

  2. Increase Liquidity(增加流动性) —— 向现有头寸添加更多流动性。

  3. Decrease Liquidity(减少流动性) —— 移除头寸中的部分或全部流动性。

  4. Collect Fees(领取手续费) —— 领取累积的兑换手续费。

  5. Burn(销毁) —— 在移除所有流动性和手续费后销毁该 NFT。

手续费领取说明:

  • V3 的手续费不会自动转入 LP 的钱包。

  • LP 必须调用 collect 来领取累积的手续费。

  • 只有当头寸处于活跃状态(即当前资金池价格位于所选 tick 区间内)时,手续费才会累积。

  • 移除流动性不会自动领取全部手续费;应用应在需要时调用 collect