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

# 2026-09-09 — AMM v4: Dependensi Solana 3.0 dan pemulihan excess-lamports

> AMM v4 dibangun kembali terhadap solana-program 3.0, spl-token 9.0 dan crate solana-system-interface baru, serta menambahkan instruksi WithdrawExcessLamports khusus admin (tag 18) yang mengembalikan rent yang dibebaskan oleh SIMD-0437. CreateConfigAccount berhenti membaca rent sysvar di akhirnya, secara kompatibel. Tidak ada yang rusak dan tidak ada layout akun yang berubah.

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

  [Lihat versi bahasa Inggris →](/reference/changelog/2026-09-09-amm-v4-solana-3-and-excess-lamports)
</Info>

<Info>
  Entri ini mencakup pembaruan program AMM v4 yang akan datang. Entri ini telah diverifikasi terhadap cabang rilis lokal sebelum deployment. Konfirmasi program yang di-deploy sebelum mengandalkan instruksi baru.
</Info>

Dua hal yang tidak terkait tiba bersama dalam satu kali pembangunan ulang.

Yang pertama adalah pemeliharaan: AMM v4 telah dikunci pada `solana-program` `=2.1.0` sejak upgrade 2.1, dan kunci itu menghalangi. Helper sistem-program berpindah ke crate `solana-system-interface` mereka sendiri di Solana 3.0, `spl-token` mencapai 9.0, dan `spl-associated-token-account` mencapai 8.0. Rilis ini mengambil ketiganya.

Yang kedua adalah uang yang protokol miliki. [SIMD-0437](/id/solana-fundamentals/rent-and-reclaimable-rent) mengurangi minimum rent-exempt sebesar 90% dalam lima langkah, dan langkah 1 mendarat di mainnet pada 3 September 2026. Setiap akun yang dibuat AMM v4 sebelumnya — ratusan vault pool, LP mint, akun `AmmInfo` dan `TargetOrders` — sekarang over-funded, dan lamport dalam akun yang dimiliki program hanya dapat dipindahkan oleh program itu. Oleh karena itu instruksi baru.

## TL;DR untuk integrator

