このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このエントリは、今後の LaunchLab プログラムアップデートについて説明しています。デプロイ前にローカルリリースブランチに対して検証されました。新しいアカウントまたは命令に依存する前に、デプロイされたプログラムを確認してください。
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。
インテグレーター向け 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。6020CurveParamIsNotExistは、その最後の呼び出し元がなくなったにもかかわらずプレースホルダーとして保持されるため、その後のものはシフトしません。reference/error-codesを参照してください。 - IDL リフレッシュが必要です。 新しいアカウントタイプ、4 つの新しい命令、2 つ削除、2 つの新しいディスパッチバリアント、7 つの新しいエラーコード。
- 何かを送信する前にルールをオフチェーンで確認してください。 SDK は
checkLaunchAgainstCurveRule(ローンチ時チェックをミラー、フェイルクローズ動作を含む)とcheckCurveRuleGroupWritable(書き込み時検証をミラー)を公開しています。どちらも純粋関数です。送信前に確認 を参照してください。 - メインネットで有効にする前に devnet でリハーサルしてください。
restrict_curve_paramをオンにすると、クリエイターが何をできるかが即座に変わります。推奨シーケンス — 拒否されるべき 1 つのトークンを起動して、ビルダーが本当にルールアカウントを通過することを証明することを含む — は devnet で最初にテスト にあります。
ホワイトリストが表現できなかったことをルールが表現できる
19 個のフィールドには 4 つの導出レート —
SellRateA、LockRate、MigrateRateA、FundRaisingRateB — が含まれます。これにより、ルールは 1 つの供給量にピン留めされるのではなく、複数の供給量にわたってポータブルになります。
委任管理
PlatformConfig.curve_rule_manager は、このプラットフォームのルールアカウントを作成、更新、削除、および閉じることができるホットウォレットです。ルールの編集は日常的であり、プラットフォーム管理者キーは通常マルチシグです;これはマルチシグをループから外すフィールドです。UpdatePlatformConfig::CurveRuleManager を通じて 1 回設定してください。
プラットフォーム管理者は並行して同じ権限を保持します — プログラムはシグナーから PlatformConfig PDA を再導出することで受け入れます — したがって、失われたマネージャーキーはフィールドをローテーションすることで回復可能です。Pubkey::default() は管理者のみを意味します。
侵害されたマネージャーキーはパラメータルールを緩和または削除し、ルールアカウントのレントを回収できます。restrict_curve_param をフリップしたり、フィーウォレット、ベスティングフィールド、または CPMM 設定に触れたり、GlobalConfig リミットを破ることはできません。
レントとサイズ
ルールアカウントはグループを保持せずに作成され、変更のたびにリサイズされるため、プラットフォームは実際に書き込んだルールに対してのみ支払い、グループを削除すると差分がシグナーに払い戻されます。
サイズが動的であるため、デコーダーは定数を想定するのではなく、アカウントの実際の長さを読み取る必要があります。
ローンチ時のコンピュート コスト
チェックは有効な間、すべてのローンチで実行されます。エンドツーエンドで測定 — PDA 導出、remaining_accounts スキャン、逆シリアル化、評価:
導出制約は直接フィールド読み取りの約 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に注釈を付けました。

