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

# Instruksi Stable AMM

> Set instruksi yang dapat dipanggil saat ini — Deposit, Withdraw, SwapBaseIn, SwapBaseOut, WithdrawPnl — plus instruksi yang dihapus dalam upgrade 2026-06-22.

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

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

<Info>
  Stable AMM adalah **program independen** dengan ID program sendiri. Ini **bukan** mode dari program AMM v4, dan tidak diperdagangkan "melalui" AMM v4 — program ini dideploy, diupgrade, dan dipanggil secara terpisah. Kemiripannya dengan AMM v4 hanya dalam konvensi biaya dan tata letak akun.
</Info>

<Warning>
  **Upgrade 2026-06-22 — penghapusan kode OpenBook (market) yang sudah mati.** Stable AMM **berhenti memposting order ke OpenBook sejak lama**; jalur market-making orderbook telah tidak aktif selama bertahun-tahun. Upgrade ini menghapus akun dan kode yang tersisa terkait market — ini **tidak** mengubah perilaku trading langsung.

  Dua konsekuensi untuk integrator:

  1. **Tata letak akun yang lebih kecil.** `SwapBaseIn` / `SwapBaseOut` (**18 → 9**), `Deposit` (**14 → 12**), dan `Withdraw` (**21/22 → 12**) menghapus akun Serum/market yang sudah mati. Tata letak lama masih dapat diurai untuk kompatibilitas mundur. `WithdrawPnl` (**16 → 10**) adalah **perubahan breaking yang keras tanpa jalur kompatibilitas** (hanya admin).
  2. **Sebagian besar instruksi dihapus.** Hanya `SwapBaseIn`, `SwapBaseOut`, `Deposit`, `Withdraw`, dan `WithdrawPnl` yang tetap dapat dipanggil. Semua instruksi lain tidak lagi dapat dipanggil.

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

## Inventaris instruksi

### Dapat dipanggil

| Instruksi     | Kategori   | Catatan                                                                                                                       |
| ------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `Deposit`     | Likuiditas | Tambah likuiditas, terima LP. Tata letak 12-akun baru; tata letak 14-akun lama masih kompatibel.                              |
| `Withdraw`    | Likuiditas | Bakar LP, terima kedua sisi. Tata letak 12-akun baru; tata letak 21/22-akun lama masih kompatibel.                            |
| `SwapBaseIn`  | Swap       | Swap input-pasti. Tata letak 9-akun baru; tata letak 18-akun lama masih kompatibel.                                           |
| `SwapBaseOut` | Swap       | Swap output-pasti. Tata letak 9-akun baru; tata letak 18-akun lama masih kompatibel.                                          |
| `WithdrawPnl` | Admin      | Kumpulkan biaya protokol yang terkumpul. Tata letak 10-akun baru (**breaking keras — tanpa kompatibilitas tata letak lama**). |

### Dihapus (tidak lagi dapat dipanggil)

