> ## 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 esperadas, 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>
  As instruções AMM v4 esperam uniformemente tanto um **pool side** (contas do programa AMM v4) quanto um **market side** (contas OpenBook para o mercado vinculado). Omitir ou descompasar qualquer um dos conjuntos reverte a operação. As listas de contas abaixo usam nomes de campo do Raydium SDK para clareza; o IDL subjacente às vezes usa prefixos `serum_*`.
</Info>

## Inventário de instruções

| Grupo                 | Instrução             | Notas                                                                                      |
| --------------------- | --------------------- | ------------------------------------------------------------------------------------------ |
| Ciclo de vida do pool | `Initialize2`         | Instrução de criação de pool atual (ainda funcional; a UI padrão para novos pools é CPMM). |
| Liquidez              | `Deposit`             | Adicionar liquidez, receber LP.                                                            |
| Liquidez              | `Withdraw`            | Queimar LP, receber ambos os lados pro-rata.                                               |
| Swap                  | `SwapBaseIn`          | Swap de entrada exata (caminho completo: vaults + OpenBook).                               |
| Swap                  | `SwapBaseOut`         | Swap de saída exata (caminho completo).                                                    |
| Swap                  | `SwapBaseInV2`        | Swap de entrada exata que ignora OpenBook — apenas vaults, menos contas.                   |
| Swap                  | `SwapBaseOutV2`       | Swap de saída exata que ignora OpenBook.                                                   |
| Manutenção            | `SetParams`           | Admin: alterar parâmetros do pool.                                                         |
| Manutenção            | `WithdrawPnl`         | Varrer PnL do protocolo acumulado para as contas proprietário-PnL.                         |
| Manutenção            | `CreateConfigAccount` | Admin: inicializar o `AmmConfig` PDA em nível de programa.                                 |
| Manutenção            | `UpdateConfigAccount` | Admin: alterar parâmetros de configuração em nível de programa.                            |

O SDK expõe builders apenas para instruções com interface de usuário. Instruções de manutenção são tipicamente invocadas pelo keeper do Raydium.

## `Initialize2`

Bootstrap 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** (escrita `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 LP do criador.                              |
| 15 | `pool_temp_lp_token_account` | W |   | Conta de rascunho.                              |
| 16 | `market_program`             |   |   | Programa OpenBook.                              |
| 17 | `market`                     |   |   | Mercado OpenBook.                               |
| 18 | `user_wallet`                | W | S | Criador. Paga rent 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 LP são mantidas fora de circulação.
* As ordens OpenBook **ainda não** foram postadas; o primeiro `MonitorStep` posta a grid inicial.

**Erros comuns** — `InvalidInput` (decimais descompassadas, não ordenados), `NotApproved`, `InvalidMarketState` do lado OpenBook.

## `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 + on-book), o SDK calcula o par coin/pc que rende 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` é escrita para burn, os ATAs do usuário são receptores. Uma etapa de settle-from-OpenBook semelhante a `MonitorStep` acontece internamente antes da matemática pro-rata para que o resgate use reservas frescas.

## `SwapBaseIn`

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

<Note>
  **Use as variantes V2 para novo código.** Como o AMM v4 não compartilha mais liquidez com OpenBook, os entrypoints V1 (`SwapBaseIn`, `SwapBaseOut`) — que ainda requerem o conjunto completo de contas OpenBook para validação — são funcionalmente redundantes. Novas integrações devem usar [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2), que levam uma lista de contas muito menor e representam o caminho de execução canônico hoje. As formas V1 são documentadas 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 bitmask de status não está definido).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account` manté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.
* `state_data.swap_*_in_amount` e `swap_*_out_amount` incrementados (para análise).
* `need_take_pnl_*` incrementado pela parcela de taxa de protocolo.

**Erros comuns** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `InvalidMarket`.

## `SwapBaseOut`

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

**Argumentos**

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

## `SwapBaseInV2` / `SwapBaseOutV2`

Variantes de entrypoint de swap que **ignoram as contas OpenBook completamente**. A matemática é idêntica ao caminho V1, mas a lista de contas encolhe apenas para o lado AMM:

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

As reservas efetivas do pool ainda levam em conta tokens postados no OpenBook, então a matemática de quote não muda. Use V2 para economizar compute e evitar passar as contas de mercado quando você não precisa de um crank OpenBook na mesma transação. O roteador Raydium sempre usa a forma V2 ao rotear através de AMM v4.

