> ## 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 do Stable AMM

> O conjunto de instruções atualmente chamáveis — Deposit, Withdraw, SwapBaseIn, SwapBaseOut, WithdrawPnl — mais as instruções removidas na atualização de 2026-06-22.

<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/stable/instructions)
</Info>

<Info>
  Stable AMM é um **programa independente** com seu próprio ID de programa. **Não** é um modo do programa AMM v4, e não é negociado "através" do AMM v4 — é implantado, atualizado e chamado separadamente. Assemelha-se ao AMM v4 apenas nas convenções de taxa e layout de conta.
</Info>

<Warning>
  **Atualização de 2026-06-22 — remoção do código OpenBook (market) inativo.** Stable AMM **parou de postar ordens no OpenBook há muito tempo**; o caminho de market-making do orderbook está dormindo há anos. Esta atualização deleta as contas e código relacionados ao mercado restantes — **não** altera o comportamento de negociação ao vivo.

  Duas consequências para integradores:

  1. **Layouts de conta menores.** `SwapBaseIn` / `SwapBaseOut` (**18 → 9**), `Deposit` (**14 → 12**), e `Withdraw` (**21/22 → 12**) removem as contas Serum/market inativas. Layouts antigos ainda são analisados para compatibilidade com versões anteriores. `WithdrawPnl` (**16 → 10**) é uma **mudança de quebra difícil sem caminho de compatibilidade** (apenas admin).
  2. **A maioria das instruções é removida.** Apenas `SwapBaseIn`, `SwapBaseOut`, `Deposit`, `Withdraw`, e `WithdrawPnl` permanecem chamáveis. Todas as outras instruções não podem mais ser chamadas.

  Changelog: [`reference/changelog`](/pt/reference/changelog).
</Warning>

## Inventário de instruções

### Chamáveis

| Instrução     | Categoria | Notas                                                                                                                        |
| ------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `Deposit`     | Liquidez  | Adicionar liquidez, receber LP. Novo layout de 12 contas; layout antigo de 14 contas ainda compatível.                       |
| `Withdraw`    | Liquidez  | Queimar LP, receber ambos os lados. Novo layout de 12 contas; layout antigo de 21/22 contas ainda compatível.                |
| `SwapBaseIn`  | Swap      | Swap de entrada exata. Novo layout de 9 contas; layout antigo de 18 contas ainda compatível.                                 |
| `SwapBaseOut` | Swap      | Swap de saída exata. Novo layout de 9 contas; layout antigo de 18 contas ainda compatível.                                   |
| `WithdrawPnl` | Admin     | Coletar taxas de protocolo acumuladas. Novo layout de 10 contas (**quebra difícil — sem compatibilidade de layout antigo**). |

### Removidas (não mais chamáveis)

