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
O pool mantémcoin_reserve × pc_reserve = k, onde (após a remoção do OpenBook em 2026-07):
- As reservas agora são apenas de vault. O termo histórico de open-order (tokens que o pool tinha em custódia como ordens limitadas do OpenBook) foi removido — na prática, era zero muito antes da remoção. Você pode calcular
kdiretamente dos saldos de vault on-chain. - O acúmulo de PnL (
need_take_pnl_*) é subtraído para que a curva seja conservada quando o admin coleta as taxas. O mesmo princípio que a exclusão deprotocol_fees_*do CPMM.
calc_total_without_take_pnl_no_orderbook (a variante histórica ciente de orderbook foi removida).
Toda operação Swap* garante que k' ≥ k após adicionar a parte de taxa do LP de volta às reservas.
Convenção de taxas
O AMM v4 usa taxas de razão (pares numerador/denominador) em vez da convenção1/1_000_000 do CPMM / CLMM. A struct Fees on-chain (veja Fees::initialize no código-fonte do programa) tem como padrão:
- Taxa total de swap:
swap_fee = amount_in × 25 / 10_000 = 0.25%da entrada bruta. - Participação do protocolo:
pnl_numerator / pnl_denominator = 12 / 100 = 12%da taxa de swap, o que resulta em0.25% × 12% = 0.03%do volume. Esta participação se acumula nos contadores de PnL e é coletada porWithdrawPnl. - Participação do LP: os
88%restantes da taxa de swap, o que resulta em0.25% × 88% = 0.22%do volume. Permanece no pool e inflacionak. - Sem participação de fundo. O AMM v4 não possui a divisão de taxa de fundo do CPMM/CLMM.
pnl_numerator / pnl_denominator é uma fração da taxa, não do volume de negociação — uma leitura comum errada desses nomes de campo.
trade_fee_numerator / trade_fee_denominator (também 25 / 10_000) era historicamente usado pela integração do OpenBook ao calcular preços inclusivos de taxa para a grade de ordens limitadas do AMM. Com o código do OpenBook removido, este campo é vestigial; a taxa de swap ativa é swap_fee_*.
Desvios desses padrões são raros, mas existem em alguns pools legados; sempre leia as taxas de AmmInfo.fees antes de fazer uma cotação.
Matemática de swap direto (caminho AMM)
O caso mais simples: o usuário faz swap contra os vaults do pool sem interagir com o OpenBook. As reservas internas do pool (incluindo alocações on-book) são o denominador. SwapBaseIn (entrada exata):MonitorStep / liquidação implícita que costumava atualizar o lado do OpenBook foi removido.
SwapBaseOut (saída exata):
Interação com livro de ordens (histórico)
Removido. A construção de grade descrita nesta seção reflete como o AMM v4 originalmente espelhava a curva em um mercado do OpenBook. A integração do OpenBook — incluindo o crank
MonitorStep e a lógica de grade build_orders — foi removida do programa (atualização de 2026-07). A matemática abaixo é preservada puramente como contexto histórico para o que as contas on-chain target_orders / amm_open_orders foram uma vez dimensionadas.AmmInfo:
depth— número de níveis de preço por lado.amount_wave— unidade de tamanho base por nível.min_size,coin_lot_size,pc_lot_size— restrições do mercado OpenBook.state_data.swap_acc_coin_fee,swap_acc_pc_fee— contadores de taxa cumulativa desde o últimoTakePnl.
target_orders calculados em build_orders e comparados com amm_open_orders a cada MonitorStep. Qualquer divergência resulta em cancelamentos + novos posts. Ordens recém-preenchidas no OpenBook se liquidam nos vaults do pool na próxima operação que atualiza o lado do OpenBook.
Integradores raramente precisam calcular a grade — o keeper do Raydium a mantém — mas é útil saber que:
- Um pool com liquidez on-book significativa tem essa liquidez contribuindo para
k, não ociosa. - Um mercado OpenBook desatualizado (fila de eventos cheia, cranks bloqueados) impede atualizações de grade; o AMM pode então cotar preços que divergem do livro de ordens visível até o próximo crank.
Etapa de liquidação (PnL)
A participação do protocolo de 0.03% se acumula emstate_data.need_take_pnl_coin e state_data.need_take_pnl_pc. TakePnl move essas quantidades para fora dos vaults para o destino especificado pelo admin, depois zera os contadores.
Propriedade crucial: as reservas no invariante são sempre calculadas menos PnL acumulado, então TakePnl não move a curva. Isso corresponde à convenção do CPMM.
Exemplo trabalhado
Estado do pool:coin_reserve = 1_000_000_000_000(1.000.000 lado coin; 6 decimais)pc_reserve = 2_000_000_000_000(2.000.000 lado pc; 6 decimais)- Taxas: padrão
swap = 25/10_000,pnl = 3/10_000.
SwapBaseIn entrada exata 1_000_000_000 coin (1.000 coin).
2_200_000) não é separada em lugar nenhum — é simplesmente o resíduo que eleva k'.
Regras de precisão
- Multiplicações de reserva usam
u128; divisões finais arredondam para zero. swap_feearredonda para cima (para que o pool não cobre menos).amount_inparaSwapBaseOutarredonda para cima (para que o usuário não pague menos).- Pools com razões de reserva extremas podem atingir
ZeroTradingTokensem entradas muito pequenas; mesma convenção que CPMM.
Limitações vs CPMM
- As reservas do AMM v4 agora são apenas de vault, então você pode cotar diretamente dos saldos de vault (menos
need_take_pnl_*) — o requisito anterior de adicionar os valoresopen_orders.free/open_orders.lockednão se aplica mais. A cotação do SDK / API permanece a opção mais simples. - O AMM v4 não expõe um TWAP estruturado on-chain. Consumidores externos que desejam um preço apoiado por AMM-v4 devem calculá-lo eles mesmos a partir de logs de negociação.
- Token-2022 não é suportado.
Próximos passos
products/amm-v4/instructions— ondeSwapBaseIn,Deposit, etc. se conectam.products/amm-v4/fees— mecânica completa de taxas, detalhes deTakePnl.algorithms/constant-product— a derivação compartilhada.
- Código-fonte do programa Raydium AMM —
raydium-io/raydium-amm - Módulo
Liquiditydo Raydium SDK v2

