BDEX V3
BDEX V3 introduce la Liquidez Concentrada, que permite a los LP asignar capital dentro de rangos de precio personalizados para mejorar significativamente la eficiencia del capital. Basado en la arquitectura de Uniswap V3, adaptado al tiempo de bloque de 0,75 s y al entorno de bajo gas de BOT Chain.
Guía de liquidez concentrada
BDEX V3 utiliza un modelo de liquidez concentrada. A diferencia de V2, la liquidez no siempre se distribuye en todo el rango de precios. Los proveedores de liquidez eligen un rango de precios personalizado donde su capital está activo.
Cuando el precio de mercado está dentro del rango seleccionado, la posición genera comisiones de swap. Cuando el precio de mercado se mueve fuera del rango, la posición se vuelve inactiva y deja de generar comisiones hasta que el precio vuelve a entrar en el rango.
Contratos principales:
| Contrato | Propósito |
|---|---|
| V3 Factory | Crea y gestiona los pools V3 |
| NonfungiblePositionManager | Crea y gestiona posiciones de LP como NFT |
| QuoterV2 | Simula la salida del swap off-chain |
| Universal Router | Ejecuta swaps entre los protocolos compatibles |
Niveles de comisión compatibles:
| Nivel de comisión | Valor de comisión | Espaciado de ticks | Caso de uso típico |
|---|---|---|---|
| 0,05% | 500 | 10 | Pares estables o altamente correlacionados |
| 0,30% | 3000 | 60 | La mayoría de los pares estándar |
| 1,00% | 10000 | 200 | Alta volatilidad o activos long-tail |
Creación de un pool V3:
function createPool(
address tokenA,
address tokenB,
uint24 fee
) external returns (address pool);
Tras crear un pool, debe inicializarse con el precio inicial antes de poder añadir liquidez.
function initialize(uint160 sqrtPriceX96) external;
Añadir liquidez concentrada:
Los desarrolladores deben usar NonfungiblePositionManager.mint para crear una posición. La posición se representa como un NFT ERC-721.
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
);
Notas de integración:
-
Los usuarios deben aprobar a
NonfungiblePositionManagerpara gastar ambos tokens antes de acuñar una posición. -
tickLowerytickUpperdeben coincidir con el espaciado de ticks del pool. -
amount0Minyamount1Mindeben establecerse para proteger a los usuarios del slippage. -
Cuanto más estrecho sea el rango de precios, mayor será la eficiencia del capital, pero mayor será la probabilidad de que la posición se vuelva inactiva.
Gestión de posiciones
Las posiciones de LP de BDEX V3 son gestionadas por NonfungiblePositionManager. Cada posición es un NFT con su propio par de tokens, nivel de comisión, rango de precios, cantidad de liquidez y comisiones acumuladas.
Operaciones comunes de posición:
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;
Ciclo de vida de una posición:
-
Mint — Crear un nuevo NFT de posición de liquidez concentrada.
-
Increase Liquidity — Añadir más liquidez a una posición existente.
-
Decrease Liquidity — Retirar parte o toda la liquidez de la posición.
-
Collect Fees — Reclamar las comisiones de swap acumuladas.
-
Burn — Destruir el NFT después de retirar toda la liquidez y las comisiones.
Notas sobre el cobro de comisiones:
-
Las comisiones de V3 no se transfieren automáticamente a la wallet del LP.
-
Los LP deben llamar a
collectpara reclamar las comisiones acumuladas. -
Las comisiones solo se acumulan mientras la posición está activa, es decir, cuando el precio actual del pool está dentro del rango de ticks seleccionado.
-
Retirar liquidez no cobra automáticamente todas las comisiones; las aplicaciones deben llamar a
collectcuando sea necesario.