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

# Akun AMM v4

> Inventaris akun lengkap dari pool AMM v4 — AmmInfo, TargetOrders, OpenOrders, vault, LP mint, authority — ditambah akun OpenBook yang terikat pada pool.

<Info>
  **Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.**

  [Lihat versi bahasa Inggris →](/products/amm-v4/accounts)
</Info>

<Info>
  Sejak pembaruan 2026-07, ketergantungan OpenBook / Serum pada AMM v4 telah **dihapus** — tidak ada instruksi yang membaca atau menulis status OpenBook lagi. Akun pasar di bawah ini dipertahankan hanya sebagai placeholder posisional pada tata letak instruksi v1 warisan (diterima tetapi diabaikan) dan sebagai bidang referensi pada `AmmInfo`. Gunakan titik masuk swap V2, yang menghilangkannya sepenuhnya. Halaman ini masih mengelompokkan akun ke dalam bagian "pool-owned" dan "OpenBook (legacy)" untuk membaca transaksi yang lebih lama.
</Info>

## Inventaris

Pool AMM v4 mencatat satu pasar terikat pada `AmmInfo` saat pembuatan. Gambaran lengkapnya:

| Kategori          | Akun                                 | Pemilik        | Peran                                                                                                                          |
| ----------------- | ------------------------------------ | -------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| Pool              | `AmmInfo`                            | Program AMM v4 | Status pool: biaya yang terkumpul, status, referensi ke vault (dan, sebagai bidang warisan, pasar).                            |
| Pool              | `amm_authority`                      | Program AMM v4 | PDA milik program yang menandatangani pergerakan vault. Dibagikan di semua pool AMM v4.                                        |
| Pool              | `amm_open_orders`                    | OpenBook       | Referensi `OpenOrders` warisan. Tidak lagi dibaca/ditulis oleh program; masih dilewatkan secara posisional pada tata letak v1. |
| Pool              | `amm_target_orders`                  | Program AMM v4 | Akun target-orders warisan. Masih direferensikan oleh `WithdrawPnl` (sebagai akun #10) tetapi tidak ada grid yang dibangun.    |
| Pool              | `pool_coin_token_account`            | SPL Token      | Vault sisi coin pool (ATA dari `amm_authority`).                                                                               |
| Pool              | `pool_pc_token_account`              | SPL Token      | Vault sisi pc pool.                                                                                                            |
| Pool              | `lp_mint`                            | SPL Token      | Mint LP yang dapat ditukar.                                                                                                    |
| Pool              | `pool_withdraw_queue`                | Program AMM v4 | Antrian warisan untuk penarikan tertunda; disimpan dengan panjang nol.                                                         |
| Pool              | `pool_temp_lp`                       | Program AMM v4 | Akun LP tambahan.                                                                                                              |
| Legacy (OpenBook) | `serum_market`                       | OpenBook       | Pasar yang terikat. Dilewatkan pada tata letak v1 tetapi tidak lagi divalidasi atau digunakan.                                 |
| Legacy            | `serum_bids`, `serum_asks`           | OpenBook       | Antrian bid/ask. Diabaikan.                                                                                                    |
| Legacy            | `serum_event_queue`                  | OpenBook       | Peristiwa yang tertunda. Diabaikan.                                                                                            |
| Legacy            | `serum_coin_vault`, `serum_pc_vault` | SPL Token      | Vault tingkat pasar. Diabaikan.                                                                                                |
| Legacy            | `serum_vault_signer`                 | OpenBook       | PDA tingkat pasar. Diabaikan.                                                                                                  |

Catatan: "serum" dipertahankan sebagai awalan dalam IDL dan nama bidang AMM v4 untuk kompatibilitas mundur. Akun-akun ini tidak lagi berfungsi setelah penghapusan OpenBook.

## `AmmInfo`

Akun status root pool. Besar (≈ 752 byte) karena membawa referensi pool dan OpenBook secara inline.

```rust theme={null}
// programs/amm/src/state.rs (disingkat; urutan bidang / nama mengikuti 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>
  Tata letak struct **tidak berubah** (kompatibel byte) sehingga deserializer yang ada terus bekerja, tetapi setelah penghapusan OpenBook, bidang yang ditandai `DEPRECATED` di atas **tidak lagi ditulis** — penghitung volume `swap_*` dibekukan pada nilai terakhirnya. Untuk analitik volume, gunakan log perdagangan daripada bidang-bidang ini. Hanya `need_take_pnl_*` dan `pool_open_time` yang secara aktif dipertahankan.
</Note>

Bidang yang menghadap integrator:

* **`coin_vault`**, **`pc_vault`** — vault SPL Token pool. `coin` adalah `token_0` menurut konvensi Serum/OpenBook (base), `pc` adalah `token_1` (quote).
* **`coin_decimals`**, **`pc_decimals`** — sesuai dengan mint.
* **`open_orders`**, **`target_orders`**, **`market`** — bidang referensi warisan. Masih ada di `AmmInfo` dan masih dilewatkan secara posisional pada tata letak instruksi v1, tetapi program tidak lagi membaca atau memvalidasinya. Titik masuk swap V2 menghilangkannya.
* **`fees.swap_fee_numerator / swap_fee_denominator`** — biaya perdagangan gabungan. Default `25 / 10_000 = 0.25%`.
* **`status`** — bitmask yang membatasi operasi. Dapat diatur admin melalui `AdminSetStatus`.
* **`state_data.need_take_pnl_*`** — delta antara biaya yang terkumpul kotor dan apa yang telah disapu. `TakePnl` mengosongkan ini.

## Pengkabelan OpenBook

<Note>
  **Dihapus.** Ketergantungan OpenBook / Serum telah dihapus dari program (pembaruan 2026-07). Akun yang dijelaskan di bagian ini tidak lagi divalidasi atau digunakan. Mereka tetap sebagai bidang referensi pada `AmmInfo` dan sebagai placeholder posisional pada tata letak instruksi v1 warisan. Gunakan **titik masuk swap V2** ([`SwapBaseInV2` / `SwapBaseOutV2`](/id/products/amm-v4/instructions)) yang melewatkan akun-akun ini sepenuhnya.
</Note>

Ketika Anda memanggil instruksi **v1** `SwapBaseIn` / `SwapBaseOut`, `Deposit`, atau `Withdraw` warisan, **jumlah** akun harus tetap cocok dengan tata letak lama (akun pasar menempati posisi historisnya), tetapi **isinya tidak lagi diperiksa** — tidak ada CPI yang dikeluarkan terhadapnya. Kode baru harus menggunakan varian swap V2, yang tidak mengambil akun-akun ini sama sekali.

```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,
);
```

`amm_open_orders` AMM adalah akun milik OpenBook yang menyimpan status limit-order pool di pasar ini: pesanan aktif, saldo yang diselesaikan, referrer, dll. `amm_target_orders` adalah sisi AMM: ia menyimpan *grid yang dimaksudkan* AMM (harga/ukuran untuk setiap slot pesanan) sehingga program dapat dengan murah membandingkan dengan apa yang saat ini diposting dan menempatkan / membatalkan perbedaannya.

## PDA Authority

Ada tepat satu PDA `amm_authority` untuk seluruh program AMM v4. Seed-nya trivial (`["amm authority"]`) dan bump-nya disimpan di setiap `AmmInfo`. Authority ini menandatangani semua pergerakan token untuk semua pool 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,
);
```

