> ## 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 ke 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>
  AMM v4 jauh lebih banyak akun dibanding CPMM atau CLMM karena setiap operasi menyentuh state OpenBook. Halaman ini mengelompokkan akun ke dalam bagian "pool-owned" dan "OpenBook-owned" sehingga integrator dapat dengan cepat melihat sisi mana yang mana.
</Info>

## Inventaris

Sebuah pool AMM v4 terikat ke tepat satu pasar OpenBook saat pembuatan. Gambaran lengkap saat ini adalah:

| Kategori          | Akun                                 | Pemilik        | Peran                                                                                          |
| ----------------- | ------------------------------------ | -------------- | ---------------------------------------------------------------------------------------------- |
| Pool              | `AmmInfo`                            | Program AMM v4 | State pool: fee yang terakumulasi, status, referensi ke vault dan pasar OpenBook.              |
| Pool              | `amm_authority`                      | Program AMM v4 | PDA yang dimiliki program dan menandatangani pergerakan vault. Dibagikan di semua pool AMM v4. |
| Pool              | `amm_open_orders`                    | OpenBook       | Akun `OpenOrders` OpenBook pool untuk pasar ini.                                               |
| Pool              | `amm_target_orders`                  | Program AMM v4 | Grid target limit order di sisi pool untuk diposting kembali ke OpenBook.                      |
| 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 legacy untuk penarikan tertunda; tetap kosong.                                         |
| Pool              | `pool_temp_lp`                       | Program AMM v4 | Akun LP tambahan yang digunakan saat `Initialize`.                                             |
| Market (OpenBook) | `serum_market`                       | OpenBook       | Pasar itu sendiri (mint base/quote, vault signer, dll).                                        |
| Market            | `serum_bids`, `serum_asks`           | OpenBook       | Antrian bid dan ask.                                                                           |
| Market            | `serum_event_queue`                  | OpenBook       | Event yang tertunda (fill, pembatalan).                                                        |
| Market            | `serum_coin_vault`, `serum_pc_vault` | SPL Token      | Vault tingkat pasar OpenBook.                                                                  |
| Market            | `serum_vault_signer`                 | OpenBook       | PDA tingkat pasar yang menandatangani pergerakan `serum_*_vault`.                              |

Catatan: "serum" tetap digunakan sebagai prefiks di IDL dan nama field AMM v4 untuk kompatibilitas ke belakang. Ini mengacu ke pasar OpenBook saat ini.

## `AmmInfo`

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

```rust theme={null}
// programs/amm/src/state.rs (diringkas; urutan field / nama mengikuti IDL)
pub struct AmmInfo {
    pub status: u64,           // bitmask: swap/deposit/withdraw/crank enabled
    pub nonce:  u64,           // bump digunakan untuk derive amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // mesin state internal
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // mencerminkan pasar OpenBook
    pub pc_lot_size:   u64,
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

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

    // Akun yang dimiliki pool:
    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,   // OpenOrders pool di OpenBook
    pub market: Pubkey,        // pasar OpenBook
    pub market_program: Pubkey, // ID program OpenBook
    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  → digunakan oleh integrasi OpenBook
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → bagian protocol DARI fee swap
    pub pnl_denominator:          u64,     // 100 → jadi 12/100 = 12% dari fee, = 0.03% dari volume
    pub swap_fee_numerator:       u64,     // 25  → fee swap bruto 0.25%
    pub swap_fee_denominator:     u64,     // 10_000
}

pub struct StateData {
    pub need_take_pnl_coin: u64,
    pub need_take_pnl_pc:   u64,
    pub total_pnl_pc:   u64,
    pub total_pnl_coin: u64,
    pub pool_open_time: u64,
    pub punish_pc_amount: u64,
    pub punish_coin_amount: u64,
    pub orderbook_to_init_time: u64,
    pub swap_coin_in_amount: u128,
    pub swap_pc_out_amount:  u128,
    pub swap_acc_pc_fee:    u64,
    pub swap_pc_in_amount:  u128,
    pub swap_coin_out_amount: u128,
    pub swap_acc_coin_fee:  u64,
}
```