Os argumentos são os mesmos das formas V1 (`amount_in / minimum_amount_out` para `SwapBaseInV2`; `max_amount_in / amount_out` para `SwapBaseOutV2`).

## `MonitorStep` (legado / inerte)

<Note>
  **Não é mais acionado.** AMM v4 não compartilha mais liquidez com OpenBook, então `MonitorStep` não tem nada a fazer — o pool não tem ordens postadas para settle, cancel ou replace. A instrução permanece no programa on-chain para compatibilidade com versões anteriores, mas o keeper do Raydium não a chama mais. Chamá-la manualmente é efetivamente um no-op (exceto por atualizar o estado zerado) e não deve ser necessário para integradores.
</Note>

Originalmente esta instrução acionava a interação do pool com OpenBook.

**Argumentos**

```
plan_order_limit:   u16
place_order_limit:  u16
cancel_order_limit: u16
```

**Contas** — tudo acima para um swap, mais contas administrativas OpenBook.

**Efeito original** (não é mais relevante na prática):

* Settled quaisquer ordens preenchidas (seus rendimentos movidos de `market_coin_vault`/`market_pc_vault` para os vaults do pool via OpenBook CPI).
* Cancelou ordens obsoletas cujos preços ou tamanhos não correspondiam mais a `target_orders`.
* Postou novas ordens para fechar a lacuna entre `target_orders` e `amm_open_orders`.

Sem permissão. Qualquer conta pode chamá-la; historicamente o keeper do Raydium o fazia rotineiramente.

## `WithdrawPnl` / `TakePnl`

Sweep administrativo de taxas de protocolo acumuladas.

**Argumentos**

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

**Contas** (abreviado)

| #  | Nome                      | W | S |                                          |
| -- | ------------------------- | - | - | ---------------------------------------- |
| 1  | `token_program`           |   |   |                                          |
| 2  | `amm`                     | W |   |                                          |
| 3  | `amm_authority`           |   |   |                                          |
| 4  | `amm_config`              |   |   |                                          |
| 5  | `amm_open_orders`         | W |   |                                          |
| 6  | `pool_coin_token_account` | W |   |                                          |
| 7  | `pool_pc_token_account`   | W |   |                                          |
| 8  | `pnl_coin_token_account`  | W |   | Destinatário, armazenado em `AmmConfig`. |
| 9  | `pnl_pc_token_account`    | W |   |                                          |
| 10 | `pnl_owner`               |   | S | Multisig admin.                          |
| 11 | `market_program`          |   |   |                                          |
| 12 | `market`                  | W |   |                                          |
| 13 | `market_event_queue`      | W |   |                                          |
| 14 | `market_coin_vault`       | W |   |                                          |
| 15 | `market_pc_vault`         | W |   |                                          |
| 16 | `market_vault_signer`     |   |   |                                          |

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

Nenhuma alteração nas reservas já que o PnL acumulado foi excluído do invariante.

## `SetParams`

Alterações de parâmetros admin: máscara de status bitmask, profundidade da grid de ordenação, ondas de quantidade, taxas (raramente), etc. Chamado pelo multisig do Raydium. Os argumentos são uma tag `param: u8` + payload, análogo ao `UpdateAmmConfig` do CPMM.

## Matriz de mudança de estado

| Instrução     | Oferta `lp_mint`                    | Vaults                                   | Contadores PnL | OpenBook            |
| ------------- | ----------------------------------- | ---------------------------------------- | -------------- | ------------------- |
| `Initialize2` | oferta inicial cunhada para criador | `+ init_coin_amount`, `+ init_pc_amount` | 0              | OpenOrders criado   |
| `Deposit`     | +                                   | + ambos                                  | —              | settle fills        |
| `Withdraw`    | −                                   | − ambos                                  | —              | settle fills        |
| `SwapBaseIn`  | —                                   | + in, − out                              | + pnl share    | talvez re-post grid |
| `SwapBaseOut` | —                                   | + in, − out                              | + pnl share    | talvez re-post grid |
| `MonitorStep` | —                                   | settle fills                             | —              | cancel / post       |
| `WithdrawPnl` | —                                   | − (pnl swept)                            | 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 divisão de taxa.
* [`reference/error-codes`](/pt/reference/error-codes) — Tabela de referência (erros AMM v4 são listados nessa página).

Fontes:

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