Ada authority **scoped-pool** terpisah yang diturunkan per pool untuk menandatangani operasi OpenBook (`amm_authority` di atas sebenarnya mencakup keduanya dalam desain program ini; versi berbeda menggunakan derivasi berbeda, jadi periksa `AmmInfo.nonce` pool spesifik dalam kode).

## Vault

Vault SPL Token pool adalah akun token standar yang `owner`-nya adalah `amm_authority`. Bukan ATA — alamatnya adalah PDA spesifik yang diturunkan pada `Initialize` dengan seed `["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]`. Alamat disimpan di `AmmInfo`; derivasi adalah keingintahuan satu kali.

Token-2022 **tidak** didukung. Program hardcode ID program SPL Token untuk semua pergerakan vault. Mencoba mengikat pool AMM v4 ke mint Token-2022 gagal pada `Initialize`.

## LP mint

Mint SPL Token klasik yang authority-nya adalah `amm_authority`. Total supply melacak kepemilikan LP dari pool; membakar LP mengembalikan token dari kedua vault secara pro-rata. Karena AMM v4 mendahului CPMM, tidak ada mirror `lp_supply` dalam status pool — baca supply mint on-chain secara langsung.

## Bitmask status

`AmmInfo.status` membatasi operasi. Bit (posisi mungkin berbeda di seluruh versi program — konfirmasi melalui sumber):