Instruksi ini dihapus dalam upgrade 2026-06-22 dan tidak lagi dapat dipanggil. Lihat [Instruksi yang dihapus](#removed-instructions).

| Instruksi         | Kategori sebelumnya | Tujuan sebelumnya                                   |
| ----------------- | ------------------- | --------------------------------------------------- |
| `Initialize`      | Siklus hidup        | Buat pool.                                          |
| `PreInitialize`   | Siklus hidup        | Helper pre-alokasi warisan.                         |
| `InitModelData`   | Penyiapan model     | Buat dan inisialisasi tabel pencarian.              |
| `UpdateModelData` | Penyiapan model     | Isi hingga 5 elemen tabel per panggilan.            |
| `MonitorStep`     | Crank               | Selesaikan pengisian OpenBook, posting ulang order. |
| `SetParams`       | Admin               | Ubah parameter pool.                                |
| `WithdrawSrm`     | Warisan             | Kumpulkan rabat diskon biaya SRM.                   |
| `SimulateInfo`    | Diagnostik          | Helper kutipan baca-saja.                           |

## `Deposit`

Tambah likuiditas, terima token LP.

**Argumen**

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

**Akun** — tata letak baru, 12 akun (dapat ditulis `W`, penanda tangan `S`)

| #  | Nama                 | W | S | Catatan                        |
| -- | -------------------- | - | - | ------------------------------ |
| 0  | `token_program`      |   |   | SPL Token.                     |
| 1  | `amm`                | W |   | `AmmInfo` pool.                |
| 2  | `amm_authority`      |   |   | PDA lebar program.             |
| 3  | `amm_target_orders`  | W |   |                                |
| 4  | `amm_lp_mint`        | W |   | Mint LP.                       |
| 5  | `amm_coin_vault`     | W |   | Vault coin pool.               |
| 6  | `amm_pc_vault`       | W |   | Vault pc pool.                 |
| 7  | `model_data_account` |   |   | **Tabel pencarian baca-saja.** |
| 8  | `user_source_coin`   | W |   | Input coin pengguna.           |
| 9  | `user_source_pc`     | W |   | Input pc pengguna.             |
| 10 | `user_dest_lp`       | W |   | ATA LP pengguna.               |
| 11 | `user_source_owner`  |   | S | Penanda tangan transaksi.      |

**Kompatibilitas**: `amm_open_orders` (lama #3) dan `serum_market` (lama #9) dihapus. Ketika **14** akun dilewatkan, instruksi diurai dengan tata letak 14-akun lama; akun Serum diabaikan.

**Matematika** — pro-rata standar menggunakan tabel pencarian untuk menghitung rasio. SDK menghitung pasangan coin/pc untuk jumlah LP yang diinginkan dan memeriksa terhadap batas maksimal.

## `Withdraw`

Bakar LP, terima kedua sisi secara pro-rata.

**Argumen**

```
amount: u64            // Token LP untuk dibakar
```

**Akun** — tata letak baru, 12 akun (dapat ditulis `W`, penanda tangan `S`)

| #  | Nama                 | W | S | Catatan                        |
| -- | -------------------- | - | - | ------------------------------ |
| 0  | `token_program`      |   |   | SPL Token.                     |
| 1  | `amm`                | W |   | `AmmInfo` pool.                |
| 2  | `amm_authority`      |   |   | PDA lebar program.             |
| 3  | `amm_target_orders`  | W |   |                                |
| 4  | `amm_lp_mint`        | W |   | Mint LP.                       |
| 5  | `amm_coin_vault`     | W |   | Vault coin pool.               |
| 6  | `amm_pc_vault`       | W |   | Vault pc pool.                 |
| 7  | `model_data_account` |   |   | **Tabel pencarian baca-saja.** |
| 8  | `user_source_lp`     | W |   | Sumber LP pengguna.            |
| 9  | `user_dest_coin`     | W |   | Output coin pengguna.          |
| 10 | `user_dest_pc`       | W |   | Output pc pengguna.            |
| 11 | `user_lp_owner`      |   | S | Penanda tangan transaksi.      |

**Kompatibilitas**: sembilan akun Serum (`amm_open_orders`, `serum_program`, `serum_market`, `serum_coin_vault`, `serum_pc_vault`, `serum_vault_signer`, `serum_event_q`, `serum_bids`, `serum_asks`) dihapus. Tata letak lama **21-** atau **22-akun** masih diterima. Namun, perhatikan bahwa **logika biaya referral untuk akun opsional `referrer_pc_wallet` ke-22 telah dihapus** — akun masih dapat dilewatkan tetapi tidak lagi berlaku.

**Prekondisi**

* `user_source_lp` memegang setidaknya `amount`.

**Postkondisi**

* `amount` token LP dibakar.
* Pengguna menerima jumlah coin dan pc sesuai pro-rata saat ini, disesuaikan dengan biaya yang terkumpul.

## `SwapBaseIn`

Swap input-pasti menggunakan tabel pencarian untuk penetapan harga.

**Argumen**

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

**Akun** — tata letak baru, 9 akun (dapat ditulis `W`, penanda tangan `S`)

| # | Nama                     | W | S | Catatan                              |
| - | ------------------------ | - | - | ------------------------------------ |
| 0 | `spl_token program`      |   |   | SPL Token.                           |
| 1 | `amm`                    | W |   | `AmmInfo` pool.                      |
| 2 | `amm_authority`          |   |   | PDA lebar program.                   |
| 3 | `amm_coin_vault`         | W |   | Vault coin pool.                     |
| 4 | `amm_pc_vault`           | W |   | Vault pc pool.                       |
| 5 | `model_data_account`     |   |   | **Tabel pencarian baca-saja.**       |
| 6 | `user_source_token`      | W |   | Akun token input pengguna.           |
| 7 | `user_destination_token` | W |   | Akun token output pengguna.          |
| 8 | `user_source_owner`      |   | S | Pengguna (penanda tangan transaksi). |

**Kompatibilitas**: sembilan akun OpenBook (`amm_open_orders`, `serum_program`, `serum_market`, `serum_bids`, `serum_asks`, `serum_event_queue`, `serum_coin_vault`, `serum_pc_vault`, `serum_vault_signer`) dihapus. Jika jumlah akun yang dilewatkan **bukan 9**, instruksi diurai dengan tata letak **18-akun** lama; akun Serum masih harus menempati posisi mereka, tetapi isinya tidak lagi divalidasi atau digunakan.

**Prekondisi**

* `amm.status` memungkinkan swap.
* `user_source_token` memegang ≥ `amount_in`.

**Postkondisi**

* Pengguna kehilangan `amount_in`, mendapatkan `amount_out ≥ minimum_amount_out`.
* Biaya pool menambah penghitung `need_take_pnl_*`.

**Matematika** — Interpolasi tabel pencarian seperti dijelaskan dalam [`products/stable/math`](/id/products/stable/math).

## `SwapBaseOut`

Swap output-pasti (kebalikan dari `SwapBaseIn`). Tata letak 9-akun yang sama, arah matematika berbeda.

**Argumen**

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

## `WithdrawPnl`

Hanya admin. Kumpulkan biaya protokol yang terkumpul dari `need_take_pnl_*` ke akun PnL yang ditunjuk.

<Warning>
  **Perubahan breaking yang keras — tanpa jalur kompatibilitas.** Instruksi ini **tidak memiliki** penguraian untuk tata letak lama. Mengirim tata letak lama gagal dengan kesalahan validasi seperti `InvalidTokenCoin` karena ketidakselarasan akun (lama #3 adalah `open_orders`). Alat admin yang memanggil `WithdrawPnl` **harus** diperbarui ke tata letak 10-akun baru.
</Warning>

**Argumen** — tidak ada (didorong oleh keadaan).

**Akun** — tata letak baru, 10 akun tetap, hanya admin (dapat ditulis `W`, penanda tangan `S`)

| # | Nama                | W | S | Catatan                           |
| - | ------------------- | - | - | --------------------------------- |
| 0 | `spl_token program` |   |   | SPL Token.                        |
| 1 | `amm`               | W |   | `AmmInfo` pool.                   |
| 2 | `amm_authority`     |   |   | PDA lebar program.                |
| 3 | `amm_coin_vault`    | W |   | Vault coin pool.                  |
| 4 | `amm_pc_vault`      | W |   | Vault pc pool.                    |
| 5 | `amm_target_orders` | W |   |                                   |
| 6 | `model_data`        |   |   | Tabel pencarian.                  |
| 7 | `user_coin`         | W |   | Akun coin admin (menerima biaya). |
| 8 | `user_pc`           | W |   | Akun pc admin (menerima biaya).   |
| 9 | `amm_admin`         |   | S | Admin pool (penanda tangan).      |

**Perubahan logika**: ketika dana yang tersedia di pool tidak cukup untuk menarik PnL yang terkumpul, pool **tidak lagi** dimasukkan ke dalam `CancelAllOrdersState` / `Disabled`; instruksi mengembalikan `TakePnlError` secara langsung. `referrer_pc_wallet` opsional juga telah dihapus.

**Prekondisi**

* `amm_admin` harus berwenang.

**Postkondisi**

* `need_take_pnl_coin` dan `need_take_pnl_pc` ditransfer ke akun admin.
* Penghitung direset ke nol.

## Instruksi yang dihapus

Instruksi berikut dihapus dalam upgrade 2026-06-22 dan **tidak lagi dapat dipanggil**. Instruksi ini didokumentasikan di sini hanya agar integrator mengenalinya dalam transaksi dan SDK historis.

* **`Initialize`** — sebelumnya bootstrap pool Stable AMM baru. Dihapus.
* **`PreInitialize`** — helper pre-alokasi warisan. Dihapus.
* **`InitModelData`** — sebelumnya membuat dan menginisialisasi tabel pencarian `ModelDataInfo`. Dihapus.
* **`UpdateModelData`** — sebelumnya mengisi hingga 5 elemen tabel pencarian per panggilan. Dihapus.
* **`MonitorStep`** — crank OpenBook yang menyelesaikan pengisian dan memposting ulang grid order. Sudah lama tidak aktif setelah pool berhenti memposting ke OpenBook; sekarang dihapus.
* **`SetParams`** — perubahan parameter admin (status, biaya, pemilik, kunci data-model, dll.). Dihapus.
* **`WithdrawSrm`** — mengumpulkan rabat diskon biaya SRM dari pool era Serum awal. Dihapus.
* **`SimulateInfo`** — helper kutipan baca-saja. Dihapus; gunakan helper kurva stabil off-chain SDK untuk kutipan (lihat [Demo kode](/id/products/stable/code-demos)).

## Ke mana selanjutnya

* [Akun](/id/products/stable/accounts) — untuk tata letak dan ukuran bidang akun.
* [Matematika](/id/products/stable/math) — untuk logika interpolasi tabel pencarian.
* [Demo kode](/id/products/stable/code-demos) — untuk melihat cara memanggil ini dari SDK.

Sumber:

* `raydium-stable/program/src/instruction.rs` (enum dan pack/unpack)
* `raydium-stable/program/src/processor.rs` (logika eksekusi)
