> ## 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-08-31 — LaunchLab: aturan kurva platform menggantikan daftar putih parameter kurva

> Pembatasan parameter peluncuran berpindah dari PlatformConfig.curve_params ke akun PlatformCurveRule per-konfigurasi dengan batasan (field, op, value), pita nilai, grup pemeriksaan yang di-OR, dan dompet manajer delegasi. PlatformConfig mempertahankan ukuran 944 byte; bidang warisan dan dua instruksinya dihapus, dan tujuh kode kesalahan ditambahkan.

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

  [Lihat versi bahasa Inggris →](/reference/changelog/2026-08-31-launchlab-platform-curve-rules)
</Info>

<Info>
  Entri ini mencakup pembaruan program LaunchLab yang akan datang. Entri ini telah diverifikasi terhadap cabang rilis lokal sebelum penerapan. Konfirmasikan program yang diterapkan sebelum mengandalkan akun atau instruksi baru.
</Info>

Platform sudah dapat membatasi bentuk peluncuran mana yang dapat dipilih oleh kreatornya, melalui `PlatformConfig.curve_params`. Mekanisme tersebut hanya menguji **kesetaraan eksak**: entri baik mengikat bidang ke satu nilai atau menggantinya dengan sentinel. Mekanisme ini juga menampung paling banyak 10 entri di seluruh setiap `GlobalConfig` yang didukung platform, dan mekanisme ini berada di akun `PlatformConfig` itu sendiri, menambahnya sebesar 491 byte per entri.

Ketiga properti tersebut bertabrakan saat protokol menambahkan konfigurasi. Mengekspresikan "target penggalangan dana antara 50 dan 200 SOL" memerlukan satu entri per nilai yang diizinkan dan oleh karena itu tidak mungkin. Lantai `GlobalConfig` itu sendiri telah dibuka lebar — tingkat 1 bps, batas pasokan 99999 — justru agar setiap platform sesuai di bawahnya, yang membuat platform tidak memiliki cara untuk mempersempit.

Rilis ini menggantikan daftar putih dengan **aturan kurva**: satu akun `PlatformCurveRule` per pasangan (platform, config), menampung hingga 10 grup pemeriksaan, masing-masing menampung hingga 25 batasan `(field, op, value)` di atas 19 parameter peluncuran, dengan `Eq`, `Gte`, `Lte`, dan `Neq`. Batasan dalam grup di-AND, grup di-OR. Rentang adalah `Gte` ditambah `Lte` pada bidang yang sama.

Model lengkap dan sembilan playbook yang dikerjakan ada di halaman baru: [`products/launchlab/curve-rules`](/id/products/launchlab/curve-rules).

## TL;DR untuk integrator

