Skip to main content
Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →

Resumo em um parágrafo

CLMM — Concentrated Liquidity Market Maker — é o AMM estilo Uniswap-v3 do Raydium. Em vez de espalhar o depósito de um provedor de liquidez por toda a curva de preço, o CLMM permite que LPs depositem em um intervalo de preço específico. Dentro desse intervalo, cada dólar depositado é muitas vezes mais produtivo do que seria em um pool CPMM; fora do intervalo, o depósito não gera rendimento e fica como um saldo de um único lado. O programa rastreia liquidez por tick (um bucket de preço discretizado), precifica o estado do pool pela raiz quadrada do preço codificado como um número de ponto fixo Q64.64 (sqrt_price_x64), e cria um NFT para cada posição de LP em vez de um token LP fungível.

Novidades

O lançamento mais recente do CLMM adiciona três funcionalidades ao núcleo estilo Uniswap-v3. Elas são opcionais no momento da criação do pool e compatíveis com versões anteriores com pools e posições existentes:
  • Limit orders. Os LPs agora podem definir uma ordem de um único tick em um preço específico e ter o caminho de swap preenchê-la FIFO quando o swap cruza esse tick. As ordens são liquidadas na ATA do proprietário ao preço limite; um guardião fora da cadeia (limit_order_admin) pode coletar ordens preenchidas sem o proprietário estar online. Veja Instructions → OpenLimitOrder / SettleLimitOrder e Math → Limit-order matching during swap.
  • Taxa de um único lado (CollectFeeOn). Os pools podem ser configurados para cobrar taxas de swap do lado de entrada (comportamento legado, modo 0), ou sempre de token_0 (1), ou sempre de token_1 (2). Útil quando um lado do par é o token de contabilidade canônico (por exemplo, USDC). Veja Fees → Single-sided fee.
  • Taxa dinâmica. Os pools podem optar por uma sobretaxa de taxa que rastreia volatilidade e sobe com o movimento rápido de ticks, decaindo ao longo do tempo. Calibrada por um DynamicFeeConfig por tier e um DynamicFeeInfo por pool. Veja Fees → Dynamic fee e Math → Dynamic fee derivation.
Uma nova instrução, CreateCustomizablePool, expõe todos os três controles no momento da criação do pool. A instrução clássica CreatePool continua funcionando para pools com taxa padrão, sem limit orders ou taxas dinâmicas.

O que o CLMM oferece

  • Eficiência de capital. Um LP stablecoin-stablecoin concentrando liquidez em uma faixa de ±0,1% ao redor da paridade pode gerar 100×+ as taxas por dólar de TVL comparado a um pool CPMM do mesmo par.
  • Contabilidade de taxas por posição. As taxas acumulam por posição, não por mint de LP. Duas posições no mesmo pool ganham quantidades diferentes de taxa com base em seus intervalos e no caminho que o preço percorreu.
  • Múltiplos tiers de taxa por par. Um par pode ter vários pools CLMM, cada um vinculado a um AmmConfig diferente com sua própria taxa de negociação e espaçamento de ticks. A UI e os roteadores exibem qualquer tier que tenha mais liquidez ao preço atual.
  • Incentivável diretamente no pool. Até três fluxos de token de recompensa podem ser anexados a um pool; posições coletam recompensas pro-rata com base nos segundos × liquidez em intervalo que contribuem. Veja products/clmm/fees.
  • Posições em NFT. Cada posição é um token não fungível com mint igual a um PDA determinístico. Transferir o NFT transfere a posição; carteiras e UIs podem exibir posições da mesma forma que exibem colecionáveis.
  • Suporte a Token-2022 em ambos os lados do par, com as mesmas restrições de extensão que CPMM.

O que o CLMM não é

  • Não é configure-e-esqueça. Um intervalo definido quando SOL está em $160 não renderá nada se SOL se mover para $80, a menos que você o ajuste ativamente. O CLMM recompensa LPs ativos; LPs passivos devem ficar com o CPMM.
  • Não é gratuito de abrir. Cada novo tick-array que a posição cruza deve ser inicializado, custando aluguel. Intervalos amplos são mais baratos; intervalos estreitos não são.
  • Não é um CLOB. Diferentemente do AMM v4, o CLMM não tem dependência do OpenBook. Toda a liquidez fica no mapa de ticks.
  • Não é um superconjunto do CPMM. Uma posição CLMM abrangendo [tick_min, tick_max] em intervalo máximo se comporta similarmente ao CPMM, mas com custos de gás diferentes, um modelo de contabilidade de taxa diferente e nenhum token LP fungível. Se você quiser um pool LP fungível simples, use CPMM.

Como o CLMM difere do CPMM e AMM v4

Modelo mental