* **Tidak ada yang dipanggil trader atau LP yang berubah.** `Initialize2`, `Deposit`, `Withdraw`, `SwapBaseIn`, `SwapBaseOut`, `SwapBaseInV2`, `SwapBaseOutV2`, `WithdrawPnl` dan `SetParams` mempertahankan daftar akun, layout argumen dan matematika mereka. Tidak ada layout akun yang berubah. Tidak ada kode kesalahan yang ada yang bergerak.
* **Satu instruksi ditambahkan: `WithdrawExcessLamports`, tag `18`.** Hanya admin, tanpa argumen, daftar akun variadic. Ini mengembalikan lamport di atas minimum rent-exempt dari akun yang dikendalikan AMM v4 dan tidak menyentuh apa pun. Lihat [`products/amm-v4/instructions`](/id/products/amm-v4/instructions#withdrawexcesslamports).
* **Satu kode kesalahan ditambahkan: `60` `LamportsCalculateError`.** `AmmError` bukan bernomor Anchor — dimulai dari `0` — jadi ini adalah `custom program error: 0x3c`. Kode `0`–`59` tidak berubah.
* **`CreateConfigAccount` (tag 14) berhenti membaca rent sysvar** dan sekarang didokumentasikan sebagai instruksi 4-akun. **Tidak ada yang rusak dalam rilis ini**, ini termasuk: akun adalah yang terakhir dalam daftar dan handler membaca secara posisional tanpa pemeriksaan panjang, jadi tooling admin yang masih meneruskannya terus bekerja.
* **Penyegaran IDL diperlukan** jika Anda membuat klien dari satu. Satu instruksi baru, satu varian kesalahan baru, satu daftar akun yang berubah.

## `WithdrawExcessLamports`

Instruksi mengambil dompet collect-lamports sebagai satu-satunya penandatangan dan tujuan, PDA otoritas AMM v4, program SPL Token, dan kemudian sejumlah akun sumber. Ini mengirim pada pemilik setiap akun sumber:

| Pemilik akun sumber                | Penanganan                                                                                                                                                                         |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SPL Token, 165 byte, non-native    | CPI program token `WithdrawExcessLamports` (discriminant `38`), ditandatangani oleh PDA otoritas                                                                                   |
| SPL Token, 165 byte, native (wSOL) | `SyncNative`, ukur berapa banyak `amount` yang dibungkus tumbuh, `UnwrapLamports` (discriminant `45`) untuk delta itu persis, kemudian pastikan saldo yang dibungkus tidak berubah |
| SPL Token, ukuran lain (LP mint)   | CPI `WithdrawExcessLamports`                                                                                                                                                       |
| Program AMM v4 itu sendiri         | Debit akun langsung ke `rent.minimum_balance(data_len)`                                                                                                                            |
| Apa pun yang lain                  | Dilewati diam-diam                                                                                                                                                                 |

Cabang wSOL adalah yang menarik. Saldo lamport akun wrapped-SOL *adalah* saldo token-nya, jadi program token menolak `WithdrawExcessLamports` padanya sepenuhnya. Perjalanan bolak-balik melalui `SyncNative` dan `UnwrapLamports` berukuran delta mengekstrak hanya kelebihan yang disumbangkan dan meninggalkan saldo yang dibungkus persis di mana ia dimulai — yang dikonfirmasi setelahnya, dengan `LamportsCalculateError` jika aritmatika tidak setuju. **Vault pool sisi SOL oleh karena itu mempertahankan likuiditas penuhnya melalui sweep**, dan tidak ada LP yang melihat perubahan harga di seluruh satu.

Penandatangan adalah kunci khusus per cluster, hardcoded di bawah modul `config_feature` yang sama dengan alamat pemilik AMM dan create-pool-fee yang ada. Tidak seperti CPMM dan LaunchLab, AMM v4 menerima **hanya** dompet itu — tidak ada fallback admin. Alamat ada di [`reference/program-addresses`](/id/reference/program-addresses#excess-lamports-collection-wallets).

## `CreateConfigAccount` berhenti membaca rent sysvar

Solana 3.0 adalah apa yang membuat `Rent::get()` cara alami untuk membaca parameter rent, jadi rilis mengganti semua empat panggilan `Rent::from_account_info(...)` dalam program. Dalam tiga dari mereka — helper yang membuat akun token pool, LP mint dan akun PDA selama `Initialize2` — akun sysvar masih dilewatkan dan masih diteruskan ke CPI token-program, jadi tidak ada yang berubah tentang daftar akun itu. Dalam `CreateConfigAccount` sysvar tidak memiliki tujuan lain dan adalah akun terakhir dalam daftar, jadi keluar dari daftar yang didokumentasikan:

|   | Sebelum (5 akun) | Sesudah (4 akun) |
| - | ---------------- | ---------------- |
| 1 | `admin` (W, S)   | `admin` (W, S)   |
| 2 | `amm_config` (W) | `amm_config` (W) |
| 3 | `pnl_owner`      | `pnl_owner`      |
| 4 | `system_program` | `system_program` |
| 5 | `rent`           | —                |

**Mengirim daftar lima-akun lama masih bekerja.** Akun yang dihapus adalah yang terakhir, dan `process_create_config` membaca empat akunnya secara posisional melalui `next_account_info` tanpa apa pun yang memeriksa jumlah total, jadi akun rent di akhir tidak pernah dilihat. Tooling admin harus diperbarui untuk kejelasan, bukan urgensi. Tidak ada konstruktor yang menghadap pengguna yang membuat instruksi ini sama sekali.

`Initialize2` adalah kasus untuk tidak membaca berlebihan: ia juga berhenti memanggil `Rent::from_account_info`, tetapi akun rent-nya **tetap** di posisi 3 dan masih benar-benar digunakan — program meneruskannya ke CPI `spl_token::initialize_account` dan `initialize_mint` yang membuat vault pool dan LP mint. Menghapusnya dari daftar akun itu akan merusak pembuatan pool.

## Perubahan dependensi

| Crate                          | Sebelum  | Sesudah                   |
| ------------------------------ | -------- | ------------------------- |
| `solana-program`               | `=2.1.0` | `=3.0.0`                  |
| `solana-system-interface`      | —        | `=3.0.0`, fitur `bincode` |
| `spl-token`                    | `=7.0.0` | `9.0.0`                   |
| `spl-associated-token-account` | `6.0.0`  | `8.0.0`                   |

Potongan sistem-program yang digunakan program — `system_instruction::create_account`, `transfer`, `allocate`, `assign`, dan ID program itu sendiri — sekarang berasal dari `solana-system-interface` daripada `solana_program::system_program` dan `solana_program::system_instruction`. ID program adalah byte-identical, jadi ini adalah perpindahan waktu kompilasi tanpa konsekuensi on-chain, termasuk untuk pemeriksaan `InvalidSysProgramAddress` yang membandingkannya.

Dua modul mati juga dihapus: `srm_token` dan `msrm_token`, deklarasi mint Serum/MSRM yang tertinggal dari [penghapusan OpenBook](/id/reference/changelog/2026-07-22-amm-v4-openbook-removal). Tidak ada yang mereferensikannya.

## Apa yang tidak berubah

* **Setiap layout akun.** `AmmInfo`, `StateData`, `TargetOrders`, `AmmConfig` — ukuran yang sama, offset field yang sama. Tidak ada perubahan indexer atau decoder.
* **Kode kesalahan `0`–`59`.** `LamportsCalculateError` ditambahkan di `60`, jadi tidak ada yang bergeser.
* **PDA otoritas AMM.** Masih satu PDA untuk seluruh program, seed `["amm authority"]`, nonce `254`.
* **Biaya, akuntansi PnL, dan kurva.** Tidak disentuh. `WithdrawExcessLamports` memindahkan lamport yang tidak pernah menjadi bagian dari cadangan pool apa pun.
* **Token-2022.** Masih tidak didukung. Instruksi baru berbicara hanya ke program SPL Token legacy.
* **ID Program.** Tidak berubah — lihat [`reference/program-addresses`](/id/reference/program-addresses).

## Halaman yang diperbarui

* `products/amm-v4/instructions` — `WithdrawExcessLamports` ditambahkan dengan daftar akun dan tabel dispatch per-pemilik; bagian `CreateConfigAccount` / `UpdateConfigAccount` baru mencakup penghapusan rent-sysvar; baris tabel inventaris dan matriks perubahan status ditambahkan.
* `products/amm-v4/overview` — banner rilis.
* `reference/error-codes` — bagian "AMM v4: `AmmError` bukan bernomor Anchor" baru mendokumentasikan kode `60` dan penomoran berbasis `0`.
* `reference/program-addresses` — bagian "Dompet koleksi excess-lamports" baru.
* `solana-fundamentals/rent-and-reclaimable-rent` — bagian "Apa yang program Raydium sweep di sisi mereka sendiri" baru; catatan wrapped-SOL dikoreksi untuk mengatakan kedua program token mengekspos `UnwrapLamports`.
* `solana-fundamentals/toolchain` — Agave 3.1.10, `release.anza.xyz`, Rust 1.91.0.
