> ## 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：平台曲線規則取代曲線參數白名單

> 啟動參數限制從 PlatformConfig.curve_params 移至個別設定的 PlatformCurveRule 帳戶，支援 (field, op, value) 約束、數值範圍、OR 邏輯檢查群組，以及委派管理員錢包。PlatformConfig 保持 944 位元組大小；舊版欄位及其兩個指令已移除，新增七個錯誤代碼。

<Info>
  **本頁內容由 AI 自動翻譯，所有內容以英文版本為準。**

  [查看英文版 →](/reference/changelog/2026-08-31-launchlab-platform-curve-rules)
</Info>

<Info>
  本項目涵蓋即將推出的 LaunchLab 程式更新。在部署前已針對本地發行分支進行驗證。在依賴新帳戶或指令之前，請確認已部署的程式。
</Info>

平台原本可以透過 `PlatformConfig.curve_params` 限制建立者可選擇的啟動形狀。該機制**僅測試完全相等**：一個項目要麼將欄位固定為一個值，要麼用哨兵值進行萬用字元匹配。此外，在平台支援的每個 `GlobalConfig` 中最多只能有 10 個項目，且它存放在 `PlatformConfig` 帳戶本身上，每個項目會增加 491 位元組。

隨著協議新增設定，這三個特性產生了衝突。表達「募資目標在 50 到 200 SOL 之間」需要為每個允許的值建立一個項目，因此根本無法實現。同時，`GlobalConfig` 本身的下限已大幅放寬——1 bps 費率、99999 供應量上限——正是為了讓每個平台都符合要求，這導致平台無法進一步縮小範圍。

本版本用**曲線規則**取代白名單：每個 (platform, config) 對應一個 `PlatformCurveRule` 帳戶，最多可容納 10 個檢查群組，每個群組最多 25 個 `(field, op, value)` 約束，涵蓋 19 個啟動參數，支援 `Eq`、`Gte`、`Lte` 和 `Neq` 運算子。群組內的約束使用 AND 邏輯，群組之間使用 OR 邏輯。範圍是同一欄位上的 `Gte` 加 `Lte`。

完整模型和九個實作範例位於新頁面：[`products/launchlab/curve-rules`](/zh-Hant/products/launchlab/curve-rules)。

## 整合者速查表

