BDEX V3
BDEX V3 は集中流動性(Concentrated Liquidity)を導入し、LP がカスタム価格レンジ内に資本を配分することで資本効率を大幅に向上させることを可能にします。Uniswap V3 アーキテクチャに基づき、BOT Chain の 0.75 秒ブロックタイムと低 Gas 環境に最適化されています。
集中流動性ガイド
BDEX V3 は集中流動性モデルを採用しています。V2 とは異なり、流動性は常に全価格レンジに分散されるわけではありません。流動性プロバイダーは、自身の資本がアクティブになるカスタム価格レンジを選択します。
市場価格が選択したレンジ内にある場合、ポジションはスワップ手数料を獲得します。市場価格がレンジ外に移動すると、ポジションは非アクティブになり、価格がレンジ内に戻るまで手数料を獲得しなくなります。
主要コントラクト:
| コントラクト | 用途 |
|---|---|
| V3 Factory | V3 プールを作成・管理 |
| NonfungiblePositionManager | LP ポジションを NFT として作成・管理 |
| 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を呼び出すべきです。