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);
基本规则:
-
tokenA与tokenB必须是不同的代币。 -
两个代币地址都不能是零地址。
-
如果交易对已存在,
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 代币。
-
对于已存在的资金池,应按当前储备比例添加流动性。
-
对于新资金池,首位流动性提供者通过选择存入比例来定义初始价格。
-
应设置
amountAMin和amountBMin以保护用户免受滑点影响。 -
移除流动性会销毁 LP 代币,并按用户的资金池份额返还对应的代币对。
原生 BOT 流动性:
对于涉及原生 BOT 的资金池,请使用 ETH 风格的 router 方法,例如 addLiquidityETH / removeLiquidityETH。在内部,原生 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 会自动检测受支持的转账征税场景,并在需要时限制路由。