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 →
Banner de versão.
  • SDK: @raydium-io/raydium-sdk-v2@0.2.64-alpha
  • Cluster: Solana mainnet-beta
  • ID do programa Stable AMM: 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h (veja reference/program-addresses)
  • Última verificação: 2026-09-09 contra o SDK 0.2.64-alpha e os demos amm/trade do raydium-sdk-V2-demo
O módulo liquidity do SDK suporta pools Stable AMM nativamente. Pools estáveis aparecem como version: 5 (ou pooltype: "StablePool") em ApiV3PoolInfoStandardItem; os mesmos helpers addLiquidity / removeLiquidity / swap funcionam para eles como para pools de produto constante AMM v4 (version: 4) — o SDK detecta a variante e emite as instruções corretas automaticamente. A matemática off-chain da curva estável fica em src/raydium/liquidity/stable.ts.

Configuração

initLayout() não é opcional para pools Stable. liquidity.computeAmountOut faz branch em poolInfo.version: para versão 4 usa a fórmula de produto constante, e para qualquer outra lê this.stableLayout.stableModelData e interpola a tabela de lookup. Esse cache fica vazio até initLayout() ser executado, então cotar um pool v5 sem ele produz lixo em vez de um erro. É idempotente e barato — chame uma vez na inicialização.Os builders de transação (swap, addLiquidity, removeLiquidity) não precisam disso: eles fazem dispatch em pooltype.includes("StablePool") e emitem instruções AmmV5*, e os limites de quantidade que você passa já estão computados.
liquidity.computeAmountIn não suporta pools Stable. Diferente de computeAmountOut, não tem branch de versão — sempre aplica o inverso de produto constante, então em um pool v5 retorna um maxAmountIn errado. Para um swap de saída exata contra um pool Stable, inverta com getDxByDyBaseIn você mesmo (veja Helpers de cotação off-chain abaixo) e passe o resultado para swap com fixedSide: "out".

Identificando um pool Stable

Dois sinais equivalentes em ApiV3PoolInfoStandardItem:
Tanto AMM v4 (version: 4, produto constante) quanto Stable AMM (version: 5) fluem através da mesma API LiquidityModule no SDK. Internamente o módulo faz dispatch para:
  • InstructionType.AmmV4AddLiquidity / AmmV4RemoveLiquidity para pools v4
  • InstructionType.AmmV5AddLiquidity / AmmV5RemoveLiquidity para pools v5 (Stable)
O programId do pool (retornado com as chaves do pool) diz ao SDK qual programa fazer CPI; você não precisa codificá-lo.

Encontrar um pool por par de mints

Se o par de mints tem tanto um pool v4 (produto constante) quanto um pool v5 (estável), a resposta inclui ambos — escolha o que seu fluxo precisa, ou passe-os para o programa AMM Routing e deixe-o escolher a melhor rota.

Fazer swap através de um pool Stable

O fluxo LiquidityModule.swap tem a mesma forma que para pools v4 — apenas passe um objeto pool v5. Dois detalhes são fáceis de errar: computeAmountOut precisa das reservas ao vivo do pool enxertadas na informação do pool (o item da API sozinho não as carrega), e seu slippage é um número simples, não um Percent:
O SDK lê o programId do pool a partir das chaves do pool e faz dispatch para o programa Stable AMM. Nenhum argumento programId especial é necessário.

Adicionar e remover liquidez

addLiquidity e removeLiquidity funcionam identicamente em pools v4 e v5:
Internamente o SDK emite InstructionType.AmmV5AddLiquidity porque pooltype.includes("StablePool") é verdadeiro. O fluxo removeLiquidity correspondente é simétrico — forneça lpAmount e os valores mínimos que você aceitará em cada lado.

Helpers de cotação off-chain (stable.ts)

Para cotação do lado do servidor ou backtesting, o SDK expõe a matemática subjacente da curva estável:
Essas são funções puras — sem RPC, sem assinatura. O ModelDataInfo on-chain é buscado uma vez por initLayout() e cacheado dentro de raydium.liquidity.stableLayout, legível como .stableModelData. initStableModelLayout() é idempotente: refaz apenas enquanto validDataCount === 0, então chamar initLayout() novamente é gratuito. Passe as reservas atuais (x, y) e os helpers computam fazendo busca binária na tabela de lookup e interpolação linear entre as duas linhas DataElement circundantes. Veja products/stable/math para o algoritmo subjacente.

Roteamento através do AMM Routing (multi-hop / melhor preço)

Se você não quer escolher um venue você mesmo, o programa AMM Routing considerará cada AMM Raydium (v4 / CPMM / CLMM / Stable) e roteará através de qualquer combinação que seja melhor: O roteador é um pipeline de cinco chamadas em vez de um único swap(), e é escrito por completo — com o conselho de caching que o torna usável em produção — em products/routing/code-demos. A forma é:
Não existe raydium.tradeV2.fetchRoutes, e tradeV2.swap não aceita inputMint / outputMint / slippage — recebe um swapInfo já computado de getAllRouteComputeAmountOut. Para um único pool conhecido, use o builder do tipo de pool (raydium.liquidity.swap para AMM v4 e Stable, raydium.cpmm.swap, raydium.clmm.swap) como mostrado anteriormente nesta página.
Este é o caminho recomendado para swappers e agregadores em produção — você nunca precisa decidir manualmente se um pool Stable existe ou se é o melhor venue hoje.

Recomendações

  1. Para swaps de usuário final, prefira o fluxo de roteamento tradeV2. Ele suporta cada tipo de pool Raydium incluindo Stable.
  2. Para operações específicas de pool (adicionar/remover LP em um pool Stable conhecido), use o LiquidityModule diretamente — ele detecta automaticamente pools v5.
  3. Para cotação off-chain / análise, chame getStablePrice / getDyByDxBaseIn / getDxByDyBaseIn após initLayout(). Sem tráfego RPC por cotação após os dados do modelo serem cacheados.
  4. Não codifique manualmente instruções SwapBaseIn brutas. A atualização de 2026-06-22 removeu as contas OpenBook mortas, então o novo layout de swap recebe 9 contas (o layout antigo de 18 contas ainda faz parse para compatibilidade retroativa). Deposit agora é 12 contas (14 antigas compatíveis), Withdraw 12 (21/22 antigas compatíveis), e WithdrawPnl 10 com nenhum caminho de compatibilidade. Os helpers pré-construídos do SDK selecionam o layout e ordenação corretos para você; fazer o seu próprio é propenso a erros. Veja products/stable/instructions para as tabelas de contas completas.

Para onde ir a seguir

  • Math — como funciona a interpolação da tabela de lookup.
  • Instructions — referência completa de instruções.
  • AMM Routing — roteamento multi-pool através de AMM v4, CPMM, CLMM, Stable.
Fontes: