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.
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:
- 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).
- 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.
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.
| 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.
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.
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.
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).
Ke mana selanjutnya
- Akun — untuk tata letak dan ukuran bidang akun.
- Matematika — untuk logika interpolasi tabel pencarian.
- Demo kode — 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)