Pense em um pool CLMM como três estruturas de dados sobrepostas:
  1. Uma curva contínua no espaço sqrt_price. O preço do pool é representado como sqrt_price_x64, um ponto fixo Q64.64. Os swaps caminham ao longo dessa curva; dentro de um limite de tick, a matemática é a matemática padrão de AMM de liquidez concentrada (veja algorithms/clmm-math).
  2. Um mapa de tick discreto. Os preços são quantizados em ticks — potências inteiras de 1.0001. Cada tick tem um sqrt_price conhecido. As posições fazem referência a seus pontos finais como índices de tick inteiros. Os índices de tick são agrupados em arrays de tick de tamanho fixo para armazenamento.
  3. Contabilidade de taxa e recompensa por posição. Cada posição armazena o fee_growth_inside global no momento de sua última atualização. Quando o LP toca a posição (abrir, fechar, ajustar, coletar), o programa subtrai o valor armazenado do global atual para calcular o que é devido. Este é o padrão feeGrowthInside0X128 / feeGrowthInside1X128 do Uniswap-v3.
Cada ação do usuário se decompõe em transições de estado nessas três estruturas:
  • Abrir posição: escolha o intervalo de tick, deposite tokens, crie NFT, insira liquidez no mapa de tick dentro do intervalo, inicialize qualquer array de tick previamente vazio.
  • Aumentar / diminuir liquidez: ajuste o valor armazenado na conta de posição associada ao NFT e no mapa de tick; colete taxas acumuladas ao mesmo tempo.
  • Swap: caminhe do sqrt_price_x64 atual na direção da negociação, consumindo liquidez ativa até que a entrada seja esgotada ou o próximo tick inicializado seja alcançado; cruze o tick e pegue ou solte liquidez no novo lado.
  • Coletar taxas / recompensas: calcule fee_growth_inside_now − fee_growth_inside_last × position_liquidity para cada lado e cada fluxo de recompensa; transfira para fora.
O pool é indiferente de outra forma sobre quais posições estão abertas. Dois LPs no mesmo intervalo veem o mesmo caminho de crescimento de taxa, escalado pelos seus valores individuais de liquidity.

Quando escolher CLMM

Escolha CLMM quando:
  • Você está fornecendo liquidez para um par estável ou que reverte à média (USDC/USDT, jitoSOL/SOL, wBTC/BTC) e quer se concentrar perto da paridade.
  • Você é um criador de mercado disposto a monitorar o preço e rebalancear.
  • Você especificamente precisa de emissões de incentivo por pool sem configurar uma farm separada.
  • Você precisa de contabilidade por posição para seu próprio produto de LP (vault, produto estruturado, etc.).
Prefira CPMM quando:
  • Você está lançando um novo token com descoberta de preço desconhecida.
  • Você quer um único token LP fungível que possa fazer stake, travar ou compor com.
  • Você quer uma experiência de LP passiva.
Prefira AMM v4 quando:
  • Você especificamente precisa da profundidade AMM híbrida-CLOB que o AMM v4 coloca no OpenBook.
  • Você está migrando integrações existentes do AMM v4 e não está abrindo novas posições.

Posições são NFTs

Uma posição CLMM é representada on-chain por duas contas:
  • Um mint de NFT de posição com suprimento 1.
  • Uma conta de estado de posição pessoal chaveada ao mint de NFT, contendo os ticks, liquidez e últimos valores de crescimento de taxa observados da posição.
Transferir o NFT transfere a posição — a autoridade da conta de estado pessoal-posição é o proprietário do NFT. Este é o mesmo padrão que o Uniswap v3 pionerou, implementado no modelo de conta da Solana. Um tratamento detalhado está em products/clmm/ticks-and-positions.
Lançamentos CLMM mais antigos também criavam uma conta ProtocolPositionState por (pool, tick_lower, tick_upper) para agregar liquidez para esse intervalo. Lançamentos mais novos não a criam nem usam mais — o campo ainda aparece nas listas de contas OpenPosition / IncreaseLiquidity / DecreaseLiquidity como um UncheckedAccount para compatibilidade com ABI, mas o programa não a lê nem escreve. A contabilidade de intervalo agregado fica nos pontos finais de tick (liquidity_gross, liquidity_net) diretamente.

Próximos passos

  • Accounts — os layouts de contas de pool, config, tick-array e posição.
  • Ticks and positions — o mapa de ticks, espaçamento de ticks, tamanho de tick-array, posições baseadas em NFT.
  • Mathsqrt_price_x64, passo a passo de swap, derivação de fee_growth_inside.
  • InstructionsOpenPosition, IncreaseLiquidity, Swap, CollectRewards, a família de limit-order, e CreateCustomizablePool.
  • Fees and rewards — o modelo de taxa por posição, modos de taxa de um único lado, taxa dinâmica, e os três slots de recompensa.
  • Code demos — walkthroughs de abrir / ajustar / swap / coletar / limit-order / customizable-pool em TypeScript.
Fontes: