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

> AmmInfo, ModelDataInfo, DataElement, Fees, dan tata letak vault. Inventaris akun lengkap dari pool Stable AMM (program Raydium murni, standalone AMM).

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

  [Lihat versi bahasa Inggris →](/products/stable/accounts)
</Info>

<Info>
  Stable AMM adalah program tersendiri; struktur akun di sisi pool menyerupai AMM v4 (AmmInfo, vault, authority), dan secara tambahan memiliki akun `ModelDataInfo` yang menyimpan tabel pencarian. Halaman ini mencakup keduanya.
</Info>

## Inventaris

<Note>
  **AMM murni.** Stable AMM menyimpan semua likuiditas di vault miliknya sendiri dan tidak bergantung pada OpenBook. Awalnya memiliki jalur market-making OpenBook, tetapi jalur tersebut telah tidak aktif selama bertahun-tahun, dan [upgrade 2026-06-22](/id/reference/changelog) menghapus kode sisa. Akun market `serum_*` dan `amm_open_orders` di bawah ini oleh karena itu **legacy**: mungkin masih muncul dalam transaksi tata letak lama untuk kompatibilitas mundur, tetapi program tidak memvalidasi atau membacanya, dan instruksi tata letak baru menghilangkannya sepenuhnya.
</Note>

Inventaris aktif sekarang sepenuhnya di sisi pool:

| Kategori | Akun                                 | Pemilik        | Peran                                                                                           |
| -------- | ------------------------------------ | -------------- | ----------------------------------------------------------------------------------------------- |
| Pool     | `AmmInfo`                            | Program Stable | Status pool, referensi ke vault dan akun model-data.                                            |
| Pool     | `amm_authority`                      | Program Stable | PDA milik program yang menandatangani pergerakan vault. Dibagikan di semua pool Stable AMM.     |
| Pool     | `amm_target_orders`                  | Program Stable | Akun grid di sisi pool (dipertahankan dalam tata letak; tidak lagi mendorong pesanan OpenBook). |
| Pool     | `pool_coin_token_account`            | SPL Token      | Vault sisi coin pool.                                                                           |
| Pool     | `pool_pc_token_account`              | SPL Token      | Vault sisi pc pool.                                                                             |
| Pool     | `lp_mint`                            | SPL Token      | Mint LP yang dapat ditukar.                                                                     |
| Model    | **`model_data_account`**             | Program Stable | **Tabel pencarian: 50.000 × DataElement.**                                                      |
| Legacy   | `amm_open_orders`                    | OpenBook       | Akun `OpenOrders` OpenBook lama pool. **Tidak digunakan.**                                      |
| Legacy   | `serum_market`                       | OpenBook       | Pasar OpenBook. **Tidak digunakan.**                                                            |
| Legacy   | `serum_bids`, `serum_asks`           | OpenBook       | Antrian bid/ask. **Tidak digunakan.**                                                           |
| Legacy   | `serum_event_queue`                  | OpenBook       | Antrian peristiwa. **Tidak digunakan.**                                                         |
| Legacy   | `serum_coin_vault`, `serum_pc_vault` | SPL Token      | Vault tingkat pasar OpenBook. **Tidak digunakan.**                                              |
| Legacy   | `serum_vault_signer`                 | OpenBook       | Penandatangan vault tingkat pasar. **Tidak digunakan.**                                         |

## `AmmInfo`

Akun status root. Tata letaknya hampir identik dengan AMM v4 — parameter pool, desimal, biaya, referensi vault/mint — dengan satu penambahan: bidang `model_data_key` yang menunjuk ke tabel pencarian.

```rust theme={null}
// raydium-stable/program/src/state.rs (diringkas)
pub struct AmmInfo {
    pub account_type: u64,              // = 0 (AmmAccount)
    pub status: u64,                    // bitmask: swap/deposit/withdraw/crank enabled
    pub nonce: u64,                     // bump untuk amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals: u64,
    pub state: u64,                     // mesin status (IdleState, dll)
    pub reset_flag: u64,
    pub min_size: u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,             // mencerminkan OpenBook
    pub pc_lot_size: u64,
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,
    pub abort_trade_factor: u64,
    pub price_tick_multiplier: u64,
    pub price_tick: u64,
    
    pub fees: Fees,                     // lihat di bawah
    pub out_put: OutPutData,            // PnL, swap, jumlah hukuman
    
    pub coin_vault: Pubkey,
    pub pc_vault: Pubkey,
    pub coin_mint: Pubkey,
    pub pc_mint: Pubkey,
    pub lp_mint: Pubkey,
    pub model_data_key: Pubkey,         // ← TABEL PENCARIAN
    pub open_orders: Pubkey,            // legacy: OpenBook OpenOrders (tidak digunakan pasca-decoupling)
    pub serum_market: Pubkey,           // legacy: tidak digunakan pasca-decoupling
    pub serum_program: Pubkey,          // legacy: tidak digunakan pasca-decoupling
    pub target_orders: Pubkey,
    pub amm_admin: Pubkey,              // kunci admin
    pub client_order_id: u64,
    pub lp_amount: u64,                 // pasokan LP
    pub lp_net: u64,                    // metrik nilai LP
    pub padding: [u64; 61],
}

pub struct Fees {
    pub min_separate_numerator: u64,
    pub min_separate_denominator: u64,
    pub trade_fee_numerator: u64,       // 25
    pub trade_fee_denominator: u64,     // 10_000 → 0,25%
    pub pnl_numerator: u64,             // 12
    pub pnl_denominator: u64,           // 100 → 12% dari biaya = 0,03% dari volume
    pub swap_fee_numerator: u64,        // 25
    pub swap_fee_denominator: u64,      // 10_000
}

pub struct OutPutData {
    pub need_take_pnl_coin: u64,        // biaya protokol terakumulasi (coin)
    pub need_take_pnl_pc: u64,          // biaya protokol terakumulasi (pc)
    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_pc_in_amount: u128,
    pub swap_coin_out_amount: u128,
    pub swap_pc_fee: u64,
    pub swap_coin_fee: u64,
}
```

