メインコンテンツまでスキップ

BDEX V3

BDEX V3 は集中流動性(Concentrated Liquidity)を導入し、LP がカスタム価格レンジ内に資本を配分することで資本効率を大幅に向上させることを可能にします。Uniswap V3 アーキテクチャに基づき、BOT Chain の 0.75 秒ブロックタイムと低 Gas 環境に最適化されています。

集中流動性ガイド

BDEX V3 は集中流動性モデルを採用しています。V2 とは異なり、流動性は常に全価格レンジに分散されるわけではありません。流動性プロバイダーは、自身の資本がアクティブになるカスタム価格レンジを選択します。

市場価格が選択したレンジ内にある場合、ポジションはスワップ手数料を獲得します。市場価格がレンジ外に移動すると、ポジションは非アクティブになり、価格がレンジ内に戻るまで手数料を獲得しなくなります。

主要コントラクト:

コントラクト用途
V3 FactoryV3 プールを作成・管理
NonfungiblePositionManagerLP ポジションを NFT として作成・管理
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 を呼び出すべきです。