Saltar para o conteúdo principal
Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
AMM v4 parou de compartilhar liquidez com OpenBook (antigo Serum) há muito tempo; o caminho híbrido de market-making baseado em order-book está dormido há anos. Este upgrade é a limpeza: remove a dependência Serum, todos os CPIs de order-book e as instruções de market-making mortas do programa, deixando AMM v4 como um AMM de produto constante puro (x·y=k). Ele não altera nenhum comportamento de negociação ativo — não havia ordens OpenBook restantes para parar de colocar.

TL;DR para integradores

  • Swap / Deposit / Withdraw continuam funcionando sem mudanças. Transações construídas com os layouts de conta antigos ainda executam — as contas Serum/market removidas são simplesmente ignoradas (sem validação, sem CPI). SwapBaseIn / SwapBaseOut ainda esperam 17 (+1 opcional) contas; layouts de Deposit e Withdraw são inalterados. Você não precisa enviar uma atualização de cliente para manter os fluxos existentes vivos.
  • Migre para os pontos de entrada de swap V2. SwapBaseInV2 / SwapBaseOutV2 não carregam contas de market e nenhum amm_open_orders (8 contas no total), então as transações são menores e mais baratas. Routers/agregadores devem rotear através de V2.
  • WithdrawPnl é uma quebra severa (apenas admin). Vai de 17 (+1 opcional) → 10 contas com sem análise de compatibilidade; o layout antigo desalinha (antigo #5 era amm_open_orders) e falha na validação. Ferramentas de admin devem ser atualizadas.
  • SetParams é uma quebra severa (apenas admin). Contas encolhem para [amm, admin], e o enum param é renumerado (Fees 9 → 2, SetOpenTime 11 → 3); AmmOwner, LastOrderDistance, UpdateOpenOrder e os parâmetros de grid são removidos.
  • Várias instruções não são mais chamáveis. Initialize, PreInitialize, MonitorStep, MigrateToOpenBook, WithdrawSrm, SimulateInfo e AdminCancelOrders agora revertam. Use Initialize2 para criar pools.
  • Layouts de conta on-chain são estáveis em bytes, e códigos de erro são inalterados. AmmInfo / StateData mantêm seu layout (campos OpenBook antigos retidos mas deprecados/congelados); a numeração AmmError é preservada, com apenas um novo NotAllowed anexado.

Por que isso importa (para traders, LPs e integradores)

  • Traders não veem mudança no comportamento de swap ou preço — a curva de produto constante é inalterada. Swaps com layout V2 são mais baratos de colocar porque carregam ~8 contas a menos.
  • LPs mantêm a mesma economia de depósito/saque. A liquidez há muito tempo fica inteiramente nos vaults do pool, então o valor do pool está totalmente no-pool; este upgrade apenas deleta o encanamento de market obsoleto.
  • Integradores obtêm transações menores e mais simples e um modelo de quoting que lê direto dos vaults. Integrações existentes não quebram (exceto admin WithdrawPnl / SetParams), mas o shim de compatibilidade v1-swap é temporário — migre para V2 quando conveniente.

Mudanças no nível de instrução

Ainda chamável, layout inalterado (compatível com versões anteriores)

Initialize2, Deposit, Withdraw, SwapBaseIn, SwapBaseOut, CreateConfigAccount e UpdateConfigAccount mantêm suas listas de contas existentes. Em SwapBaseIn / SwapBaseOut, Deposit e Withdraw, as contas OpenBook/market ainda são aceitas posicionalmente mas não são mais validadas ou usadas — nenhum CPI é emitido e as reservas do pool são computadas apenas de vault. A contagem de contas ainda deve corresponder, então as transações existentes continuam executando inalteradas.

SwapBaseInV2 / SwapBaseOutV2 — caminho recomendado

Omita as contas de market e amm_open_orders inteiramente (8 contas; tags 16 / 17). A matemática de quoting é idêntica a v1. Novas integrações e routers devem usar V2.

WithdrawPnl — 17 (+1 opcional) → 10 contas (⚠️ quebra severa, sem caminho de compatibilidade)

amm_open_orders e todas as seis contas de market são removidas. O novo layout fixo de 10 contas, apenas admin, não tem análise de compatibilidade; o layout antigo desalinha e falha com erros como InvalidCoinVault.

SetParams — reduzido para [amm, admin] (⚠️ quebra severa) + parâmetros renumerados

A autoridade, open-orders, target-orders, vault e todas as contas de market são removidas. O enum param é renumerado e aparado:
ParamValor antigoNovo valor
Status00
State11
Fees92
SetOpenTime113
Todos os parâmetros de grid de order-book (OrderNum, Depth, AmountWave, MinPriceMultiplier, MaxPriceMultiplier, MinSize, VolMaxCutRatio, InitOrderDepth, SetSwitchTime, ClearOpenTime, Seperate) mais AmmOwner, LastOrderDistance e UpdateOpenOrder são removidos. O struct SetParamsInstruction remove new_pubkey e last_order_distance.

Não mais chamável (revertam em tempo de execução; builders removidos)

InstruçãotagSubstituição
Initialize0Initialize2
MonitorStep2nenhuma (crank de order-book, aposentada)
MigrateToOpenBook5nenhuma
WithdrawSrm8nenhuma (desconto de taxa SRM, aposentado)
PreInitialize10Initialize2
SimulateInfo12quoting off-chain / SDK
AdminCancelOrders13nenhuma

Mudanças de reserva / estado

  • Fórmula de ativos do pool. Os ativos totais do pool agora são saldos de vault − PnL pendente (need_take_pnl); o termo de open-order OpenBook — já zero na prática — é removido. O código de quoting pode ler direto dos saldos de vault.
  • Campos de estado deprecados. StateData.total_pnl_pc, total_pnl_coin, orderbook_to_init_time, swap_coin_in_amount, swap_pc_out_amount, swap_acc_pc_fee, swap_pc_in_amount, swap_coin_out_amount e swap_acc_coin_fee são retidos para compatibilidade de layout mas não são mais atualizados. Consumidores que dependem dos contadores de volume swap_* devem mudar para trade logs.
  • Inicialização de AmmInfo. coin_lot_size, pc_lot_size e min_size agora são inicializados para 0.
  • Dependência removida e CPIs. O crate serum_dex é removido de Cargo.toml; todos os CPIs Serum DEX (invoke_dex_new_order_v3, invoke_dex_cancel_order_v2, invoke_dex_settle_funds, invoke_dex_init_open_orders, …) são removidos de invokers.rs. Structs de dados removidos: LastOrderDistance, SimulateParams, RunCrankData, GetPoolData, GetSwapBaseInData, GetSwapBaseOutData.