> ## 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 から、(フィールド、演算子、値)制約、値帯域、OR結合されたチェックグループ、および委任されたマネージャーウォレットを持つ個別の PlatformCurveRule アカウントに移行します。PlatformConfig は 944 バイトのサイズを維持し、レガシーフィールドと 2 つの命令が削除され、7 つのエラーコードが追加されます。

<Info>
  **このページは AI による自動翻訳です。すべての内容は英語版を正とします。**

  [英語版を表示 →](/reference/changelog/2026-08-31-launchlab-platform-curve-rules)
</Info>

<Info>
  このエントリは、今後の LaunchLab プログラムアップデートについて説明しています。デプロイ前にローカルリリースブランチに対して検証されました。新しいアカウントまたは命令に依存する前に、デプロイされたプログラムを確認してください。
</Info>

プラットフォームは既に `PlatformConfig.curve_params` を通じて、クリエイターが選択できるローンチシェイプを制限することができました。そのメカニズムは**完全一致のみをテスト**していました：エントリはフィールドを 1 つの値にピン留めするか、センチネル値でワイルドカード化するかのいずれかです。また、プラットフォームがサポートするすべての `GlobalConfig` にわたって最大 10 エントリを保持でき、`PlatformConfig` アカウント自体に存在していたため、エントリあたり 491 バイト増加していました。

これら 3 つの特性は、プロトコルが設定を追加するにつれて衝突しました。「50～200 SOL の資金調達目標」を表現するには、許可された値ごとに 1 つのエントリが必要であり、したがって不可能でした。一方、`GlobalConfig` 自体のフロアは広く開かれていました — 1 bps レート、99999 供給量の上限 — すべてのプラットフォームがそれらの下に収まるようにするためであり、プラットフォームはそれらを絞る方法がありませんでした。

このリリースはホワイトリストを**曲線ルール**に置き換えます：(プラットフォーム、設定) ペアごとに 1 つの `PlatformCurveRule` アカウント、最大 10 個のチェックグループを保持し、各グループは 19 個のローンチパラメータに対して最大 25 個の `(フィールド、演算子、値)` 制約を保持し、`Eq`、`Gte`、`Lte`、および `Neq` を使用します。グループ内の制約は AND で結合され、グループは OR で結合されます。範囲は同じフィールドに対する `Gte` と `Lte` です。

完全なモデルと 9 つの実装例は新しいページにあります：[`products/launchlab/curve-rules`](/ja/products/launchlab/curve-rules)。

## インテグレーター向け TL;DR

