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% | 500 | 10 | 稳定币或高度相关的交易对 |
| 0.30% | 3000 | 60 | 大多数标准交易对 |
| 1.00% | 10000 | 200 | 高波动或长尾资产 |
创建 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使用两种代币。 -
tickLower和tickUpper必须与资金池的 tick 间距匹配。 -
应设置
amount0Min和amount1Min以保护用户免受滑点影响。 -
价格区间越窄,资金效率越高,但头寸变为非活跃状态的概率也越高。
头寸管理
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;
头寸生命周期:
-
Mint(铸造) —— 创建一个新的集中流动性头寸 NFT。
-
Increase Liquidity(增加流动性) —— 向现有头寸添加更多流动性。
-
Decrease Liquidity(减少流动性) —— 移除头寸中的部分或全部流动性。
-
Collect Fees(领取手续费) —— 领取累积的兑换手续费。
-
Burn(销毁) —— 在移除所有流动性和手续费后销毁该 NFT。
手续费领取说明:
-
V3 的手续费不会自动转入 LP 的钱包。
-
LP 必须调用
collect来领取累积的手续费。 -
只有当头寸处于活跃状态(即当前资金池价格位于所选 tick 区间内)时,手续费才会累积。
-
移除流动性不会自动领取全部手续费;应用应在需要时调用
collect。