> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026-07-22 — AMM v4: remover dependência OpenBook / Serum

> AMM v4 remove sua dependência dormida de OpenBook/Serum, CPIs e instruções de market-making: v1 Swap/Deposit/Withdraw permanecem compatíveis, WithdrawPnl e SetParams são quebras severas, e várias instruções não são mais chamáveis.

<Info>
  **Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.**

  [Ver versão em inglês →](/reference/changelog/2026-07-22-amm-v4-openbook-removal)
</Info>

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:

| Param         | Valor antigo | Novo valor |
| ------------- | ------------ | ---------- |
| `Status`      | 0            | 0          |
| `State`       | 1            | 1          |
| `Fees`        | 9            | **2**      |
| `SetOpenTime` | 11           | **3**      |

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ção           | tag | Substituição                               |
| ------------------- | --- | ------------------------------------------ |
| `Initialize`        | 0   | `Initialize2`                              |
| `MonitorStep`       | 2   | nenhuma (crank de order-book, aposentada)  |
| `MigrateToOpenBook` | 5   | nenhuma                                    |
| `WithdrawSrm`       | 8   | nenhuma (desconto de taxa SRM, aposentado) |
| `PreInitialize`     | 10  | `Initialize2`                              |
| `SimulateInfo`      | 12  | quoting off-chain / SDK                    |
| `AdminCancelOrders` | 13  | nenhuma                                    |

## 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`.