* **`PlatformConfig` はそのサイズとすべての既存フィールドオフセットを保持します。** これは固定 944 バイトです。`curve_params` は削除されます；`restrict_curve_param`（`u8`）、`curve_rule_manager`（`Pubkey`）、およびベクトルの長さプレフィックスが占めていた 4 バイトはすべてパディングから削除され、107 から 78 に縮小します。
* **デコーダーは末尾のベクトルをドロップする必要があります。** パディング後に `Vec<PlatformCurveParam>` を期待するデコーダーは、2 つの新しいフィールドをベクトルバイトとして読み取ります。パディング前のすべてはそのままなので、フィーウォレットとレートのみを読み取るデコーダーは変更なしで機能し続けます。
* **フラグがオンの場合、ローンチビルダーは 1 つ多くのアカウントが必要です。** `restrict_curve_param` が `1` の間、`InitializeV2` と `InitializeWithToken2022` は `remaining_accounts` のルール PDA を必要とします — *アカウントが存在しない場合でも*、それを省略してチェックをスキップできないようにするためです。導出：`[b"platform_curve_rule", platform_config, global_config]`。
* **デフォルトではプラットフォームは制限されません。** `restrict_curve_param` はすべての既存アカウントで `0` であり、`0` はプログラムがルールをまったく読み取らないことを意味します。
* **2 つの命令が削除されます：** `UpdatePlatformCurveParam` と `RemovePlatformCurveParam`。4 つが追加されます：`CreatePlatformCurveRule`、`UpdatePlatformCurveRule`、`RemovePlatformCurveRule`、`ClosePlatformCurveRule`。
* **`UpdatePlatformConfig` は 2 つのバリアントを獲得します：** ディスパッチインデックス 13 の `RestrictCurveParam(u64)` と 14 の `CurveRuleManager(Pubkey)`。既存のインデックス 0～12 は変更されません。
* **7 つのエラーコードが追加されます、** `6024`～`6030`。`6020` `CurveParamIsNotExist` は、その最後の呼び出し元がなくなったにもかかわらずプレースホルダーとして保持されるため、その後のものはシフトしません。[`reference/error-codes`](/ja/reference/error-codes) を参照してください。
* **IDL リフレッシュが必要です。** 新しいアカウントタイプ、4 つの新しい命令、2 つ削除、2 つの新しいディスパッチバリアント、7 つの新しいエラーコード。
* **何かを送信する前にルールをオフチェーンで確認してください。** SDK は `checkLaunchAgainstCurveRule`（ローンチ時チェックをミラー、フェイルクローズ動作を含む）と `checkCurveRuleGroupWritable`（書き込み時検証をミラー）を公開しています。どちらも純粋関数です。[送信前に確認](/ja/products/launchlab/curve-rules#check-before-you-send) を参照してください。
* **メインネットで有効にする前に devnet でリハーサルしてください。** `restrict_curve_param` をオンにすると、クリエイターが何をできるかが即座に変わります。推奨シーケンス — 拒否されるべき 1 つのトークンを起動して、ビルダーが本当にルールアカウントを通過することを証明することを含む — は [devnet で最初にテスト](/ja/products/launchlab/curve-rules#test-on-devnet-first) にあります。

## ホワイトリストが表現できなかったことをルールが表現できる

| 意図                             | ホワイトリスト       | 曲線ルール                              |
| ------------------------------ | ------------- | ---------------------------------- |
| 1 つの正確なローンチシェイプ                | 1 エントリ        | `Eq` 制約を持つ 1 グループ                  |
| 範囲内の資金調達目標                     | 表現不可          | 2 つの制約：`Gte` + `Lte`               |
| 3 つのローンチティア                    | 3 エントリ、完全一致のみ | 3 グループ                             |
| 供給量に依存しない卒業評価帯                 | 表現不可          | 導出 `FundRaisingRateB` に対する 2 つの制約  |
| 卒業プールに到達するもののフロア               | 表現不可          | 導出 `MigrateRateA` に対する 1 つの制約      |
| SPL Token のみ、または Token-2022 のみ | 表現不可          | `BaseTokenProgram` に対する 1 つの制約     |
| 「転送手数料が設定されている場合、1% でキャップする」   | 表現不可          | 2 つのグループ、`TransferFeeEnabled` でゲート |
| 日付でスイッチオンするルール、無人              | 表現不可          | 2 つのグループ、`UnixTimestamp` でゲート      |

19 個のフィールドには 4 つの導出レート — `SellRateA`、`LockRate`、`MigrateRateA`、`FundRaisingRateB` — が含まれます。これにより、ルールは 1 つの供給量にピン留めされるのではなく、複数の供給量にわたってポータブルになります。

## 委任管理

`PlatformConfig.curve_rule_manager` は、このプラットフォームのルールアカウントを作成、更新、削除、および閉じることができるホットウォレットです。ルールの編集は日常的であり、プラットフォーム管理者キーは通常マルチシグです；これはマルチシグをループから外すフィールドです。`UpdatePlatformConfig::CurveRuleManager` を通じて 1 回設定してください。

プラットフォーム管理者は並行して同じ権限を保持します — プログラムはシグナーから `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  |

導出制約は直接フィールド読み取りの約 48 に対して約 223 CU のコストがかかります。完全に読み込まれたルールでも、デフォルトの 200 000 CU/命令予算の 3 分の 1 以内に収まります。グループは 1 つがマッチするまで評価されるため、最も使用されるティアが最初に来ます。

## ワンオフ マイグレーション

ホワイトリストを使用していたプラットフォームは、フラグが利用可能になる前に、プロトコルによって 1 回のパスで移行されました。専用の権限は、プラットフォームごとに 1 つのトランザクションを実行し、すべてのレガシーエントリをそれが名前を付けた設定のルールアカウントのチェックグループに変換し、`PlatformConfig` からエントリをクリアし、そのアカウントを 944 バイトに縮小しました。

移行は古いセマンティクスを正確に保持しました：各エントリは 1 つのグループになり、各非センチネルフィールドは 1 つの `Eq` 制約になり、すべてのセンチネルエントリ — すべてのローンチにマッチした — は制約のないグループになり、これもすべてのローンチにマッチします。

移行はルールを書き込みましたが、有効にしませんでした。移行されたプラットフォームは、`restrict_curve_param` を `1` に設定するまで制限されないままでした。移行命令は、レガシーフィールドが読み取られたため、パスが完了した今、プログラムから削除されました。

## 変更されなかったもの

* **`GlobalConfig`。** 同じレイアウト、同じリミット、同じ命令。ルールはそれらのリミットを絞り、それらと一緒にチェックされます；ルールはそれらを広げることはできません。
* **ローンチ命令のアカウントリストと引数。** `InitializeV2` と `InitializeWithToken2022` は同じ固定アカウントと同じ引数を取ります。`remaining_accounts` のみがエントリを獲得し、フラグがオンの間のみです。
* **トレード、卒業、フィー、およびベスティングパス。** 変更なし。
* **`PlatformAllowConfig`。** 変更なし、無関係：プラットフォームのローンチが使用できる*どの設定*かを決定し、ルールは設定内の*どのパラメータ*かを決定します。2 つのフラグは独立しています。
* **エラーコード `6000`～`6023`。** 変更なし、`6020` を含む。
* **`PlatformConfig` のサイズとパディング前オフセット。** 変更なし、既存アカウントは独自の移行を必要としません。

## 更新されたページ

* `products/launchlab/curve-rules` — **新しいページ。** 3 レベルモデル、19 フィールドと 4 演算子テーブル、9 つのプレイブック、曲線タイプ制限、2 つのオフチェーンチェックヘルパー、devnet リハーサルシーケンス、委任管理、レント、ロールアウト順序、およびコンピュートコスト。
* `products/launchlab/platform-config` — 「曲線パラメータホワイトリスト」を「ローンチパラメータルール」に置き換え；`restrict_curve_param`、`curve_rule_manager`、および 78 バイトパディングのレイアウトを更新；更新パステーブル、読み取りパススニペット、およびピットフォールを書き直し。
* `products/launchlab/instructions` — 4 つの命令、それらのアカウント、引数、およびエラーをカバーする新しい「プラットフォームローンチパラメータルール」セクション；インベントリ行を置き換え。
* `products/launchlab/accounts` — `PlatformCurveRule` をインベントリに追加し、完全なレイアウトと可変サイズ警告を含む独自のセクションを与えられました。
* `reference/error-codes` — `6024`～`6030` を文書化；`6018` と `6020` に注釈を付けました。
