BOT Chain NewsNews

BDEX V3

BDEX V3

O BDEX V3 introduz a Liquidez Concentrada, permitindo que os LPs aloquem capital dentro de faixas de preço personalizadas para uma eficiência de capital significativamente melhorada. Baseado na arquitetura Uniswap V3, adaptado para o tempo de bloco de 0,75s do BOT Chain e ambiente de baixo gas.

Guia de Liquidez Concentrada

O BDEX V3 usa um modelo de liquidez concentrada. Ao contrário do V2, a liquidez nem sempre é distribuída por toda a faixa de preço. Os provedores de liquidez escolhem uma faixa de preço personalizada onde seu capital está ativo.

Quando o preço de mercado está dentro da faixa selecionada, a posição gera taxas de swap. Quando o preço de mercado se move para fora da faixa, a posição se torna inativa e não gera mais taxas até que o preço reentre na faixa.

Contratos principais:

ContratoPropósito
V3 FactoryCria e gerencia pools V3
NonfungiblePositionManagerCria e gerencia posições de LP como NFTs
QuoterV2Simula a saída de swap off-chain
Universal RouterExecuta swaps em protocolos suportados

Camadas de taxa suportadas:

Camada de TaxaValor da TaxaEspaçamento de TickCaso de Uso Típico
0,05%50010Pares estáveis ou altamente correlacionados
0,30%300060Pares mais padrões
1,00%10000200Alta volatilidade ou ativos de cauda longa

Criando uma pool V3:

function createPool(
address tokenA,
address tokenB,
uint24 fee
) external returns (address pool);

Após a criação de uma pool, ela deve ser inicializada com o preço inicial antes que a liquidez possa ser adicionada.

function initialize(uint160 sqrtPriceX96) external;

Adicionando liquidez concentrada:

Os desenvolvedores devem usar NonfungiblePositionManager.mint para criar uma posição. A posição é representada como um 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
);

Observações de integração:

  • Os usuários devem aprovar o NonfungiblePositionManager para gastar ambos os tokens antes de cunhar uma posição.

  • tickLower e tickUpper devem corresponder ao espaçamento de tick da pool.

  • amount0Min e amount1Min devem ser configurados para proteger os usuários contra slippage.

  • Quanto menor a faixa de preço, maior a eficiência do capital, mas maior a chance de a posição se tornar inativa.

Gerenciamento de Posição

As posições de LP do BDEX V3 são gerenciadas pelo NonfungiblePositionManager. Cada posição é um NFT com seu próprio par de tokens, camada de taxa, faixa de preço, quantidade de liquidez e taxas acumuladas.

Operações comuns de posição:

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 da posição:

  1. Cunhar — Crie um novo NFT de posição de liquidez concentrada.

  2. Aumentar Liquidez — Adicione mais liquidez a uma posição existente.

  3. Diminuir Liquidez — Remova parte ou toda a liquidez da posição.

  4. Coletar Taxas — Reivindique as taxas de swap acumuladas.

  5. Queimar — Destrua o NFT depois que toda a liquidez e taxas forem removidas.

Observações sobre a coleta de taxas:

  • As taxas V3 não são automaticamente transferidas para a carteira do LP.

  • Os LPs devem chamar collect para reivindicar as taxas acumuladas.

  • As taxas só são acumuladas enquanto a posição está ativa, o que significa que o preço atual da pool está dentro da faixa de tick selecionada.

  • A remoção de liquidez não coleta automaticamente todas as taxas; os aplicativos devem chamar collect quando necessário.