| Bit | Flag                | Efek                                          |
| --- | ------------------- | --------------------------------------------- |
| 0   | `SWAP_DISABLED`     | `Swap*` ditolak.                              |
| 1   | `DEPOSIT_DISABLED`  | `Deposit` ditolak.                            |
| 2   | `WITHDRAW_DISABLED` | `Withdraw` ditolak.                           |
| 3   | `CLMM_LIKE_MIGRATE` | Flag gerbang migrasi yang digunakan oleh ops. |

Multisig Raydium menetapkan ini melalui `SetParams` (dengan `param = Status`). (`AdminCancelOrders` telah dihapus.)

## Observasi / oracle

**AMM v4 tidak memiliki akun observasi khusus.** Protokol lain yang membutuhkan TWAP on-chain biasanya mengonsumsi penyeberangan buku OpenBook secara tidak langsung atau membaca off-chain. Jika Anda membutuhkan TWAP Raydium dengan dukungan program, gunakan CPMM atau CLMM.

## Menurunkan akun pool dari awal

Karena AMM v4 tidak dirancang untuk PDA per-pasangan deterministik (mendahului konvensi Solana itu), `amm_id` kanonik adalah **keypair berseeded** yang diturunkan dengan:

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

Pola kunci berseeded yang sama berlaku untuk `amm_open_orders`, `amm_target_orders`, `amm_withdraw_queue`, `pool_temp_lp`, `pool_coin_token_account`, `pool_pc_token_account`, dan `lp_mint`. SDK dan API pra-menghitung ini untuk Anda; lihat `raydium-sdk-v2`'s `Liquidity.getAssociatedPoolKeys`.

Dalam praktiknya, integrator membaca set akun lengkap pool dari `GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>` atau dari SDK. Derivasi manual jarang diperlukan.

## Referensi cepat siklus hidup

| Peristiwa                              | Akun dibuat                                                                                                 | Akun dihapus |
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ------------ |
| `Initialize2`                          | `amm_info`, `amm_open_orders`, `amm_target_orders`, vault, `lp_mint`, `pool_withdraw_queue`, `pool_temp_lp` | —            |
| `Deposit`                              | — (mungkin membuat ATA LP pengguna)                                                                         | —            |
| `Withdraw`                             | —                                                                                                           | —            |
| `SwapBaseIn` / `SwapBaseOut` (v1 / V2) | — (mungkin membuat ATA pengguna)                                                                            | —            |
| `WithdrawPnl`                          | —                                                                                                           | —            |

Pool dan akun mereka bertahan selamanya. Bahkan jika likuiditas sepenuhnya ditarik, `AmmInfo` tetap ada.

## Apa yang dibaca di mana

* **Matematika dan aritmetika biaya**: [`products/amm-v4/math`](/id/products/amm-v4/math).
* **Pembagian biaya dan bagaimana perbandingannya dengan CPMM/CLMM**: [`products/amm-v4/fees`](/id/products/amm-v4/fees).
* **Daftar akun instruksi**: [`products/amm-v4/instructions`](/id/products/amm-v4/instructions).
* **Derivasi akun OpenBook**: Dokumen program OpenBook ([`github.com/openbook-dex/program`](https://github.com/openbook-dex/program)).

Sumber:

* [Program Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* [`reference/program-addresses`](/id/reference/program-addresses) untuk ID program kanonik
* Protokol OpenBook / Serum untuk akun pihak lawan