Bidang utama yang dihadapi integrator:

* **`model_data_key`** — alamat tabel pencarian. Harus diteruskan ke setiap instruksi.
* **`fees`** — struktur identik dengan AMM v4. Default ke biaya perdagangan 0,25%, pembagian LP 0,22% / protokol 0,03%.
* **`coin_vault`**, **`pc_vault`** — vault pool.
* **`status`** — bitmask yang mengontrol swap/deposit/withdraw/crank.
* **`out_put.need_take_pnl_*`** — disapu oleh `WithdrawPnl`.

## `ModelDataInfo`

Tabel pencarian. Larik jarang besar dari titik harga/kuantitas.

```rust theme={null}
// raydium-stable/program/src/state.rs
pub const ELEMENT_SIZE: usize = 50000;

pub struct DataElement {
    pub x: u64,         // tabel X (misalnya, jumlah coin)
    pub y: u64,         // tabel Y (misalnya, jumlah pc)
    pub price: u64,     // harga di (x, y)
}

pub struct ModelDataInfo {
    pub account_type: u64,              // = 2 (ModleDataAccount)
    pub status: u64,                    // Initialized atau Uninitialized
    pub multiplier: u64,                // faktor skala untuk x, y (misalnya, 10^6)
    pub valid_data_count: u64,          // berapa banyak elemen yang diisi
    pub elements: [DataElement; 50000], // tabel itu sendiri
}
```

**Siklus hidup:**

Instruksi setup yang membangun tabel ini — `InitModelData` (membuat akun) dan `UpdateModelData` (mengisi elemen, menetapkan `valid_data_count`) — **dihapus dalam upgrade 2026-06-22**. Tabel di pool yang ada sekarang **tetap**. Pada waktu runtime, instruksi yang dapat dipanggil yang tersisa masih menggunakannya:

* **Swap / deposit / withdraw** memanggil fungsi pencarian yang pencarian biner dan interpolasi dalam `elements[0..valid_data_count]`.

## `DataElement`

Entri atom dalam tabel. Harus diurutkan (x naik, y turun, harga naik) agar pencarian biner berfungsi.

```rust theme={null}
pub struct DataElement {
    pub x: u64,         // Koordinat X (misalnya, saldo token_a, diskalakan oleh multiplier)
    pub y: u64,         // Koordinat Y (misalnya, saldo token_b, diskalakan oleh multiplier)
    pub price: u64,     // harga (x/y dalam bentuk terskalakan, diskalakan oleh multiplier)
}
```

Saat mengisi tabel, admin menentukan ini pra-skala. Program tidak memvalidasi urutan pengurutan on-chain (untuk kecepatan), jadi pengurutan yang salah menyebabkan kutipan yang tidak benar.

## Authority dan vault

Sama seperti AMM v4:

* **`amm_authority`** adalah PDA program-wide tunggal yang diturunkan dengan seed `["amm authority"]`. Ini memiliki semua vault pool dan menandatangani pergerakan mereka.
* **Vault** adalah akun SPL Token yang pemiliknya adalah `amm_authority`, bukan ATA.

Token-2022 **tidak** didukung.

## Bitmask status

Identik dengan AMM v4. Mengontrol apakah swap/deposit/withdraw/crank diaktifkan.

## Pelacakan biaya dan PnL

Struct `out_put` melacak:

* **`need_take_pnl_coin`**, **`need_take_pnl_pc`** — biaya protokol terakumulasi tetapi belum disapu. `WithdrawPnl` memindahkan ini.
* **`swap_coin_in_amount`**, `swap_pc_in_amount`, dll. — penghitung analitik.

**Perhitungan aset pool (pasca-decoupling).** Karena tidak ada dana yang disimpan sebagai pesanan terbuka OpenBook lagi, total aset pool sekarang dihitung sepenuhnya dari vault:

```
Lama: total aset = saldo vault + dana pesanan terbuka (native_coin_total / native_pc_total) − PnL tertunda (need_take_pnl)
Baru: total aset = saldo vault − PnL tertunda (need_take_pnl)
```

Indexer dan kode kutipan yang merekonstruksi nilai pool dari saldo OpenOrders harus menghilangkan istilah itu.

## Ukuran akun

**`ModelDataInfo` besar** (\~1,2 MB, karena 50.000 elemen × 24 byte per elemen). Inilah mengapa membuat pool Stable memerlukan alokasi akun dan rent eksplisit. SDK dan alat Raydium menangani ini secara transparan; integrator jarang perlu mengalokasikan secara manual.

## Menurunkan akun dari awal

Seperti AMM v4, Stable AMM menggunakan **kunci bersemai** (bukan PDA murni). Identitas pool kanonik diturunkan melalui:

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

Demikian pula untuk vault, LP mint, target orders, dll. Dalam praktiknya, gunakan SDK atau API untuk mengambil alamat yang telah dihitung sebelumnya.

## Apa yang dibaca di mana

* **Daftar akun instruksi**: [`products/stable/instructions`](/id/products/stable/instructions).
* **Bagaimana interpolasi menggunakan tabel**: [`products/stable/math`](/id/products/stable/math).
* **Struktur biaya dan WithdrawPnl**: [`products/stable/fees`](/id/products/stable/fees).
* **Decoupling OpenBook 2026-06-22**: [`reference/changelog`](/id/reference/changelog).

Sumber:

* [`reference/program-addresses`](/id/reference/program-addresses)
