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

# Contas do AMM v4

> O inventário completo de contas de um pool AMM v4 — AmmInfo, TargetOrders, OpenOrders, vaults, LP mint, authority — além das contas OpenBook às quais o pool está vinculado.

<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/accounts)
</Info>

<Info>
  A partir da atualização 2026-07, a dependência do OpenBook / Serum do AMM v4 foi **removida** — nenhuma instrução lê ou escreve estado do OpenBook. As contas de mercado abaixo são mantidas apenas como placeholders posicionais nos layouts de instrução v1 legados (aceitos mas ignorados) e como campos de referência em `AmmInfo`. Use os pontos de entrada de swap V2, que as omitem completamente. Esta página ainda agrupa as contas em seções "pool-owned" e "OpenBook (legacy)" para leitura de transações antigas.
</Info>

## Inventário

Um pool AMM v4 registra um mercado vinculado em `AmmInfo` na criação. O quadro completo:

| Categoria         | Conta                                | Proprietário    | Função                                                                                                                 |
| ----------------- | ------------------------------------ | --------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Pool              | `AmmInfo`                            | Programa AMM v4 | Estado do pool: taxas acumuladas, status, referências aos vaults (e, como campos legados, o mercado).                  |
| Pool              | `amm_authority`                      | Programa AMM v4 | PDA de propriedade do programa que assina movimentos de vault. Compartilhado entre todos os pools AMM v4.              |
| Pool              | `amm_open_orders`                    | OpenBook        | Referência legada de `OpenOrders`. Não é mais lida/escrita pelo programa; ainda passada posicionalmente em layouts v1. |
| Pool              | `amm_target_orders`                  | Programa AMM v4 | Conta legada de target-orders. Ainda referenciada por `WithdrawPnl` (como conta #10) mas nenhuma grade é construída.   |
| Pool              | `pool_coin_token_account`            | SPL Token       | Vault do lado coin do pool (ATA de `amm_authority`).                                                                   |
| Pool              | `pool_pc_token_account`              | SPL Token       | Vault do lado pc do pool.                                                                                              |
| Pool              | `lp_mint`                            | SPL Token       | Mint de LP fungível.                                                                                                   |
| Pool              | `pool_withdraw_queue`                | Programa AMM v4 | Fila legada para saques atrasados; mantida com comprimento zero.                                                       |
| Pool              | `pool_temp_lp`                       | Programa AMM v4 | Conta LP auxiliar.                                                                                                     |
| Legacy (OpenBook) | `serum_market`                       | OpenBook        | O mercado vinculado. Passado em layouts v1 mas não mais validado ou usado.                                             |
| Legacy            | `serum_bids`, `serum_asks`           | OpenBook        | Filas de bid/ask. Ignoradas.                                                                                           |
| Legacy            | `serum_event_queue`                  | OpenBook        | Eventos pendentes. Ignorado.                                                                                           |
| Legacy            | `serum_coin_vault`, `serum_pc_vault` | SPL Token       | Vaults de nível de mercado. Ignorados.                                                                                 |
| Legacy            | `serum_vault_signer`                 | OpenBook        | PDA de nível de mercado. Ignorado.                                                                                     |

Nota: o prefixo "serum" é mantido no IDL e nomes de campos do AMM v4 para compatibilidade com versões anteriores. Essas contas não são mais funcionais após a remoção do OpenBook.

## `AmmInfo`

A conta de estado raiz do pool. Grande (≈ 752 bytes) porque carrega referências de pool e OpenBook inline.

```rust theme={null}
// programs/amm/src/state.rs (abridged; field order / names follow the IDL)
pub struct AmmInfo {
    pub status: u64,           // bitmask: swap/deposit/withdraw/crank enabled
    pub nonce:  u64,           // bump used to derive amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // internal state machine
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // legacy (OpenBook lot size); now initialized to 0
    pub pc_lot_size:   u64,    // legacy; now initialized to 0
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

    pub fees: Fees,            // trade/protocol/fund fee rates
    pub state_data: StateData,

    // Pool-owned accounts:
    pub coin_vault: Pubkey,
    pub pc_vault:   Pubkey,
    pub coin_vault_mint: Pubkey,
    pub pc_vault_mint:   Pubkey,
    pub lp_mint:  Pubkey,
    pub open_orders: Pubkey,   // pool's OpenOrders on OpenBook
    pub market: Pubkey,        // OpenBook market
    pub market_program: Pubkey, // OpenBook program ID
    pub target_orders: Pubkey,
    pub withdraw_queue: Pubkey,
    pub lp_vault:       Pubkey, // = pool_temp_lp
    pub owner: Pubkey,          // admin (multisig)
    pub lp_reserve: u64,
    pub padding: [u64; 3],
}

pub struct Fees {
    pub min_separate_numerator:   u64,     // 5
    pub min_separate_denominator: u64,     // 10_000
    pub trade_fee_numerator:      u64,     // 25  → used by OpenBook integration
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → protocol's share OF the swap fee
    pub pnl_denominator:          u64,     // 100 → so 12/100 = 12% of fee, = 0.03% of volume
    pub swap_fee_numerator:       u64,     // 25  → 0.25% gross swap fee
    pub swap_fee_denominator:     u64,     // 10_000
}

pub struct StateData {
    pub need_take_pnl_coin: u64,        // still updated — accrued protocol fee (coin side)
    pub need_take_pnl_pc:   u64,        // still updated — accrued protocol fee (pc side)
    pub total_pnl_pc:   u64,            // DEPRECATED — no longer updated
    pub total_pnl_coin: u64,            // DEPRECATED — no longer updated
    pub pool_open_time: u64,            // still used — pool open timestamp
    pub padding: [u64; 2],              // reserved
    pub orderbook_to_init_time: u64,    // DEPRECATED — no longer updated
    pub swap_coin_in_amount: u128,      // DEPRECATED — volume counters frozen
    pub swap_pc_out_amount:  u128,      // DEPRECATED
    pub swap_acc_pc_fee:    u64,        // DEPRECATED
    pub swap_pc_in_amount:  u128,       // DEPRECATED
    pub swap_coin_out_amount: u128,     // DEPRECATED
    pub swap_acc_coin_fee:  u64,        // DEPRECATED
}
```

<Note>
  O layout da struct **não foi alterado** (compatível em bytes) para que desserializadores existentes continuem funcionando, mas após a remoção do OpenBook os campos marcados como `DEPRECATED` acima **não são mais escritos** — os contadores de volume `swap_*` estão congelados em seu último valor. Para análise de volume, use logs de trade em vez desses campos. Apenas `need_take_pnl_*` e `pool_open_time` são mantidos ativamente.
</Note>

Campos voltados para integradores:

* **`coin_vault`**, **`pc_vault`** — os vaults SPL Token do pool. `coin` é `token_0` por convenção Serum/OpenBook (base), `pc` é `token_1` (quote).
* **`coin_decimals`**, **`pc_decimals`** — correspondendo aos mints.
* **`open_orders`**, **`target_orders`**, **`market`** — campos de referência legados. Ainda presentes em `AmmInfo` e ainda passados posicionalmente nos layouts de instrução v1, mas o programa não os lê ou valida mais. Os pontos de entrada de swap V2 os omitem.
* **`fees.swap_fee_numerator / swap_fee_denominator`** — a taxa de trade combinada. Padrão `25 / 10_000 = 0.25%`.
* **`status`** — bitmask que controla operações. Configurável por admin via `AdminSetStatus`.
* **`state_data.need_take_pnl_*`** — delta entre taxas acumuladas brutas e o que foi varrido. `TakePnl` zera esses valores.

## A fiação do OpenBook

<Note>
  **Removida.** A dependência do OpenBook / Serum foi deletada do programa (atualização 2026-07). As contas descritas nesta seção não são mais validadas ou usadas. Elas permanecem como campos de referência em `AmmInfo` e como placeholders posicionais nos layouts de instrução v1 legados. Use os **pontos de entrada de swap V2** ([`SwapBaseInV2` / `SwapBaseOutV2`](/pt/products/amm-v4/instructions)) que pulam essas contas completamente.
</Note>

Quando você chama uma instrução **v1** legada `SwapBaseIn` / `SwapBaseOut`, `Deposit` ou `Withdraw`, a **contagem** de contas ainda deve corresponder ao layout antigo (as contas de mercado ocupam suas posições históricas), mas seu **conteúdo não é mais verificado** — nenhum CPI é emitido contra elas. Código novo deve usar as variantes de swap V2, que não aceitam essas contas.

```ts theme={null}
const market = ...;  // OpenBook market PublicKey

// Fields OpenBook exposes on its market account:
const marketDecoded = OpenBookMarket.decode(marketAccountData);
const {
  bids:           serumBids,
  asks:           serumAsks,
  eventQueue:     serumEventQueue,
  requestQueue:   serumRequestQueue,
  baseVault:      serumCoinVault,
  quoteVault:     serumPcVault,
  vaultSignerNonce,
} = marketDecoded;

const serumVaultSigner = PublicKey.createProgramAddressSync(
  [market.toBuffer(), u64ToBytes(vaultSignerNonce)],
  OPENBOOK_PROGRAM_ID,
);
```

O `amm_open_orders` do AMM é uma conta de propriedade do OpenBook que mantém o estado de ordem limitada do pool neste mercado: ordens ativas, saldos liquidados, referrers, etc. `amm_target_orders` é do lado do AMM: mantém a *intenção* de grade do AMM (preço/tamanho para cada slot de ordem) para que o programa possa comparar barato contra o que está atualmente postado e colocar / cancelar a diferença.

## PDAs de autoridade

Existe exatamente um PDA `amm_authority` para todo o programa AMM v4. Sua seed é trivial (`["amm authority"]`) e seu bump é armazenado em cada `AmmInfo`. Esta autoridade assina todos os movimentos de token para todos os pools AMM v4.

```ts theme={null}
const AMM_V4_PROGRAM_ID = new PublicKey(
  "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
);
const [ammAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("amm authority")],
  AMM_V4_PROGRAM_ID,
);
```

Existe uma autoridade separada **com escopo de pool** derivada por pool para assinar operações do OpenBook (`amm_authority` acima na verdade cobre ambas no design deste programa; versões diferentes usaram derivações diferentes, então verifique o `AmmInfo.nonce` do pool específico no código).

## Vaults

Os vaults SPL Token do pool são contas de token padrão cujo `owner` é `amm_authority`. Não são ATAs — seus endereços são PDAs específicas derivadas em `Initialize` com seeds `["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]`. Os endereços são armazenados em `AmmInfo`; a derivação é uma curiosidade única.

Token-2022 **não** é suportado. O programa codifica o ID do programa SPL Token para todos os movimentos de vault. Tentar vincular um pool AMM v4 a um mint Token-2022 falha em `Initialize`.

## LP mint

Um mint SPL Token clássico cuja autoridade é `amm_authority`. O suprimento total rastreia a propriedade de LP do pool; queimar LP retorna tokens de ambos os vaults pro-rata. Como AMM v4 é anterior a CPMM, não há espelho `lp_supply` no estado do pool — leia o suprimento do mint on-chain diretamente.

## Bitmask de status

`AmmInfo.status` controla operações. Bits (a posição pode diferir entre versões do programa — confirme via a fonte):

| Bit | Flag                | Efeito                                      |
| --- | ------------------- | ------------------------------------------- |
| 0   | `SWAP_DISABLED`     | `Swap*` rejeita.                            |
| 1   | `DEPOSIT_DISABLED`  | `Deposit` rejeita.                          |
| 2   | `WITHDRAW_DISABLED` | `Withdraw` rejeita.                         |
| 3   | `CLMM_LIKE_MIGRATE` | Flag de controle de migração usado por ops. |

O multisig Raydium define esses via `SetParams` (com `param = Status`). (`AdminCancelOrders` foi removido.)

## Observação / oracle

**AMM v4 não tem conta de observação dedicada.** Outros protocolos que precisam de um TWAP on-chain normalmente consomem cruzamentos de livro do OpenBook indiretamente ou leem off-chain. Se você precisa de um TWAP Raydium com suporte de programa, use CPMM ou CLMM.

## Derivando contas de um pool do zero

Como AMM v4 não foi projetado para PDAs determinísticas por par (é anterior a essa convenção Solana), o `amm_id` canônico é uma **keypair com seed** derivada com:

```
ammId = createWithSeed(
  owner: ammAuthority,
  seed:  marketPubkey.toBase58().slice(0, 32),
  programId: AMM_V4_PROGRAM_ID,
)
```

O mesmo padrão de chave com seed se aplica a `amm_open_orders`, `amm_target_orders`, `amm_withdraw_queue`, `pool_temp_lp`, `pool_coin_token_account`, `pool_pc_token_account` e `lp_mint`. O SDK e API pré-computam esses para você; veja `raydium-sdk-v2`'s `Liquidity.getAssociatedPoolKeys`.

Na prática, integradores leem o conjunto completo de contas do pool de `GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>` ou do SDK. Derivação manual raramente é necessária.

## Referência rápida de ciclo de vida

| Evento                                 | Contas criadas                                                                                               | Contas destruídas |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------- |
| `Initialize2`                          | `amm_info`, `amm_open_orders`, `amm_target_orders`, vaults, `lp_mint`, `pool_withdraw_queue`, `pool_temp_lp` | —                 |
| `Deposit`                              | — (pode criar ATA de LP do usuário)                                                                          | —                 |
| `Withdraw`                             | —                                                                                                            | —                 |
| `SwapBaseIn` / `SwapBaseOut` (v1 / V2) | — (pode criar ATA do usuário)                                                                                | —                 |
| `WithdrawPnl`                          | —                                                                                                            | —                 |

Pools e suas contas persistem indefinidamente. Mesmo se a liquidez for totalmente retirada, `AmmInfo` permanece.

## O que ler onde

* **Matemática e aritmética de taxas**: [`products/amm-v4/math`](/pt/products/amm-v4/math).
* **Divisão de taxas e como se compara a CPMM/CLMM**: [`products/amm-v4/fees`](/pt/products/amm-v4/fees).
* **Listas de contas de instrução**: [`products/amm-v4/instructions`](/pt/products/amm-v4/instructions).
* **Derivação de conta OpenBook**: Documentos do programa OpenBook ([`github.com/openbook-dex/program`](https://github.com/openbook-dex/program)).

Fontes:

* [Programa Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* [`reference/program-addresses`](/pt/reference/program-addresses) para IDs de programa canônicos
* Protocolo OpenBook / Serum para as contas da contraparte
