Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
O invariante
Um criador de mercado de produto constante (CPMM) mantém duas reservasx e y e garante:
k é o produto das reservas antes do trade. Para um mercado sem taxas, x · y = k exatamente. Com taxas, k cresce estritamente (a parte da taxa do LP é retida nas reservas).
O invariante é deliberadamente geométrico: garante que não importa quão pequena uma reserva se torne, a outra cresce ilimitadamente para compensar — ou seja, o pool nunca pode ser drenado para zero em qualquer lado.
Precificação
Preço spot
O preço marginal dey denominado em x em qualquer instante é a tangente da curva:
x · y = k fornece dy/dx = −y/x; ignorando o sinal, |dy/dx| = y/x).
Este é o preço que o pool cotiza para um trade infinitesimalmente pequeno. Para qualquer trade de tamanho finito, o preço realizado é pior devido ao slippage ao longo da curva.
Swap com entrada exata (dar Δx, receber Δy)
Com taxas, seja f a taxa de comissão (ex. f = 0.0025 para 25 bps). Aplique a taxa à entrada, depois use o invariante para resolver a saída:
Δx completo entra nas reservas. A porção de taxa do LP permanece em x'; a porção do protocolo é excluída da curva através de um passo de contabilidade separado (veja Variantes de contabilização de taxas abaixo).
Swap com saída exata (receber Δy, pagar o mínimo Δx)
Δx é arredondado para cima para garantir que o pool não cobre a menos.
Slippage e impacto de preço
Impacto de preço mede quanto o preço spot do pool se move como resultado do trade:Δx / x, uma expansão de primeira ordem fornece:
p_before e effective é slippage. O slippage na UI on-chain geralmente é expresso como (effective − p_before) / p_before; a função computeAmountOut do SDK retorna tanto amountOut quanto priceImpact por essa razão.
Verificação invariante em código
Após um swap, os protocolos reverificam:Variantes de contabilização de taxas
A verificação invariante assume que a taxa do LP permanece nas reservas. Diferentes produtos da Raydium lidam com os componentes do protocolo / fundo / criador de maneiras diferentes:Convenção CPMM
As taxas são taxas similares a pontos baseu64 em um denominador 1_000_000. A taxa de trade é dividida em trade_fee_rate (total) e depois subdividida via protocol_fee_rate, fund_fee_rate, creator_fee_rate. Em cada swap:
protocol_fees_*, fund_fees_*, creator_fees_*) que são excluídos das reservas usadas no invariante. É assim que as taxas podem ser retiradas sem mover a curva. Veja products/cpmm/fees.
Convenção AMM v4
As taxas são razõesnumerator / denominator em um denominador 10_000. A divisão é fixa na criação do pool e armazenada em AmmInfo.fees:
pnl_share acumula em state_data.need_take_pnl_* e é excluído das reservas; lp_share permanece no cofre. Veja products/amm-v4/fees.
Ambas as convenções preservam o invariante da mesma forma — a diferença é cosmética (denominador + número de subcategorias).
Regras de arredondamento
- O cálculo de taxa arredonda para cima. Garante que o pool nunca cobre a menos na taxa.
- A quantidade de saída arredonda para baixo. Garante que o invariante é mantido estritamente (
k' > kmesmo antes da taxa ser adicionada). - A quantidade de entrada de saída exata arredonda para cima. Garante que o usuário não pague menos.
u128 para os produtos intermediários x · Δx para evitar overflow em reservas grandes. Os resultados finais são convertidos de volta para u64 com uma verificação de saturação.
Casos extremos
Pool vazio
Antes do primeiroDeposit, x = y = 0. Instruções de swap rejeitam pré-depósito.
Saída zero
SeΔx é pequeno o suficiente para que o Δy arredondado para baixo seja 0, a instrução reverte com ZeroTradingTokens. Isso previne extração de valor sem pagamento; também significa que swaps de poeira em pools altamente desbalanceados falham.
LP de poeira
O primeiroDeposit tem tratamento especial: computa a oferta inicial de LP como sqrt(x · y) e queima uma pequena quantidade de “init burn” (geralmente 100 unidades de LP) para prevenir o “ataque de inflação do primeiro depositante” (onde um invasor doa para o cofre e infla o valor do token LP). Depósitos subsequentes usam matemática pró-rata.
Relação com arbitragem
O preço do pool CPMM só muda através de:- Trades através do pool em si (usuários caminhando a curva).
- Doações (enviando tokens para o cofre sem um swap).
Exemplos trabalhados
Exemplo 1 — trade pequeno, slippage negligenciável
Pool:x = 1_000_000, y = 2_000_000, k = 2·10^12. Taxa f = 0.0025.
Trade Δx = 1_000:
1000 / 1993.01 ≈ 0.5018. Spot antes: 0.5. Impacto: ~0.36%.
Exemplo 2 — trade de tamanho médio, slippage visível
Mesmo pool,Δx = 100_000 (10% de x):
100_000 / 181_405 ≈ 0.5513. Impacto: ~10.3% — aproximadamente metade da regra de bolso 2 · 10% = 20% (a regra é um teto de pior caso para uma curva de produto constante sem taxa; a taxa de trade mais a inversão na fórmula a reduz).
Referências
products/cpmm/math— escolhas específicas de arredondamento + denominador de taxa do CPMM.products/amm-v4/math— como as reservas integradas ao OpenBook do AMM v4 estendem este modelo.algorithms/slippage-and-price-impact— página dedicada ao dimensionamento de tolerância de slippage para UIs.
- Whitepaper Uniswap v2 — a declaração canônica de
x · y = k. - Código-fonte do programa CPMM da Raydium.
- Código-fonte do programa AMM v4 da Raydium.