* **`PlatformConfig` mempertahankan ukuran dan setiap offset bidang yang ada.** Ini adalah 944 byte tetap. `curve_params` hilang; `restrict_curve_param` (`u8`), `curve_rule_manager` (`Pubkey`), dan 4 byte yang ditempati prefiks panjang vec semuanya keluar dari padding, yang menyusut dari 107 menjadi 78.
* **Decoder harus menghapus vec trailing.** Decoder yang masih mengharapkan `Vec<PlatformCurveParam>` setelah padding akan membaca dua bidang baru sebagai byte vec. Semuanya sebelum padding tidak terpengaruh, jadi decoder yang hanya membaca dompet biaya dan tingkat terus bekerja tanpa perubahan.
* **Pembangun peluncuran memerlukan satu akun lagi saat flag aktif.** Sementara `restrict_curve_param` adalah `1`, `InitializeV2` dan `InitializeWithToken2022` memerlukan PDA aturan di `remaining_accounts` — *termasuk saat akun tidak ada*, sehingga menghilangkannya tidak dapat melewati pemeriksaan. Derivasi: `[b"platform_curve_rule", platform_config, global_config]`.
* **Tidak ada platform yang dibatasi secara default.** `restrict_curve_param` adalah `0` di setiap akun yang ada, dan `0` berarti program tidak membaca aturan sama sekali.
* **Dua instruksi dihapus:** `UpdatePlatformCurveParam` dan `RemovePlatformCurveParam`. Empat ditambahkan: `CreatePlatformCurveRule`, `UpdatePlatformCurveRule`, `RemovePlatformCurveRule`, `ClosePlatformCurveRule`.
* **`UpdatePlatformConfig` mendapat dua varian:** `RestrictCurveParam(u64)` pada indeks dispatch 13 dan `CurveRuleManager(Pubkey)` pada 14. Indeks yang ada 0–12 tidak berubah.
* **Tujuh kode kesalahan ditambahkan,** `6024`–`6030`. `6020` `CurveParamIsNotExist` dipertahankan sebagai placeholder meskipun pemanggil terakhirnya hilang, jadi tidak ada yang bergeser setelahnya. Lihat [`reference/error-codes`](/id/reference/error-codes).
* **Penyegaran IDL diperlukan.** Tipe akun baru, empat instruksi baru, dua dihapus, dua varian dispatch baru, tujuh kode kesalahan baru.
* **Periksa aturan off-chain sebelum mengirim apa pun.** SDK mengekspos `checkLaunchAgainstCurveRule` (mencerminkan pemeriksaan saat peluncuran, perilaku gagal-tertutup disertakan) dan `checkCurveRuleGroupWritable` (mencerminkan validasi saat penulisan). Keduanya adalah fungsi murni. Lihat [Periksa sebelum Anda mengirim](/id/products/launchlab/curve-rules#check-before-you-send).
* **Latihan di devnet sebelum mengaktifkan di mainnet.** Mengaktifkan `restrict_curve_param` mengubah apa yang dapat dilakukan kreator Anda segera. Urutan yang direkomendasikan — termasuk meluncurkan satu token yang harus ditolak, untuk membuktikan pembangun Anda benar-benar melewati akun aturan — ada di [Uji di devnet terlebih dahulu](/id/products/launchlab/curve-rules#test-on-devnet-first).

## Apa yang dapat diekspresikan oleh aturan yang tidak dapat dilakukan daftar putih

| Tujuan                                             | Daftar putih              | Aturan kurva                                        |
| -------------------------------------------------- | ------------------------- | --------------------------------------------------- |
| Satu bentuk peluncuran eksak                       | Satu entri                | Satu grup dengan batasan `Eq`                       |
| Target penggalangan dana dalam rentang             | Tidak dapat diekspresikan | Dua batasan: `Gte` + `Lte`                          |
| Tiga tingkat peluncuran                            | Tiga entri, hanya eksak   | Tiga grup                                           |
| Pita valuasi kelulusan independen dari pasokan     | Tidak dapat diekspresikan | Dua batasan pada `FundRaisingRateB` yang diturunkan |
| Lantai pada apa yang mencapai pool yang lulus      | Tidak dapat diekspresikan | Satu batasan pada `MigrateRateA` yang diturunkan    |
| SPL Token saja, atau Token-2022 saja               | Tidak dapat diekspresikan | Satu batasan pada `BaseTokenProgram`                |
| "Jika biaya transfer ditetapkan, batasi hingga 1%" | Tidak dapat diekspresikan | Dua grup, gated pada `TransferFeeEnabled`           |
| Aturan yang beralih pada tanggal, tanpa pengawasan | Tidak dapat diekspresikan | Dua grup, gated pada `UnixTimestamp`                |

19 bidang mencakup empat tingkat yang diturunkan — `SellRateA`, `LockRate`, `MigrateRateA`, `FundRaisingRateB` — yang membuat aturan portabel di seluruh pasokan daripada terikat pada satu.

## Manajemen delegasi

`PlatformConfig.curve_rule_manager` adalah dompet panas yang dapat membuat, memperbarui, menghapus, dan menutup akun aturan platform ini. Mengedit aturan adalah rutin dan kunci admin platform biasanya multisig; ini adalah bidang yang membuat multisig keluar dari loop. Atur sekali melalui `UpdatePlatformConfig::CurveRuleManager`.

Admin platform mempertahankan kekuatan yang sama secara paralel — program menerimanya dengan menurunkan ulang PDA `PlatformConfig` dari penandatangan — jadi kunci manajer yang hilang dapat dipulihkan dengan memutar bidang. `Pubkey::default()` berarti admin-only.

Kunci manajer yang dikompromikan dapat melonggarkan atau menghapus aturan parameter dan mengklaim kembali sewa akun aturan. Kunci tersebut tidak dapat membalik `restrict_curve_param`, menyentuh dompet biaya apa pun, bidang vesting, atau konfigurasi CPMM, atau melanggar batas `GlobalConfig`.

## Sewa dan ukuran

Akun aturan dibuat tanpa grup dan diubah ukurannya pada setiap perubahan, jadi platform membayar untuk aturan yang benar-benar ditulisnya, dan menghapus grup mengembalikan perbedaannya kepada penandatangan.

| Konten aturan                     | Ukuran     | Sewa         |
| --------------------------------- | ---------- | ------------ |
| Kosong                            | 150 byte   | \~0,0019 SOL |
| 1 grup, 2 batasan                 | 200 byte   | \~0,0023 SOL |
| 3 grup, 4 batasan masing-masing   | 408 byte   | \~0,0037 SOL |
| 10 grup, 25 batasan masing-masing | 4 790 byte | \~0,034 SOL  |

Karena ukurannya dinamis, decoder harus membaca panjang akun yang sebenarnya daripada menganggap konstanta.

## Biaya komputasi saat peluncuran

Pemeriksaan berjalan pada setiap peluncuran saat diaktifkan. Diukur end-to-end — derivasi PDA, pemindaian `remaining_accounts`, deserialisasi, evaluasi:

| Konten aturan                     | Bidang langsung | Bidang yang diturunkan |
| --------------------------------- | --------------- | ---------------------- |
| Diaktifkan, tidak ada akun aturan | 1 936           | —                      |
| 1 grup, 2 batasan                 | 2 576           | 2 926                  |
| 3 grup, 4 batasan masing-masing   | 3 624           | 5 724                  |
| 10 grup, 25 batasan masing-masing | 24 344          | 68 094                 |

Batasan yang diturunkan biaya sekitar 223 CU terhadap sekitar 48 untuk pembacaan bidang langsung. Bahkan aturan yang sepenuhnya dimuat tetap berada di dalam sepertiga dari anggaran default 200 000 CU per-instruksi. Grup dievaluasi sampai satu cocok, jadi tingkat yang paling banyak digunakan harus terlebih dahulu.

## Migrasi sekali jadi

Platform yang menggunakan daftar putih dimigrasikan oleh protokol dalam satu lintasan, sebelum flag tersedia untuk diaktifkan. Otoritas khusus menjalankan satu transaksi per platform yang menerjemahkan setiap entri warisan ke dalam grup pemeriksaan akun aturan konfigurasi yang dinamainya, menghapus entri dari `PlatformConfig`, dan menyusut akun itu kembali ke 944 byte.

Terjemahan mempertahankan semantik lama dengan tepat: setiap entri menjadi satu grup, setiap bidang non-sentinel menjadi satu batasan `Eq`, dan entri all-sentinel — yang cocok dengan setiap peluncuran — menjadi grup tanpa batasan, yang juga cocok dengan setiap peluncuran.

Migrasi menulis aturan tetapi tidak mengaktifkannya. Platform yang dimigrasikan tetap tidak dibatasi sampai menetapkan `restrict_curve_param` ke `1` sendiri. Instruksi migrasi telah dihapus dari program sekarang lintasan selesai, bersama dengan bidang warisan yang dibacanya.

## Apa yang tidak berubah

* **`GlobalConfig`.** Tata letak yang sama, batas yang sama, instruksi yang sama. Aturan mempersempit batas tersebut dan diperiksa bersama; mereka tidak pernah dapat memperluas satu.
* **Daftar akun dan argumen instruksi peluncuran.** `InitializeV2` dan `InitializeWithToken2022` mengambil akun tetap yang sama dan argumen yang sama. Hanya `remaining_accounts` yang mendapat entri, dan hanya saat flag aktif.
* **Jalur perdagangan, kelulusan, biaya, dan vesting.** Tidak tersentuh.
* **`PlatformAllowConfig`.** Tidak berubah dan tidak terkait: ini memutuskan *konfigurasi mana* yang dapat digunakan peluncuran platform, sementara aturan memutuskan *parameter mana* dalam konfigurasi. Dua flag independen.
* **Kode kesalahan `6000`–`6023`.** Tidak berubah, `6020` disertakan.
* **Ukuran `PlatformConfig` dan offset pre-padding.** Tidak berubah, jadi akun yang ada tidak memerlukan migrasi mereka sendiri.

## Halaman yang diperbarui

* `products/launchlab/curve-rules` — **halaman baru.** Model tiga tingkat, tabel bidang 19 dan operator 4, sembilan playbook, pembatasan tipe kurva, dua pembantu pemeriksaan off-chain, urutan latihan devnet, manajemen delegasi, sewa, urutan peluncuran, dan biaya komputasi.
* `products/launchlab/platform-config` — "Daftar putih parameter kurva" diganti dengan "Aturan parameter peluncuran"; tata letak diperbarui untuk `restrict_curve_param`, `curve_rule_manager`, dan padding 78-byte; tabel jalur pembaruan, cuplikan jalur baca, dan jebakan ditulis ulang.
* `products/launchlab/instructions` — bagian "Aturan parameter peluncuran platform" baru mencakup empat instruksi, akun, argumen, dan kesalahan mereka; baris inventaris diganti.
* `products/launchlab/accounts` — `PlatformCurveRule` ditambahkan ke inventaris dan diberikan bagiannya sendiri dengan tata letak lengkap dan peringatan ukuran variabel.
* `reference/error-codes` — `6024`–`6030` didokumentasikan; `6018` dan `6020` dianotasi.
