BDEX V2
BDEX V2 は、BOT Chain にデプロイされた一定積 AMM(x × y = k)であり、実績のある Uniswap V2 アーキテクチャに基づいています。トークン作成者や開発者に対して、シンプルで信頼性の高い DEX インフラを提供します。
取引ペアの作成
BDEX V2 の取引ペアは V2 Factory コントラクトを通じて作成されます。ペアは 2 つのトークンアドレスによって一意に識別され、各トークンペアは 1 つの V2 ペアコントラクトしか持てません。
Factory メソッド:
function createPair(address tokenA, address tokenB) external returns (address pair);
function getPair(address tokenA, address tokenB) external view returns (address pair);
基本ルール:
-
tokenAとtokenBは異なるトークンである必要があります。 -
どちらのトークンアドレスもゼロアドレスにはできません。
-
ペアがすでに存在する場合、
createPairはリバートします。 -
作成後、開発者は
getPair(tokenA, tokenB)を通じてペアアドレスを読み取るか、PairCreatedイベントをリッスンできます。
処理フローの例:
const pair = await factory.getPair(tokenA, tokenB)
if (pair === ZERO_ADDRESS) {
const tx = await factory.createPair(tokenA, tokenB)
await tx.wait()
}
ほとんどのフロントエンド統合では、開発者が事前に手動でペアを作成する必要はありません。router を通じて初期流動性を追加する際に、必要に応じてペアを作成できます。
流動性の追加 / 削除
BDEX V2 の流動性は V2 Router02 コントラクトを通じて管理されます。流動性プロバイダーは両方のトークンをペアに預け入れ、V2 LP トークンを受け取ります。LP トークンはペアコントラクトの ERC-20 トークンであり、プロバイダーのプール持分を表します。
主なメソッド:
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
統合に関する注意事項:
-
流動性を追加する前に、ユーザーは両方の ERC-20 トークンの利用について V2 Router02 を承認(approve)する必要があります。
-
既存のプールでは、流動性は現在のリザーブ比率に従って追加する必要があります。
-
新規プールでは、最初の流動性プロバイダーが預入比率を選択することで初期価格を定義します。
-
ユーザーをスリッページから保護するため、
amountAMinとamountBMinを設定する必要があります。 -
流動性を削除すると LP トークンがバーンされ、ユーザーのプール持分に応じて元のトークンペアが返還されます。
ネイティブ BOT の流動性:
ネイティブ BOT を含むプールでは、addLiquidityETH / removeLiquidityETH などの ETH スタイルの router メソッドを使用してください。内部では、ネイティブ BOT は WBOT としてラップされます。
トークンスワップガイド
BDEX V2 のスワップは Router02 を通じて直接実行できますが、フロントエンドアプリケーションでは公式の Routing API を使用して最適なルートと実行可能な calldata を取得することを推奨します。
推奨される統合パス:
-
Routing API
GET /quoteを呼び出します。 -
レスポンスから
methodParameters.to、methodParameters.calldata、methodParameters.valueを読み取ります。 -
これらのフィールドを
eth_sendTransactionで送信します。
Routing API の例:
GET /quote?chainId=677
&tokenInAddress=0x...
&tokenOutAddress=0x...
&amount=1000000000000000000
&type=exactIn
&protocols=v2
&recipient=0x...
&slippageTolerance=0.5
Router02 の直接呼び出しメソッド:
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
スワップ手数料:
-
BDEX V2 は固定の 0.30% スワップ手数料を使用します。
-
手数料は入力トークンの数量から差し引かれます。
-
プールが出力トークンに対して別途課金することはありません。
-
手数料はプール内に留まり、プールリザーブの増加を通じて LP に分配されます。
トランスファー課税トークン(Fee-on-transfer):
トランスファー課税トークンは V2 ルートのみを使用すべきです。これらの課税トークンに対しては、V3 の流動性およびスワップフローがリバートする可能性があります。Routing API はサポートされる fee-on-transfer のケースを自動的に検出し、必要に応じてルーティングを制限します。