* **`PlatformConfig` 保持大小和所有現有欄位偏移。** 固定為 944 位元組。`curve_params` 已移除；`restrict_curve_param`（`u8`）、`curve_rule_manager`（`Pubkey`）和向量長度前綴佔用的 4 位元組全部來自填充區，填充區從 107 位元組縮減至 78 位元組。
* **解碼器必須捨棄尾部向量。** 仍期望在填充後有 `Vec<PlatformCurveParam>` 的解碼器會將兩個新欄位讀作向量位元組。填充前的所有內容不受影響，因此只讀取費用錢包和費率的解碼器保持正常運作。
* **啟動建構器在旗標開啟時需要一個額外帳戶。** 當 `restrict_curve_param` 為 `1` 時，`InitializeV2` 和 `InitializeWithToken2022` 在 `remaining_accounts` 中需要規則 PDA——**包括帳戶不存在時**，以防止省略它來跳過檢查。推導方式：`[b"platform_curve_rule", platform_config, global_config]`。
* **預設情況下沒有平台受限。** 每個現有帳戶上 `restrict_curve_param` 為 `0`，`0` 表示程式根本不讀取規則。
* **兩個指令已移除：** `UpdatePlatformCurveParam` 和 `RemovePlatformCurveParam`。新增四個：`CreatePlatformCurveRule`、`UpdatePlatformCurveRule`、`RemovePlatformCurveRule`、`ClosePlatformCurveRule`。
* **`UpdatePlatformConfig` 新增兩個變體：** 分派索引 13 的 `RestrictCurveParam(u64)` 和索引 14 的 `CurveRuleManager(Pubkey)`。現有索引 0–12 保持不變。
* **新增七個錯誤代碼，** `6024`–`6030`。`6020` `CurveParamIsNotExist` 保留為佔位符，儘管其最後一個呼叫者已消失，因此後續代碼不會移位。參見 [`reference/error-codes`](/zh-Hant/reference/error-codes)。
* **需要 IDL 刷新。** 新帳戶類型、四個新指令、兩個已移除、兩個新分派變體、七個新錯誤代碼。
* **在發送任何內容前離線檢查規則。** SDK 公開 `checkLaunchAgainstCurveRule`（鏡像啟動時檢查，包括失敗關閉行為）和 `checkCurveRuleGroupWritable`（鏡像寫入時驗證）。兩者都是純函數。參見[發送前檢查](/zh-Hant/products/launchlab/curve-rules#check-before-you-send)。
* **在主網啟用前在開發網排練。** 開啟 `restrict_curve_param` 會立即改變建立者的可用選項。建議序列——包括啟動一個應被拒絕的代幣以證明建構器確實通過規則帳戶——位於[先在開發網測試](/zh-Hant/products/launchlab/curve-rules#test-on-devnet-first)。

## 規則能表達而白名單無法表達的內容

| 意圖                        | 白名單        | 曲線規則                            |
| ------------------------- | ---------- | ------------------------------- |
| 一個確切的啟動形狀                 | 一個項目       | 一個群組，含 `Eq` 約束                  |
| 範圍內的募資目標                  | 無法表達       | 兩個約束：`Gte` + `Lte`              |
| 三個啟動層級                    | 三個項目，僅精確匹配 | 三個群組                            |
| 獨立於供應量的畢業估值範圍             | 無法表達       | 衍生 `FundRaisingRateB` 上的兩個約束    |
| 進入畢業池的下限                  | 無法表達       | 衍生 `MigrateRateA` 上的一個約束        |
| 僅 SPL Token 或僅 Token-2022 | 無法表達       | `BaseTokenProgram` 上的一個約束       |
| 「如果設定轉帳費用，上限為 1%」         | 無法表達       | 兩個群組，以 `TransferFeeEnabled` 為門檻 |
| 在某個日期自動切換的規則              | 無法表達       | 兩個群組，以 `UnixTimestamp` 為門檻      |

19 個欄位包括四個衍生費率——`SellRateA`、`LockRate`、`MigrateRateA`、`FundRaisingRateB`——這使得規則可跨供應量移植，而不是固定於一個。

## 委派管理

`PlatformConfig.curve_rule_manager` 是一個熱錢包，可以建立、更新、移除和關閉該平台的規則帳戶。編輯規則是常規操作，平台管理員金鑰通常是多簽；此欄位的作用是將多簽排除在外。透過 `UpdatePlatformConfig::CurveRuleManager` 設定一次。

平台管理員保留相同的並行權力——程式透過從簽署者重新推導 `PlatformConfig` PDA 來接受——因此遺失的管理員金鑰可透過輪換此欄位來恢復。`Pubkey::default()` 表示僅限管理員。

被洩露的管理員金鑰可以放寬或刪除參數規則，並回收規則帳戶的租金。但它無法翻轉 `restrict_curve_param`、觸及任何費用錢包、質押欄位或 CPMM 設定，或破壞 `GlobalConfig` 限制。

## 租金和大小

規則帳戶建立時不含任何群組，每次變更時調整大小，因此平台只需為實際寫入的規則付費，移除群組會將差額退款給簽署者。

| 規則內容            | 大小        | 租金           |
| --------------- | --------- | ------------ |
| 空               | 150 位元組   | \~0.0019 SOL |
| 1 個群組，2 個約束     | 200 位元組   | \~0.0023 SOL |
| 3 個群組，各 4 個約束   | 408 位元組   | \~0.0037 SOL |
| 10 個群組，各 25 個約束 | 4 790 位元組 | \~0.034 SOL  |

由於大小是動態的，解碼器必須讀取帳戶的實際長度，而不是假設常數。

## 啟動時的計算成本

檢查在啟用時於每次啟動時執行。端到端測量——PDA 推導、`remaining_accounts` 掃描、反序列化、評估：

| 規則內容            | 直接欄位   | 衍生欄位   |
| --------------- | ------ | ------ |
| 啟用，無規則帳戶        | 1 936  | —      |
| 1 個群組，2 個約束     | 2 576  | 2 926  |
| 3 個群組，各 4 個約束   | 3 624  | 5 724  |
| 10 個群組，各 25 個約束 | 24 344 | 68 094 |

衍生約束的成本約為 223 CU，而直接欄位讀取約為 48 CU。即使是完全加載的規則也保持在預設 200 000 CU 每指令預算的三分之一以內。群組按順序評估直到一個匹配，因此最常用的層級應放在最前面。

## 一次性遷移

使用白名單的平台在旗標可用前由協議在單次通過中進行遷移。一個專用授權為每個平台執行一筆交易，將每個舊版項目轉譯為其命名設定的規則帳戶的檢查群組，清除 `PlatformConfig` 中的項目，並將該帳戶縮減回 944 位元組。

轉譯精確保留了舊語義：每個項目變成一個群組，每個非哨兵欄位變成一個 `Eq` 約束，全哨兵項目——匹配每次啟動——變成無約束群組，也匹配每次啟動。

遷移寫入了規則但未啟用它們。遷移的平台保持不受限制，直到自己將 `restrict_curve_param` 設定為 `1`。遷移指令現已從程式中移除，因為通過已完成，讀取它的舊版欄位也一併移除。

## 未變更的內容

* **`GlobalConfig`。** 相同的佈局、相同的限制、相同的指令。規則縮小這些限制並與它們一起檢查；它們永遠無法擴寬任何限制。
* **啟動指令的帳戶列表和參數。** `InitializeV2` 和 `InitializeWithToken2022` 採用相同的固定帳戶和相同的參數。只有 `remaining_accounts` 新增一個項目，且僅在旗標開啟時。
* **交易、畢業、費用和質押路徑。** 未觸及。
* **`PlatformAllowConfig`。** 未變更且無關：它決定平台的啟動可使用**哪些設定**，而規則決定設定內**哪些參數**。兩個旗標是獨立的。
* **錯誤代碼 `6000`–`6023`。** 未變更，包括 `6020`。
* **`PlatformConfig` 的大小和填充前偏移。** 未變更，因此現有帳戶無需自己遷移。

## 更新的頁面

* `products/launchlab/curve-rules` — **新頁面。** 三層模型、19 欄位和 4 運算子表、九個範例、曲線類型限制、兩個離線檢查助手、開發網排練序列、委派管理、租金、推出順序和計算成本。
* `products/launchlab/platform-config` — 「曲線參數白名單」替換為「啟動參數規則」；佈局針對 `restrict_curve_param`、`curve_rule_manager` 和 78 位元組填充進行更新；更新路徑表、讀取路徑片段和陷阱已重寫。
* `products/launchlab/instructions` — 新增「平台啟動參數規則」部分，涵蓋四個指令、其帳戶、參數和錯誤；清單列已替換。
* `products/launchlab/accounts` — `PlatformCurveRule` 新增至清單並獲得自己的部分，含完整佈局和可變大小警告。
* `reference/error-codes` — `6024`–`6030` 已記錄；`6018` 和 `6020` 已註解。
