跳到主要内容

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);

集成注意事项:

  • 添加流动性前,用户必须授权(approve)V2 Router02 使用两种 ERC-20 代币。

  • 对于已存在的资金池,应按当前储备比例添加流动性。

  • 对于新资金池,首位流动性提供者通过选择存入比例来定义初始价格。

  • 应设置 amountAMinamountBMin 以保护用户免受滑点影响。

  • 移除流动性会销毁 LP 代币,并按用户的资金池份额返还对应的代币对。

原生 BOT 流动性:

对于涉及原生 BOT 的资金池,请使用 ETH 风格的 router 方法,例如 addLiquidityETH / removeLiquidityETH。在内部,原生 BOT 会被封装为 WBOT。

代币兑换指南

BDEX V2 兑换可直接通过 Router02 执行,但推荐前端应用使用官方 Routing API 来获取最优路由和可执行的 calldata。

推荐集成路径:

  1. 调用 Routing API GET /quote

  2. 从响应中读取 methodParameters.tomethodParameters.calldatamethodParameters.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 的流动性和兑换流程可能会回滚。Routing API 会自动检测受支持的转账征税场景,并在需要时限制路由。