Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
A partir da atualização do programa 2026-07, a dependência OpenBook / Serum do AMM v4 foi removida. As instruções legadas v1
SwapBaseIn / SwapBaseOut, Deposit e Withdraw mantêm seus layouts de conta antigos para compatibilidade com versões anteriores: as contas de mercado ainda são aceitas em suas posições antigas, mas não são mais validadas ou usadas (nenhum CPI é emitido). Novas integrações devem usar os pontos de entrada de swap V2, que omitem completamente as contas de mercado. Várias instruções foram removidas e agora revertidas — veja a entrada do changelog. As listas de contas abaixo usam os nomes de campo do SDK Raydium; o IDL subjacente às vezes usa prefixos serum_*.A atualização do programa 2026-09 adiciona uma instrução de admin, WithdrawExcessLamports (tag 18), e remove a sysvar de rent de CreateConfigAccount. Tudo o que um trader ou LP chama permanece inalterado. Veja a entrada do changelog 2026-09-09.Inventário de instruções
O SDK expõe builders apenas para as instruções voltadas ao usuário. Instruções de manutenção são tipicamente invocadas pelo keeper Raydium.
Removidas / não mais chamáveis (seus builders de cliente foram deletados):
Initialize (tag 0, use Initialize2), MonitorStep (2), MigrateToOpenBook (5), WithdrawSrm (8), PreInitialize (10, use Initialize2), SimulateInfo (12), AdminCancelOrders (13).
Uma transação carregando uma dessas tags falha; o programa nunca executa a instrução. Trate todos os sete como desaparecidos em vez de caminhos de erro a serem tratados.
Initialize2
Inicializar um novo pool AMM v4 vinculado a um mercado OpenBook existente.
Argumentos
W, signatário S)
Dois layouts aceitos. A lista de 19 contas acima é a recomendada. Por
compatibilidade retroativa o programa também lê um layout legado de 21 contas, que insere um
amm_open_orders ignorado na posição 7 e um market_program ignorado na posição 16 — é isso que
o construtor de instruções initialize2 no repositório ainda emite. Qualquer outro comprimento é
analisado posicionalmente contra o layout legado e vai falhar.- LP mintado para o criador =
sqrt(init_coin_amount × init_pc_amount) − 10^coin_mint.decimals. Os decimais de LP são iguais acoin_mint.decimals, portanto a quantia subtraída é exatamente um token LP inteiro; ele nunca é mintado e fica permanentemente fora de circulação. Sesqrt(...)for menor que isso, a instrução reverte comInitLpAmountTooLess. AmmInfo.lp_amountarmazena osqrt(...)completo, não a quantia mintada — portantolp_mint.supplyfica permanentemente um token LP inteiro abaixo deamm.lp_amount. Toda a matemática pro-rata usaamm.lp_amount.- Nenhuma ordem OpenBook é postada (a grade de livro de ordens foi removida).
AmmInfo.marketregistra a conta passada no slot 15, masAmmInfo.open_orderseAmmInfo.market_programsão ambos escritos comoPubkey::default(), ecoin_lot_size/pc_lot_size/min_sizesão inicializados para0. No layout legado de 21 contas, as contas extrasamm_open_ordersemarket_programsão lidas e descartadas.
InvalidCoinMint (mints coin e pc idênticos), InvalidConfigAccount (PDA amm_config errado), InvalidFee (destino errado da taxa de criação de pool), InvalidProgramAddress (amm_authority errado ou nonce errado), RepeatCreateAmm (já existe um pool para este mercado), InitLpAmountTooLess, InvalidSupply (uma das quantias iniciais é 0, ou o mint de LP já tem suprimento), AlreadyInUse.
Deposit
Adicionar liquidez.
Argumentos
Matemática — pro-rata padrão. Usando as reservas efetivas do pool (vaults + em livro), o SDK calcula o par coin/pc que produz a quantidade de LP fornecida e verifica contra
max_*. Reverte com ExceededSlippage se qualquer lado exceder o limite.
Withdraw
Queimar LP, receber ambos os lados.
Argumentos
Não há mais nenhuma etapa de settle-from-OpenBook — a matemática pro-rata usa os saldos de vault diretamente.
SwapBaseIn
Swap de entrada exata. Sempre um swap de caminho AMM (não roteia através de matching OpenBook).
Use as variantes V2 para novo código. Como a dependência OpenBook do AMM v4 foi removida, os pontos de entrada V1 (
SwapBaseIn, SwapBaseOut) ainda esperam a lista completa de 17 contas (ou 18 com a conta target-orders opcional), mas as contas OpenBook/market agora são aceitas posicionalmente e ignoradas — não são validadas e nenhum CPI é emitido. Passar uma contagem de conta errada ainda reverte com WrongAccountsNumber, mas o conteúdo das contas de mercado não é mais verificado. Novas integrações devem usar SwapBaseInV2 / SwapBaseOutV2, que usam uma lista de contas muito menor e representam o caminho de execução canônico hoje. Os formulários V1 são documentados aqui para completude e para ler transações on-chain existentes.
Matemática — veja
products/amm-v4/math.
Pré-condições
AmmStatus::from_u64(amm.status).swap_permission()é verdadeiro — isto é,statusé1(Initialized),6(SwapOnly) ou7(WaitingTrade).statusé um valor de enum, não uma bitmask; vejaproducts/amm-v4/accounts.amm.state_data.pool_open_time <= now.amount_in > 0.user_source_token_accountcontém pelo menosamount_in.
- Usuário perde
amount_indo token de origem, ganhaamount_out ≥ minimum_amount_outdo token de destino. - A taxa de swap permanece nos vaults, elevando o invariante
k. Os contadoresneed_take_pnl_*não são tocados pelos swaps — o PnL de protocolo é recalculado a partir do delta dekno próximoDeposit,WithdrawouWithdrawPnl(Processor::calc_take_pnl). - Nota: os contadores de análise
state_data.swap_*_in_amount/swap_*_out_amountnão são mais atualizados — seus valores estão congelados. Use logs de trade para análise de volume.
ExceededSlippage, InvalidInput, InvalidStatus, NotAllowed (mint coin/pc idêntico).
SwapBaseOut
Saída exata, inverso de SwapBaseIn. Mesmas contas.
Argumentos
SwapBaseInV2 / SwapBaseOutV2
Pontos de entrada de swap variantes (tags 16 / 17) que pulam completamente as contas OpenBook. A matemática é idêntica ao caminho V1, mas a lista de contas encolhe para apenas o lado AMM e o usuário — 8 contas, e amm_open_orders não é passado:
As reservas do pool agora são os saldos de vault (menos PnL pendente), então a matemática de quote é direta e idêntica ao caminho v1. Use V2 para economizar compute e evitar passar as contas de mercado (agora ignoradas). O roteador Raydium sempre usa a forma V2 ao rotear através do AMM v4.
Os argumentos são os mesmos dos formulários V1 (
amount_in / minimum_amount_out para SwapBaseInV2; max_amount_in / amount_out para SwapBaseOutV2).
MonitorStep e outras instruções removidas
Historicamente, MonitorStep acionava a interação OpenBook do pool: liquidava ordens preenchidas (movendo receitas dos vaults de mercado para os vaults de pool via CPI OpenBook), cancelava ordens obsoletas e postava novas ordens para fechar a lacuna entre target_orders e amm_open_orders. Com a dependência OpenBook removida, não há nada a acionar e a instrução desapareceu. Qualquer keeper ou integração que ainda a chame deve remover a chamada.
WithdrawPnl / TakePnl
Varredura de admin de taxas de protocolo acumuladas.
Argumentos
WithdrawPnlnão recebe argumentos; lêneed_take_pnl_*e move exatamente esses valores.
Efeito
- Transfere
need_take_pnl_coindepool_coin_token_accountparapnl_coin_token_account. - Mesmo para pc.
- Zera
need_take_pnl_coineneed_take_pnl_pc. - Mudança de lógica: se o saldo de vault for insuficiente para cobrir PnL acumulado, a instrução retorna
TakePnlErrordiretamente (não manipula mais o estado do livro de ordens).
SetParams
Mudanças de parâmetros de admin, chamadas pelo multisig Raydium. Os argumentos são uma tag param: u8 + payload.
CreateConfigAccount / UpdateConfigAccount
Gerenciamento de admin do PDA AmmConfig em nível de programa (seed ["amm_config_account_seed"]). A conta contém exatamente três campos significativos — pnl_owner, cancel_owner e create_pool_fee — mais duas regiões reservadas de padding; não existe flag de criação de pool. UpdateConfigAccount define pnl_owner com param = 0, cancel_owner com param = 1, e create_pool_fee com param = 2.
Alterado em 2026-09, e compatível com versões anteriores.
CreateConfigAccount não lê mais a sysvar de rent. Sua lista de contas agora é 4 contas, reduzida de 5:O programa lê parâmetros de rent de
Rent::get() em vez de desserializar uma conta sysvar passada — o que a atualização de dependência Solana 3.0 tornou natural.A conta removida estava por último na lista, e o handler lê suas contas posicionalmente através de next_account_info sem verificação de comprimento. Uma ferramenta de admin existente que ainda passa a lista antiga de 5 contas portanto continua funcionando: a conta de rent à direita simplesmente nunca é lida. Atualize quando conveniente, não urgentemente. UpdateConfigAccount é inalterado.Initialize2 mantém a sysvar de rent na posição 3, e ainda a usa: o programa parou de chamar Rent::from_account_info nela, mas ela ainda é encaminhada para os CPIs spl_token::initialize_account e initialize_mint que criam os vaults e mint de LP do pool. Não a remova da lista de contas.
WithdrawExcessLamports
Varredura de admin de lamports sentados acima do mínimo isento de rent em contas que o programa controla. Adicionado na atualização 2026-09 para recuperar o over-funding que a redução de rent SIMD-0437 deixa para trás em contas criadas antes de cada etapa.
Move apenas o excesso. Saldos de token, dados de conta, proprietários e estado do pool não são tocados, e a instrução é um no-op em uma conta já em seu mínimo — então é seguro disparar repetidamente e novamente após cada etapa de rollout.
Argumentos — nenhum. O payload é o byte de tag único 18.
Contas
Como cada conta de origem é tratada
O programa despacha no
owner da conta de origem:
Erros comuns —
InvalidSignAccount (signatário errado), InvalidSplTokenProgram (programa errado no slot 3), InvalidProgramAddress (amm_authority errado), LamportsCalculateError (código customizado 60; a volta redonda wSOL não resultou em zero), e InsufficientFunds do caminho controlado pelo programa quando uma conta contém menos que seu próprio mínimo de rent.
Sem builder SDK. @raydium-io/raydium-sdk-v2 não fornece um builder para essa instrução, nem o repositório raydium-sdk-V2-demo — é um caminho de admin. Codifique manualmente, da forma que a varredura do lado da carteira em solana-fundamentals/rent-and-reclaimable-rent faz para a instrução do programa de token.
Matriz de mudança de estado
A coluna OpenBook desapareceu — nenhuma instrução toca um livro de ordens mais.Próximos passos
products/amm-v4/code-demos— Exemplos TypeScript para fluxos de swap e LP.products/amm-v4/fees— Detalhes deWithdrawPnle a divisão de taxa.reference/error-codes— Tabela de referência direta (erros AMM v4 estão listados nessa página).
- Programa Raydium AMM —
raydium-io/raydium-amm - Módulo
Liquiditydo Raydium SDK v2 - Programa OpenBook — validações de conta no lado do mercado

