본문으로 건너뛰기

BDEX V2

BDEX V2는 BOT Chain에 배포된 상수 곱 AMM(x × y = k)으로, 충분히 검증된 Uniswap V2 아키텍처를 기반으로 합니다. 토큰 생성자와 개발자에게 간단하고 신뢰할 수 있는 DEX 인프라를 제공합니다.

거래 페어 생성

BDEX V2 거래 페어는 V2 Factory 컨트랙트를 통해 생성됩니다. 페어는 두 토큰 주소로 고유하게 식별되며, 각 토큰 페어는 하나의 V2 페어 컨트랙트만 가질 수 있습니다.

Factory 메서드:

function createPair(address tokenA, address tokenB) external returns (address pair);
function getPair(address tokenA, address tokenB) external view returns (address pair);

기본 규칙:

  • tokenAtokenB는 서로 다른 토큰이어야 합니다.

  • 두 토큰 주소 모두 제로 주소일 수 없습니다.

  • 페어가 이미 존재하면 createPair는 revert됩니다.

  • 생성 후, 개발자는 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)해야 합니다.

  • 기존 풀의 경우, 유동성은 현재 준비금 비율에 따라 추가해야 합니다.

  • 새 풀의 경우, 첫 번째 유동성 공급자가 예치 비율을 선택하여 초기 가격을 정의합니다.

  • 사용자를 슬리피지로부터 보호하기 위해 amountAMinamountBMin을 설정해야 합니다.

  • 유동성을 제거하면 LP 토큰이 소각되고 사용자의 풀 지분에 따라 기초 토큰 페어가 반환됩니다.

네이티브 BOT 유동성:

네이티브 BOT가 포함된 풀의 경우, addLiquidityETH / removeLiquidityETH와 같은 ETH 스타일 router 메서드를 사용하세요. 내부적으로 네이티브 BOT는 WBOT로 래핑됩니다.

토큰 스왑 가이드

BDEX V2 스왑은 Router02를 통해 직접 실행할 수 있지만, 프론트엔드 애플리케이션은 공식 Routing API를 사용하여 최적의 경로와 실행 가능한 calldata를 가져오는 것을 권장합니다.

권장 통합 경로:

  1. Routing API GET /quote를 호출합니다.

  2. 응답에서 methodParameters.to, methodParameters.calldata, methodParameters.value를 읽습니다.

  3. 이 필드들을 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 유동성 및 스왑 흐름이 revert될 수 있습니다. Routing API는 지원되는 fee-on-transfer 사례를 자동으로 감지하고 필요할 때 라우팅을 제한합니다.