Field yang relevan bagi 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`** — harus diteruskan ke setiap instruksi swap/deposit/withdraw.
* **`fees.swap_fee_numerator / swap_fee_denominator`** — fee trade gabungan. Default `25 / 10_000 = 0.25%`.
* **`status`** — bitmask yang mengontrol operasi. Dapat diatur admin melalui `AdminSetStatus`.
* **`state_data.need_take_pnl_*`** — delta antara fee terakumulasi bruto dan apa yang telah disapu. `TakePnl` mengatur ulang ini ke nol.

## Wirring OpenBook

<Note>
  **Tidak lagi aktif.** Pool AMM v4 tidak lagi berbagi likuiditas ke OpenBook — grid limit order telah dinonaktifkan. Akun OpenBook yang dijelaskan di bagian ini tetap ada di `AmmInfo` setiap pool dan masih divalidasi oleh entrypoint swap V1 (dan oleh `Initialize`, `Deposit`, `Withdraw`) untuk kompatibilitas ke belakang, tetapi state on-book yang direferensikan kosong dalam praktik. Gunakan **entrypoint swap V2** ([`SwapBaseInV2` / `SwapBaseOutV2`](/id/products/amm-v4/instructions)) yang sepenuhnya melewatkan akun ini dan mewakili jalur eksekusi kanonis hari ini.
</Note>

Saat Anda memanggil instruksi baca atau tulis **V1** apa pun pada pool AMM v4, Anda harus meneruskan akun OpenBook. Program akan menurunkan ulang dan memvalidasinya, jadi meneruskan himpunan yang tidak cocok akan kembali. (Varian swap V2 tidak memerlukan akun ini sama sekali.)

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

// Field yang OpenBook expose di akun pasar:
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 yang dimiliki OpenBook menyimpan state limit order pool di pasar ini: order aktif, saldo settlement, referrer, dll. `amm_target_orders` adalah sisi AMM: ini menyimpan grid yang *dimaksudkan* AMM (harga/ukuran untuk setiap slot order) sehingga program dapat secara murah membandingkan dengan apa yang saat ini diposting dan menempatkan / membatalkan diff.

## PDA Authority

Ada tepat satu PDA `amm_authority` untuk seluruh program AMM v4. Seed-nya trivial (`["amm authority"]`) dan bump-nya disimpan pada 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 **berskop-pool** yang terpisah diturunkan per pool untuk menandatangani operasi OpenBook (`amm_authority` di atas sebenarnya mencakup keduanya dalam desain program ini; versi berbeda menggunakan penurunan 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 di `Initialize` dengan seed `["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]`. Alamat disimpan di `AmmInfo`; penurunan adalah keingintahuan satu kali.

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

## Mint LP

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 sebelum CPMM, tidak ada mirror `lp_supply` di state pool — baca supply mint on-chain secara langsung.

## Bitmask status

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

| Bit | Flag                | Efek                                    |
| --- | ------------------- | --------------------------------------- |
| 0   | `SWAP_DISABLED`     | `Swap*` menolak.                        |
| 1   | `DEPOSIT_DISABLED`  | `Deposit` menolak.                      |
| 2   | `WITHDRAW_DISABLED` | `Withdraw` menolak.                     |
| 3   | `CLMM_LIKE_MIGRATE` | Flag migration-gate digunakan oleh ops. |

Multisig Raydium menetapkan ini melalui `AdminCancelOrders`, `AdminSetParams`, dll.

## Observation / oracle

**AMM v4 tidak memiliki akun observation 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 yang deterministik (itu sebelum konvensi Solana itu), `amm_id` kanonis adalah **keypair berseeded** yang diturunkan dengan:

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

Pola keypair 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 praktik, integrator membaca himpunan akun pool lengkap dari `GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>` atau dari SDK. Menurunkan dengan tangan jarang dibutuhkan.

## Referensi siklus hidup cepat

| Event                        | Akun dibuat                                                                                                 | Akun dihancurkan |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------- | ---------------- |
| `Initialize2`                | `amm_info`, `amm_open_orders`, `amm_target_orders`, vault, `lp_mint`, `pool_withdraw_queue`, `pool_temp_lp` | —                |
| `Deposit`                    | — (mungkin membuat user LP ATA)                                                                             | —                |
| `Withdraw`                   | —                                                                                                           | —                |
| `SwapBaseIn` / `SwapBaseOut` | — (mungkin membuat user ATA)                                                                                | —                |
| `TakePnl`                    | —                                                                                                           | —                |
| `MonitorStep` (crank)        | —                                                                                                           | —                |

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

## Apa yang dibaca di mana

* **Matematika dan aritmatika fee**: [`products/amm-v4/math`](/id/products/amm-v4/math).
* **Pembagian fee dan cara 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).
* **Penurunan akun OpenBook**: Dokumentasi 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 kanonis
* Protokol OpenBook / Serum untuk akun pihak lawan
