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

# Instruções AMM v4

> Cada instrução AMM v4 com seus argumentos, as contas de pool e OpenBook que espera, e as pré/pós-condições de cada uma.

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

  [Ver versão em inglês →](/products/amm-v4/instructions)
</Info>

<Info>
  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](/pt/reference/changelog/2026-07-22-amm-v4-openbook-removal). As listas de contas abaixo usam os nomes de campo do SDK Raydium; o IDL subjacente às vezes usa prefixos `serum_*`.
</Info>

## Inventário de instruções

| Grupo                 | Instrução             | tag | Notas                                                                                         |
| --------------------- | --------------------- | --- | --------------------------------------------------------------------------------------------- |
| Ciclo de vida do pool | `Initialize2`         | 1   | Única instrução de criação de pool (UI padrão para CPMM em novos pools).                      |
| Liquidez              | `Deposit`             | 3   | Adicionar liquidez, receber LP. Layout inalterado (contas de mercado ignoradas).              |
| Liquidez              | `Withdraw`            | 4   | Queimar LP, receber ambos os lados pro-rata. Layout inalterado (contas de mercado ignoradas). |
| Swap                  | `SwapBaseIn`          | 9   | Swap de entrada exata. Layout v1 inalterado; contas de mercado aceitas mas ignoradas.         |
| Swap                  | `SwapBaseOut`         | 11  | Swap de saída exata. Igual ao anterior.                                                       |
| Swap                  | `SwapBaseInV2`        | 16  | **Recomendado.** Swap de entrada exata sem as contas de mercado.                              |
| Swap                  | `SwapBaseOutV2`       | 17  | **Recomendado.** Swap de saída exata sem as contas de mercado.                                |
| Manutenção            | `SetParams`           | 6   | Admin: alterar parâmetros do pool. **Layout + valores de `param` alterados** (breaking).      |
| Manutenção            | `WithdrawPnl`         | 7   | Varrer PnL de protocolo acumulado. **Layout de conta alterado** (breaking).                   |
| Manutenção            | `CreateConfigAccount` | 14  | Admin: inicializar o PDA `AmmConfig` em nível de programa.                                    |
| Manutenção            | `UpdateConfigAccount` | 15  | Admin: alterar parâmetros de configuração em nível de programa.                               |

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** (agora revertidas com `unimplemented!`, e 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).

## `Initialize2`

Inicializar um novo pool AMM v4 vinculado a um mercado OpenBook existente.

**Argumentos**

```
nonce:        u8
open_time:    u64
init_pc_amount:   u64
init_coin_amount: u64
```

**Contas** (gravável `W`, assinante `S`)

| #  | Nome                         | W | S | Notas                                              |
| -- | ---------------------------- | - | - | -------------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                         |
| 2  | `system_program`             |   |   |                                                    |
| 3  | `rent`                       |   |   |                                                    |
| 4  | `amm`                        | W |   | Conta `AmmInfo` (chave com seed).                  |
| 5  | `amm_authority`              |   |   | PDA do programa.                                   |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (com seed).                  |
| 7  | `lp_mint`                    | W |   |                                                    |
| 8  | `coin_mint`                  |   |   |                                                    |
| 9  | `pc_mint`                    |   |   |                                                    |
| 10 | `pool_coin_token_account`    | W |   |                                                    |
| 11 | `pool_pc_token_account`      | W |   |                                                    |
| 12 | `pool_withdraw_queue`        | W |   |                                                    |
| 13 | `pool_target_orders_account` | W |   |                                                    |
| 14 | `pool_lp_token_account`      | W |   | ATA de LP do criador.                              |
| 15 | `pool_temp_lp_token_account` | W |   | Conta scratch.                                     |
| 16 | `market_program`             |   |   | Programa OpenBook.                                 |
| 17 | `market`                     |   |   | Mercado OpenBook.                                  |
| 18 | `user_wallet`                | W | S | Criador. Paga aluguel e financia depósito inicial. |
| 19 | `user_token_coin`            | W |   |                                                    |
| 20 | `user_token_pc`              | W |   |                                                    |

**Pós-condições**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`, onde `INIT_BURN` ≈ 100 unidades de LP são mantidas fora de circulação.
* Nenhuma ordem OpenBook é postada (a grade de livro de ordens foi removida). `market_program` / `market` ainda são passados mas apenas armazenados como campos de referência; `coin_lot_size` / `pc_lot_size` / `min_size` são inicializados para `0`.

**Erros comuns** — `InvalidInput` (decimais incompatíveis, não ordenados), `NotAllowed`.

## `Deposit`

Adicionar liquidez.

**Argumentos**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = base em coin, 1 = base em pc
// (algumas variantes do SDK também aceitam other_amount_min)
```

