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:
| Contrato | Propósito |
|---|---|
| V3 Factory | Cria e gerencia pools V3 |
| NonfungiblePositionManager | Cria e gerencia posições de LP como NFTs |
| QuoterV2 | Simula a saída de swap off-chain |
| Universal Router | Executa swaps em protocolos suportados |
Camadas de taxa suportadas:
| Camada de Taxa | Valor da Taxa | Espaçamento de Tick | Caso de Uso Típico |
|---|---|---|---|
| 0,05% | 500 | 10 | Pares estáveis ou altamente correlacionados |
| 0,30% | 3000 | 60 | Pares mais padrões |
| 1,00% | 10000 | 200 | Alta 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
NonfungiblePositionManagerpara gastar ambos os tokens antes de cunhar uma posição. -
tickLoweretickUpperdevem corresponder ao espaçamento de tick da pool. -
amount0Mineamount1Mindevem 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:
-
Cunhar — Crie um novo NFT de posição de liquidez concentrada.
-
Aumentar Liquidez — Adicione mais liquidez a uma posição existente.
-
Diminuir Liquidez — Remova parte ou toda a liquidez da posição.
-
Coletar Taxas — Reivindique as taxas de swap acumuladas.
-
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
collectpara 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
collectquando necessário.