Stable AMM é um programa independente com seu próprio ID de programa. Não é um modo do programa AMM v4, e não é negociado “através” do AMM v4 — é implantado, atualizado e chamado separadamente. Assemelha-se ao AMM v4 apenas nas convenções de taxa e layout de conta.
Atualização de 2026-06-22 — remoção do código OpenBook (market) inativo. Stable AMM parou de postar ordens no OpenBook há muito tempo; o caminho de market-making do orderbook está dormindo há anos. Esta atualização deleta as contas e código relacionados ao mercado restantes — não altera o comportamento de negociação ao vivo.Duas consequências para integradores:
- Layouts de conta menores.
SwapBaseIn / SwapBaseOut (18 → 9), Deposit (14 → 12), e Withdraw (21/22 → 12) removem as contas Serum/market inativas. Layouts antigos ainda são analisados para compatibilidade com versões anteriores. WithdrawPnl (16 → 10) é uma mudança de quebra difícil sem caminho de compatibilidade (apenas admin).
- A maioria das instruções é removida. Apenas
SwapBaseIn, SwapBaseOut, Deposit, Withdraw, e WithdrawPnl permanecem chamáveis. Todas as outras instruções não podem mais ser chamadas.
Changelog: reference/changelog.
Inventário de instruções
Chamáveis
| Instrução | Categoria | Notas |
|---|
Deposit | Liquidez | Adicionar liquidez, receber LP. Novo layout de 12 contas; layout antigo de 14 contas ainda compatível. |
Withdraw | Liquidez | Queimar LP, receber ambos os lados. Novo layout de 12 contas; layout antigo de 21/22 contas ainda compatível. |
SwapBaseIn | Swap | Swap de entrada exata. Novo layout de 9 contas; layout antigo de 18 contas ainda compatível. |
SwapBaseOut | Swap | Swap de saída exata. Novo layout de 9 contas; layout antigo de 18 contas ainda compatível. |
WithdrawPnl | Admin | Coletar taxas de protocolo acumuladas. Novo layout de 10 contas (quebra difícil — sem compatibilidade de layout antigo). |
Removidas (não mais chamáveis)
Estas foram removidas na atualização de 2026-06-22 e não podem mais ser invocadas. Veja Instruções removidas.
| Instrução | Categoria anterior | Propósito anterior |
|---|
Initialize | Ciclo de vida | Criar um pool. |
PreInitialize | Ciclo de vida | Auxiliar de pré-alocação legado. |
InitModelData | Configuração de modelo | Criar e inicializar a tabela de consulta. |
UpdateModelData | Configuração de modelo | Preencher até 5 elementos da tabela por chamada. |
MonitorStep | Crank | Liquidar preenchimentos do OpenBook, repostar ordens. |
SetParams | Admin | Alterar parâmetros do pool. |
WithdrawSrm | Legado | Coletar reembolsos de desconto de taxa SRM. |
SimulateInfo | Diagnóstico | Auxiliar de cotação somente leitura. |
Deposit
Adicionar liquidez, receber tokens LP.
Argumentos
max_coin_amount: u64
max_pc_amount: u64
base_side: u64 // 0 = base em coin, 1 = base em pc
Contas — novo layout, 12 contas (gravável W, signatário S)
| # | Nome | W | S | Notas |
|---|
| 0 | token_program | | | SPL Token. |
| 1 | amm | W | | AmmInfo do pool. |
| 2 | amm_authority | | | PDA em todo o programa. |
| 3 | amm_target_orders | W | | |
| 4 | amm_lp_mint | W | | Mint LP. |
| 5 | amm_coin_vault | W | | Cofre coin do pool. |
| 6 | amm_pc_vault | W | | Cofre pc do pool. |
| 7 | model_data_account | | | Tabela de consulta somente leitura. |
| 8 | user_source_coin | W | | Entrada coin do usuário. |
| 9 | user_source_pc | W | | Entrada pc do usuário. |
| 10 | user_dest_lp | W | | ATA LP do usuário. |
| 11 | user_source_owner | | S | Signatário da transação. |
Compatibilidade: amm_open_orders (antigo #3) e serum_market (antigo #9) são removidos. Quando 14 contas são passadas, a instrução é analisada com o layout antigo de 14 contas; as contas Serum são ignoradas.
Matemática — pro-rata padrão usando a tabela de consulta para calcular a razão. O SDK calcula o par coin/pc para a quantidade LP desejada e verifica contra os limites máximos.
Withdraw
Queimar LP, receber ambos os lados pro-rata.
Argumentos
amount: u64 // Tokens LP a queimar
Contas — novo layout, 12 contas (gravável W, signatário S)
| # | Nome | W | S | Notas |
|---|
| 0 | token_program | | | SPL Token. |
| 1 | amm | W | | AmmInfo do pool. |
| 2 | amm_authority | | | PDA em todo o programa. |
| 3 | amm_target_orders | W | | |
| 4 | amm_lp_mint | W | | Mint LP. |
| 5 | amm_coin_vault | W | | Cofre coin do pool. |
| 6 | amm_pc_vault | W | | Cofre pc do pool. |
| 7 | model_data_account | | | Tabela de consulta somente leitura. |
| 8 | user_source_lp | W | | Fonte LP do usuário. |
| 9 | user_dest_coin | W | | Saída coin do usuário. |
| 10 | user_dest_pc | W | | Saída pc do usuário. |
| 11 | user_lp_owner | | S | Signatário da transação. |
Compatibilidade: nove contas Serum (amm_open_orders, serum_program, serum_market, serum_coin_vault, serum_pc_vault, serum_vault_signer, serum_event_q, serum_bids, serum_asks) são removidas. Os layouts antigos de 21 ou 22 contas ainda são aceitos. Note, porém, que a lógica de taxa de referência para a 22ª conta opcional referrer_pc_wallet foi removida — ainda pode ser passada mas não tem mais efeito.
Pré-condições
user_source_lp contém pelo menos amount.
Pós-condições
amount tokens LP são queimados.
- O usuário recebe quantidades de coin e pc de acordo com o pro-rata atual, ajustado para taxas acumuladas.
SwapBaseIn
Swap de entrada exata usando a tabela de consulta para precificação.
Argumentos
amount_in: u64
minimum_amount_out: u64
Contas — novo layout, 9 contas (gravável W, signatário S)
| # | Nome | W | S | Notas |
|---|
| 0 | spl_token program | | | SPL Token. |
| 1 | amm | W | | AmmInfo do pool. |
| 2 | amm_authority | | | PDA em todo o programa. |
| 3 | amm_coin_vault | W | | Cofre coin do pool. |
| 4 | amm_pc_vault | W | | Cofre pc do pool. |
| 5 | model_data_account | | | Tabela de consulta somente leitura. |
| 6 | user_source_token | W | | Conta de token de entrada do usuário. |
| 7 | user_destination_token | W | | Conta de token de saída do usuário. |
| 8 | user_source_owner | | S | Usuário (signatário da transação). |
Compatibilidade: as nove contas OpenBook (amm_open_orders, serum_program, serum_market, serum_bids, serum_asks, serum_event_queue, serum_coin_vault, serum_pc_vault, serum_vault_signer) são removidas. Se o número de contas passadas não for 9, a instrução é analisada com o layout antigo de 18 contas; as contas Serum ainda devem ocupar suas posições, mas seu conteúdo não é mais validado ou usado.
Pré-condições
amm.status permite swap.
user_source_token contém ≥ amount_in.
Pós-condições
- O usuário perde
amount_in, ganha amount_out ≥ minimum_amount_out.
- As taxas do pool incrementam os contadores
need_take_pnl_*.
Matemática — Interpolação de tabela de consulta conforme descrito em products/stable/math.
SwapBaseOut
Swap de saída exata (inverso de SwapBaseIn). Mesmo layout de 9 contas, direção de matemática diferente.
Argumentos
max_amount_in: u64
amount_out: u64
WithdrawPnl
Apenas admin. Coletar taxas de protocolo acumuladas de need_take_pnl_* em contas PnL designadas.
Mudança de quebra difícil — sem caminho de compatibilidade. Esta instrução não tem análise para o layout antigo. Enviar o layout antigo falha com erros de validação como InvalidTokenCoin devido ao desalinhamento de contas (antigo #3 era open_orders). Ferramentas de admin que chamam WithdrawPnl devem ser atualizadas para o novo layout de 10 contas.
Argumentos — nenhum (orientado por estado).
Contas — novo layout, 10 contas fixas, apenas admin (gravável W, signatário S)
| # | Nome | W | S | Notas |
|---|
| 0 | spl_token program | | | SPL Token. |
| 1 | amm | W | | AmmInfo do pool. |
| 2 | amm_authority | | | PDA em todo o programa. |
| 3 | amm_coin_vault | W | | Cofre coin do pool. |
| 4 | amm_pc_vault | W | | Cofre pc do pool. |
| 5 | amm_target_orders | W | | |
| 6 | model_data | | | Tabela de consulta. |
| 7 | user_coin | W | | Conta coin do admin (recebe taxa). |
| 8 | user_pc | W | | Conta pc do admin (recebe taxa). |
| 9 | amm_admin | | S | Admin do pool (signatário). |
Mudança de lógica: quando os fundos disponíveis do pool são insuficientes para sacar o PnL acumulado, o pool não é mais colocado em CancelAllOrdersState / Disabled; a instrução retorna TakePnlError diretamente. A referrer_pc_wallet opcional também foi removida.
Pré-condições
amm_admin deve ser autorizado.
Pós-condições
need_take_pnl_coin e need_take_pnl_pc são transferidos para as contas do admin.
- Os contadores são zerados.
Instruções removidas
As seguintes instruções foram removidas na atualização de 2026-06-22 e não podem mais ser chamadas. Estão documentadas aqui apenas para que integradores as reconheçam em transações históricas e SDKs.
Initialize — anteriormente inicializava um novo pool Stable AMM. Removida.
PreInitialize — auxiliar de pré-alocação legado. Removida.
InitModelData — anteriormente criava e inicializava a tabela de consulta ModelDataInfo. Removida.
UpdateModelData — anteriormente preenchia até 5 elementos da tabela de consulta por chamada. Removida.
MonitorStep — o crank OpenBook que liquidava preenchimentos e repostava a grade de ordens. Já estava dormindo há muito tempo após o pool parar de postar no OpenBook; agora removida.
SetParams — mudanças de parâmetros de admin (status, taxas, proprietário, chave de dados de modelo, etc.). Removida.
WithdrawSrm — coletava reembolsos de desconto de taxa SRM de pools da era Serum inicial. Removida.
SimulateInfo — auxiliar de cotação somente leitura. Removida; use os auxiliares de curva estável off-chain do SDK para cotação (veja Demonstrações de código).
Próximos passos
Fontes:
raydium-stable/program/src/instruction.rs (enum e pack/unpack)
raydium-stable/program/src/processor.rs (lógica de execução)