**Contas** (abreviado)

| #  | Nome                      | W | S |
| -- | ------------------------- | - | - |
| 1  | `token_program`           |   |   |
| 2  | `amm`                     | W |   |
| 3  | `amm_authority`           |   |   |
| 4  | `amm_open_orders`         |   |   |
| 5  | `amm_target_orders`       | W |   |
| 6  | `lp_mint`                 | W |   |
| 7  | `pool_coin_token_account` | W |   |
| 8  | `pool_pc_token_account`   | W |   |
| 9  | `market`                  |   |   |
| 10 | `user_coin_token_account` | W |   |
| 11 | `user_pc_token_account`   | W |   |
| 12 | `user_lp_token_account`   | W |   |
| 13 | `user_owner`              |   | S |

**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**

```
amount: u64    // LP a queimar
```

**Contas** — como `Deposit` com a direção invertida; `lp_mint` é gravável para queima, as ATAs do usuário são receptoras. O layout de conta é inalterado (contas de mercado ainda passadas posicionalmente, ignoradas). Não há mais nenhuma etapa de settle-from-OpenBook — a matemática pro-rata usa os saldos do vault diretamente.

## `SwapBaseIn`

Swap de entrada exata. Sempre um swap de **caminho AMM** (não roteia através de correspondência OpenBook).

<Note>
  **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/mercado 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`](#swapbaseinv2-swapbaseoutv2), que usam uma lista de conta 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.
</Note>

**Argumentos**

```
amount_in:            u64
minimum_amount_out:   u64
```

**Contas** (abreviado)

| #  | Nome                        | W | S |
| -- | --------------------------- | - | - |
| 1  | `token_program`             |   |   |
| 2  | `amm`                       | W |   |
| 3  | `amm_authority`             |   |   |
| 4  | `amm_open_orders`           | W |   |
| 5  | `amm_target_orders`         | W |   |
| 6  | `pool_coin_token_account`   | W |   |
| 7  | `pool_pc_token_account`     | W |   |
| 8  | `market_program`            |   |   |
| 9  | `market`                    | W |   |
| 10 | `market_bids`               | W |   |
| 11 | `market_asks`               | W |   |
| 12 | `market_event_queue`        | W |   |
| 13 | `market_coin_vault`         | W |   |
| 14 | `market_pc_vault`           | W |   |
| 15 | `market_vault_signer`       |   |   |
| 16 | `user_source_token_account` | W |   |
| 17 | `user_dest_token_account`   | W |   |
| 18 | `user_owner`                |   | S |

**Matemática** — veja [`products/amm-v4/math`](/pt/products/amm-v4/math).

**Pré-condições**

* `amm.status` permite swap (bit 0 da máscara de bits de status não definido).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account` contém pelo menos `amount_in`.

**Pós-condições**

* Usuário perde `amount_in` do token de origem, ganha `amount_out ≥ minimum_amount_out` do token de destino.
* `need_take_pnl_*` incrementado pela parcela de taxa de protocolo.
* Nota: os contadores de análise `state_data.swap_*_in_amount` / `swap_*_out_amount` **não são mais atualizados** — seus valores estão congelados. Use logs de negociação para análise de volume.

**Erros comuns** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `NotAllowed` (mint coin/pc idêntico).

## `SwapBaseOut`

Saída exata, inverso de `SwapBaseIn`. Mesmas contas.

**Argumentos**

```
max_amount_in: u64
amount_out:    u64
```

## `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**:

| # | Nome                        | W | S |
| - | --------------------------- | - | - |
| 1 | `token_program`             |   |   |
| 2 | `amm`                       | W |   |
| 3 | `amm_authority`             |   |   |
| 4 | `pool_coin_token_account`   | W |   |
| 5 | `pool_pc_token_account`     | W |   |
| 6 | `user_source_token_account` | W |   |
| 7 | `user_dest_token_account`   | W |   |
| 8 | `user_owner`                |   | S |

As reservas do pool agora são os saldos do vault (menos PnL pendente), então a matemática de cotação é direta e idêntica ao caminho v1. Use V2 para economizar computação 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

