Skip to main content
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Entri changelog dokumentasi. Untuk indeks semua pembaruan, lihat reference/changelog. Untuk garis waktu historis protokol itu sendiri, lihat introduction/history-and-milestones.
Rilis ini mendokumentasikan dua perubahan program CLMM. Keduanya bersifat aditif dan kompatibel ke belakang: pool, posisi, dan open order yang ada tidak terpengaruh, dan jalur CreatePool / CreateCustomizablePool klasik tetap tidak berubah.

TL;DR untuk integrator

  • ID pool sekarang dapat non-kanonik, di belakang gerbang izin. Secara historis ada tepat satu alamat pool CLMM per (amm_config, token_mint_0, token_mint_1) — benih PDA mempinnya. Instruksi baru, CreatePermissionedPool, melipat seed_index: u16 yang disediakan klien dan bukan nol ke dalam benih pool PDA, sehingga operator terdaftar dapat membuat beberapa pool untuk pasangan dan tier biaya yang sama, masing-masing di alamatnya sendiri. Karena alamat pool arbitrer adalah kemampuan istimewa, pembayar harus memegang PDA Permission yang diberikan oleh admin. Dua instruksi admin, CreatePermissionPda dan ClosePermissionPda, mengelola hibah tersebut.
  • OpenLimitOrder sekarang memvalidasi sisi output. Instruksi mengambil tiga akun tambahan — output_token_account, output_vault, output_vault_mint — dan menolak pesanan dengan NotApproved jika akun token input atau output pemilik frozen. Ini menjamin pengisian akhir dapat dikirimkan, yang penting untuk mint Token-2022 dengan allow-list / default-frozen (token berizin). Klien yang dibangun terhadap daftar akun satu sisi lama harus menambahkan tiga akun output.

Apa yang berubah dalam program

Instruksi baru: CreatePermissionedPool

Bentuk dan parameter yang sama dengan CreateCustomizablePool (mengambil CreateCustomizableParams yang sama, jadi biaya satu sisi dan opt-in biaya dinamis tersedia), ditambah:
  • Argumen seed_index: u16, yang harus bukan nol. Ini ditambahkan (little-endian) ke benih pool PDA: ["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()].
  • Akun permission: PDA ["permission", payer]. Anchor menolak panggilan jika tidak ada atau tidak dimiliki oleh program — keberadaannya saja adalah otorisasi.
  • Akun pool_creator yang dicatat sebagai pool_state.owner, yang mungkin berbeda dari payer pembayar biaya.
seed_index = 0 tetap dicadangkan untuk pool legacy: untuk itu komponen benih runtuh menjadi kosong, mereproduksi alamat empat-benih klasik, jadi tidak ada alamat pool yang ada berubah. Lihat Instructions → CreatePermissionedPool.

Akun baru: Permission

Akun kemampuan yang keberadaannya adalah hibah. Ini hanya menyimpan authority yang dibuat untuknya (ditambah padding). Benih PDA: ["permission", authority]. Ini memberikan hak untuk memanggil CreatePermissionedPool dan tidak ada yang lain — tidak dapat memindahkan dana, mengubah biaya, atau mengubah pool apa pun. Lihat Accounts → Permission.

Instruksi admin baru: CreatePermissionPda / ClosePermissionPda

  • CreatePermissionPda menginisialisasi PDA Permission untuk permission_authority yang diberikan.
  • ClosePermissionPda menutupnya dan mengembalikan sewa ke pemanggil, mencabut hibah. Pool yang sudah dibuat di bawah hibah itu tidak terpengaruh.
Keduanya menerima pubkey admin program atau kunci permission_pda_admin khusus (konstanta berbeda di mainnet vs devnet). Lihat Admin keys and multisig → CLMM.

PoolState: field seed_index

Dua byte diukir dari wilayah padding yang ada (padding: [u8; 6]seed_index: [u8; 2] + padding: [u8; 4]) langsung setelah fee_on. Ukuran akun total tidak berubah, dan tidak ada migrasi indexer yang diperlukan. Untuk pool yang dibuat melalui CreatePool / CreateCustomizablePool, seed_index adalah [0, 0]; untuk pool berizin itu membawa indeks pilihan kreator dan diperlukan untuk menurunkan ulang alamat pool secara offline.

OpenLimitOrder: akun sisi output dan frozen-account guard

Daftar akun OpenLimitOrder mendapatkan output_token_account, output_vault, dan output_vault_mint. Mereka digunakan hanya untuk validasi — tidak ada output yang didebit saat dibuka. Handler sekarang memerlukan bahwa tidak ada akun token input atau output yang frozen, mengembalikan NotApproved sebaliknya (kode yang sama sudah dikembalikan ketika pool memiliki swap atau limit-order dinonaktifkan). Ini menutup celah di mana pesanan dapat dibuka terhadap akun token yang tidak pernah dapat menerima pengisian (misalnya akun yang belum dicairkan untuk mint Token-2022 default-frozen). Lihat Instructions → OpenLimitOrder.

Kode kesalahan

Tidak ada kode kesalahan baru. 6000 NotApproved yang ada sekarang juga mencakup akun token input/output frozen dan kasus swap/limit-order-disabled pada OpenLimitOrder, dan kasus “penandatangan bukan admin atau permission_pda_admin” pada instruksi izin. Tabel kode kesalahan dan penomoran sebaliknya tidak berubah dari rilis 2026-05-18. Lihat Error codes → CLMM.

Catatan migrasi

  • Membaca alamat pool: jangan asumsikan satu pool per (config, mint0, mint1). Pasangan sekarang mungkin memiliki pool kanonik ditambah satu atau lebih pool berizin di alamat yang diturunkan seed_index. Enumerasi pool dari API / indexer daripada menurunkan PDA tunggal, dan simpan seed_index ketika Anda perlu menurunkan ulang pool berizin.
  • Menempatkan limit order: tambahkan tiga akun sisi output ke transaksi OpenLimitOrder Anda, dan tampilkan pesan yang jelas ketika NotApproved dikembalikan untuk akun frozen.
  • Tidak ada pemecahan ukuran akun atau tata letak: PoolState memiliki ukuran yang sama; byte padding yang sudah pensiun sekarang menyimpan seed_index.

Halaman yang diperbarui

  • products/clmm/overview — catatan “What’s new” tentang multi-pool berizin dan limit-order guard.
  • products/clmm/instructions — bagian CreatePermissionedPool baru, CreatePermissionPda / ClosePermissionPda dalam tabel instruksi dan catatan admin-gating, dan daftar akun OpenLimitOrder yang diperbarui / prasyarat / kesalahan.
  • products/clmm/accountsPermission dalam inventaris dan bagiannya sendiri, field PoolState.seed_index, pembantu derivasi PDA (derivePermissionedPool, derivePermission), dan referensi cepat siklus hidup.
  • security/admin-and-multisig — baris permission_pda_admin baru dan penjelasan cakupan izin dalam tabel peran CLMM.
  • reference/error-codes — deskripsi NotApproved yang diperluas.
Diverifikasi terhadap:
  • Sumber raydium-clmm (create_permissioned_pool.rs, admin/create_permission_pda.rs, admin/close_permission_pda.rs, states/permission.rs, states/pool.rs, limit_order/open_limit_order.rs, lib.rs).