Estas foram removidas na atualização de 2026-06-22 e não podem mais ser invocadas. Veja [Instruções removidas](#instruções-removidas).

| Instrução         | Categoria anterior     | Propósito anterior                                    |
| ----------------- | ---------------------- | ----------------------------------------------------- |
| `Initialize`      | Ciclo de vida          | Criar um pool.                                        |
| `PreInitialize`   | Ciclo de vida          | Auxiliar de pré-alocação legado.                      |
| `InitModelData`   | Configuração de modelo | Criar e inicializar a tabela de consulta.             |
| `UpdateModelData` | Configuração de modelo | Preencher até 5 elementos da tabela por chamada.      |
| `MonitorStep`     | Crank                  | Liquidar preenchimentos do OpenBook, repostar ordens. |
| `SetParams`       | Admin                  | Alterar parâmetros do pool.                           |
| `WithdrawSrm`     | Legado                 | Coletar reembolsos de desconto de taxa SRM.           |
| `SimulateInfo`    | Diagnóstico            | Auxiliar de cotação somente leitura.                  |

## `Deposit`

Adicionar liquidez, receber tokens LP.

**Argumentos**

```
max_coin_amount: u64
max_pc_amount: u64
base_side: u64          // 0 = base em coin, 1 = base em pc
```

**Contas** — novo layout, 12 contas (gravável `W`, signatário `S`)

| #  | Nome                 | W | S | Notas                                   |
| -- | -------------------- | - | - | --------------------------------------- |
| 0  | `token_program`      |   |   | SPL Token.                              |
| 1  | `amm`                | W |   | `AmmInfo` do pool.                      |
| 2  | `amm_authority`      |   |   | PDA em todo o programa.                 |
| 3  | `amm_target_orders`  | W |   |                                         |
| 4  | `amm_lp_mint`        | W |   | Mint LP.                                |
| 5  | `amm_coin_vault`     | W |   | Cofre coin do pool.                     |
| 6  | `amm_pc_vault`       | W |   | Cofre pc do pool.                       |
| 7  | `model_data_account` |   |   | **Tabela de consulta somente leitura.** |
| 8  | `user_source_coin`   | W |   | Entrada coin do usuário.                |
| 9  | `user_source_pc`     | W |   | Entrada pc do usuário.                  |
| 10 | `user_dest_lp`       | W |   | ATA LP do usuário.                      |
| 11 | `user_source_owner`  |   | S | Signatário da transação.                |

**Compatibilidade**: `amm_open_orders` (antigo #3) e `serum_market` (antigo #9) são removidos. Quando **14** contas são passadas, a instrução é analisada com o layout antigo de 14 contas; as contas Serum são ignoradas.

**Matemática** — pro-rata padrão usando a tabela de consulta para calcular a razão. O SDK calcula o par coin/pc para a quantidade LP desejada e verifica contra os limites máximos.

## `Withdraw`

Queimar LP, receber ambos os lados pro-rata.

**Argumentos**

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

**Contas** — novo layout, 12 contas (gravável `W`, signatário `S`)

| #  | Nome                 | W | S | Notas                                   |
| -- | -------------------- | - | - | --------------------------------------- |
| 0  | `token_program`      |   |   | SPL Token.                              |
| 1  | `amm`                | W |   | `AmmInfo` do pool.                      |
| 2  | `amm_authority`      |   |   | PDA em todo o programa.                 |
| 3  | `amm_target_orders`  | W |   |                                         |
| 4  | `amm_lp_mint`        | W |   | Mint LP.                                |
| 5  | `amm_coin_vault`     | W |   | Cofre coin do pool.                     |
| 6  | `amm_pc_vault`       | W |   | Cofre pc do pool.                       |
| 7  | `model_data_account` |   |   | **Tabela de consulta somente leitura.** |
| 8  | `user_source_lp`     | W |   | Fonte LP do usuário.                    |
| 9  | `user_dest_coin`     | W |   | Saída coin do usuário.                  |
| 10 | `user_dest_pc`       | W |   | Saída pc do usuário.                    |
| 11 | `user_lp_owner`      |   | S | Signatário da transação.                |

**Compatibilidade**: nove contas Serum (`amm_open_orders`, `serum_program`, `serum_market`, `serum_coin_vault`, `serum_pc_vault`, `serum_vault_signer`, `serum_event_q`, `serum_bids`, `serum_asks`) são removidas. Os layouts antigos de **21** ou **22 contas** ainda são aceitos. Note, porém, que a **lógica de taxa de referência para a 22ª conta opcional `referrer_pc_wallet` foi removida** — ainda pode ser passada mas não tem mais efeito.

**Pré-condições**

* `user_source_lp` contém pelo menos `amount`.

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

* `amount` tokens LP são queimados.
* O usuário recebe quantidades de coin e pc de acordo com o pro-rata atual, ajustado para taxas acumuladas.

## `SwapBaseIn`

Swap de entrada exata usando a tabela de consulta para precificação.

**Argumentos**

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

**Contas** — novo layout, 9 contas (gravável `W`, signatário `S`)

| # | Nome                     | W | S | Notas                                   |
| - | ------------------------ | - | - | --------------------------------------- |
| 0 | `spl_token program`      |   |   | SPL Token.                              |
| 1 | `amm`                    | W |   | `AmmInfo` do pool.                      |
| 2 | `amm_authority`          |   |   | PDA em todo o programa.                 |
| 3 | `amm_coin_vault`         | W |   | Cofre coin do pool.                     |
| 4 | `amm_pc_vault`           | W |   | Cofre pc do pool.                       |
| 5 | `model_data_account`     |   |   | **Tabela de consulta somente leitura.** |
| 6 | `user_source_token`      | W |   | Conta de token de entrada do usuário.   |
| 7 | `user_destination_token` | W |   | Conta de token de saída do usuário.     |
| 8 | `user_source_owner`      |   | S | Usuário (signatário da transação).      |

**Compatibilidade**: as nove contas OpenBook (`amm_open_orders`, `serum_program`, `serum_market`, `serum_bids`, `serum_asks`, `serum_event_queue`, `serum_coin_vault`, `serum_pc_vault`, `serum_vault_signer`) são removidas. Se o número de contas passadas **não for 9**, a instrução é analisada com o layout antigo de **18 contas**; as contas Serum ainda devem ocupar suas posições, mas seu conteúdo não é mais validado ou usado.

**Pré-condições**

* `amm.status` permite swap.
* `user_source_token` contém ≥ `amount_in`.

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

* O usuário perde `amount_in`, ganha `amount_out ≥ minimum_amount_out`.
* As taxas do pool incrementam os contadores `need_take_pnl_*`.

**Matemática** — Interpolação de tabela de consulta conforme descrito em [`products/stable/math`](/pt/products/stable/math).

## `SwapBaseOut`

Swap de saída exata (inverso de `SwapBaseIn`). Mesmo layout de 9 contas, direção de matemática diferente.

**Argumentos**

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

## `WithdrawPnl`

Apenas admin. Coletar taxas de protocolo acumuladas de `need_take_pnl_*` em contas PnL designadas.

<Warning>
  **Mudança de quebra difícil — sem caminho de compatibilidade.** Esta instrução **não** tem análise para o layout antigo. Enviar o layout antigo falha com erros de validação como `InvalidTokenCoin` devido ao desalinhamento de contas (antigo #3 era `open_orders`). Ferramentas de admin que chamam `WithdrawPnl` **devem** ser atualizadas para o novo layout de 10 contas.
</Warning>

**Argumentos** — nenhum (orientado por estado).

**Contas** — novo layout, 10 contas fixas, apenas admin (gravável `W`, signatário `S`)

| # | Nome                | W | S | Notas                              |
| - | ------------------- | - | - | ---------------------------------- |
| 0 | `spl_token program` |   |   | SPL Token.                         |
| 1 | `amm`               | W |   | `AmmInfo` do pool.                 |
| 2 | `amm_authority`     |   |   | PDA em todo o programa.            |
| 3 | `amm_coin_vault`    | W |   | Cofre coin do pool.                |
| 4 | `amm_pc_vault`      | W |   | Cofre pc do pool.                  |
| 5 | `amm_target_orders` | W |   |                                    |
| 6 | `model_data`        |   |   | Tabela de consulta.                |
| 7 | `user_coin`         | W |   | Conta coin do admin (recebe taxa). |
| 8 | `user_pc`           | W |   | Conta pc do admin (recebe taxa).   |
| 9 | `amm_admin`         |   | S | Admin do pool (signatário).        |

**Mudança de lógica**: quando os fundos disponíveis do pool são insuficientes para sacar o PnL acumulado, o pool **não é mais** colocado em `CancelAllOrdersState` / `Disabled`; a instrução retorna `TakePnlError` diretamente. A `referrer_pc_wallet` opcional também foi removida.

**Pré-condições**

* `amm_admin` deve ser autorizado.

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

* `need_take_pnl_coin` e `need_take_pnl_pc` são transferidos para as contas do admin.
* Os contadores são zerados.

## Instruções removidas

As seguintes instruções foram removidas na atualização de 2026-06-22 e **não podem mais ser chamadas**. Estão documentadas aqui apenas para que integradores as reconheçam em transações históricas e SDKs.

* **`Initialize`** — anteriormente inicializava um novo pool Stable AMM. Removida.
* **`PreInitialize`** — auxiliar de pré-alocação legado. Removida.
* **`InitModelData`** — anteriormente criava e inicializava a tabela de consulta `ModelDataInfo`. Removida.
* **`UpdateModelData`** — anteriormente preenchia até 5 elementos da tabela de consulta por chamada. Removida.
* **`MonitorStep`** — o crank OpenBook que liquidava preenchimentos e repostava a grade de ordens. Já estava dormindo há muito tempo após o pool parar de postar no OpenBook; agora removida.
* **`SetParams`** — mudanças de parâmetros de admin (status, taxas, proprietário, chave de dados de modelo, etc.). Removida.
* **`WithdrawSrm`** — coletava reembolsos de desconto de taxa SRM de pools da era Serum inicial. Removida.
* **`SimulateInfo`** — auxiliar de cotação somente leitura. Removida; use os auxiliares de curva estável off-chain do SDK para cotação (veja [Demonstrações de código](/pt/products/stable/code-demos)).

## Próximos passos

* [Contas](/pt/products/stable/accounts) — para layouts e tamanhos de campos de conta.
* [Matemática](/pt/products/stable/math) — para a lógica de interpolação da tabela de consulta.
* [Demonstrações de código](/pt/products/stable/code-demos) — para ver como chamar estas do SDK.

Fontes:

* `raydium-stable/program/src/instruction.rs` (enum e pack/unpack)
* `raydium-stable/program/src/processor.rs` (lógica de execução)