<Warning>
  **Removidas — não mais chamáveis.** A partir da atualização 2026-07, `MonitorStep` (tag 2) foi removida do programa e agora **reverte** (`unimplemented!`) se invocada. Seu builder de cliente também foi deletado. O mesmo se aplica a `MigrateToOpenBook` (5), `WithdrawSrm` (8), `SimulateInfo` (12), `AdminCancelOrders` (13), e os pontos de entrada legados de criação de pool `Initialize` (0) / `PreInitialize` (10) — use `Initialize2` em vez disso.
</Warning>

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 para 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**

* `WithdrawPnl` não recebe argumentos; lê `need_take_pnl_*` e move exatamente esses valores.

<Warning>
  **Mudança breaking (admin apenas).** A lista de contas caiu de 17 (+1 opcional) para **10** — `amm_open_orders` e todas as seis contas de mercado foram removidas — sem **análise de compatibilidade**. O layout antigo desalinha (antigo #5 era `amm_open_orders`, agora `pool_coin_token_account`) e falha com erros como `InvalidCoinVault`. Ferramentas de admin devem ser atualizadas.
</Warning>

**Contas** (novo layout de 10 contas)

| #  | Nome                      | W | S |                    |
| -- | ------------------------- | - | - | ------------------ |
| 1  | `token_program`           |   |   |                    |
| 2  | `amm`                     | W |   |                    |
| 3  | `amm_config`              |   |   |                    |
| 4  | `amm_authority`           |   |   |                    |
| 5  | `pool_coin_token_account` | W |   |                    |
| 6  | `pool_pc_token_account`   | W |   |                    |
| 7  | `pnl_coin_token_account`  | W |   | Destinatário.      |
| 8  | `pnl_pc_token_account`    | W |   |                    |
| 9  | `pnl_owner`               |   | S | Multisig de admin. |
| 10 | `amm_target_orders`       | W |   |                    |

**Efeito**

* Transfere `need_take_pnl_coin` de `pool_coin_token_account` para `pnl_coin_token_account`.
* Mesmo para pc.
* Zera `need_take_pnl_coin` e `need_take_pnl_pc`.
* **Mudança de lógica**: se o saldo do vault for insuficiente para cobrir PnL acumulado, a instrução retorna `TakePnlError` diretamente (não manipula mais o estado do livro de ordens).

Nenhuma mudança nas reservas já que PnL acumulado foi excluído do invariante.

## `SetParams`

Mudanças de parâmetros de admin, chamadas pelo multisig Raydium. Os argumentos são uma tag `param: u8` + payload.

<Warning>
  **Mudança breaking (admin apenas).** A lista de contas foi reduzida para apenas `[amm (W), admin (S)]` (a autoridade, open-orders, target-orders, vault e todas as contas de mercado foram removidas). O enum `param` foi **renumerado e reduzido**: `Status` = 0, `State` = 1, `Fees` = **2** (era 9), `SetOpenTime` = **3** (era 11). Todos os parâmetros de grade de livro de ordens e `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder` foram removidos, e a struct `SetParamsInstruction` removeu `new_pubkey` e `last_order_distance`. Ferramentas de admin devem ser atualizadas.
</Warning>

## Matriz de mudança de estado

A coluna OpenBook desapareceu — nenhuma instrução toca um livro de ordens mais.

| Instrução                       | Suprimento `lp_mint`                 | Vaults                                   | Contadores de PnL |
| ------------------------------- | ------------------------------------ | ---------------------------------------- | ----------------- |
| `Initialize2`                   | suprimento init cunhado para criador | `+ init_coin_amount`, `+ init_pc_amount` | 0                 |
| `Deposit`                       | +                                    | + ambos                                  | —                 |
| `Withdraw`                      | −                                    | − ambos                                  | —                 |
| `SwapBaseIn` / `SwapBaseInV2`   | —                                    | + in, − out                              | + pnl share       |
| `SwapBaseOut` / `SwapBaseOutV2` | —                                    | + in, − out                              | + pnl share       |
| `WithdrawPnl`                   | —                                    | − (pnl varrido)                          | 0                 |
| `SetParams`                     | —                                    | —                                        | —                 |

## Próximos passos

* [`products/amm-v4/code-demos`](/pt/products/amm-v4/code-demos) — Exemplos TypeScript para fluxos de swap e LP.
* [`products/amm-v4/fees`](/pt/products/amm-v4/fees) — Detalhes de `WithdrawPnl` e a divisão de taxa.
* [`reference/error-codes`](/pt/reference/error-codes) — Tabela de referência direta (erros AMM v4 estão listados nessa página).

Fontes:

* [Programa Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Módulo `Liquidity` do SDK Raydium v2
* Programa OpenBook — validações de conta no lado do mercado
