Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このエントリは、今後の LaunchLab プログラムアップデートについて説明しています。デプロイ前にローカルリリースブランチに対して検証されました。新しいアカウントまたは命令に依存する前に、デプロイされたプログラムを確認してください。
プラットフォームは既に PlatformConfig.curve_params を通じて、クリエイターが選択できるローンチシェイプを制限することができました。そのメカニズムは完全一致のみをテストしていました:エントリはフィールドを 1 つの値にピン留めするか、センチネル値でワイルドカード化するかのいずれかです。また、プラットフォームがサポートするすべての GlobalConfig にわたって最大 10 エントリを保持でき、PlatformConfig アカウント自体に存在していたため、エントリあたり 491 バイト増加していました。 これら 3 つの特性は、プロトコルが設定を追加するにつれて衝突しました。「50~200 SOL の資金調達目標」を表現するには、許可された値ごとに 1 つのエントリが必要であり、したがって不可能でした。一方、GlobalConfig 自体のフロアは広く開かれていました — 1 bps レート、99999 供給量の上限 — すべてのプラットフォームがそれらの下に収まるようにするためであり、プラットフォームはそれらを絞る方法がありませんでした。 このリリースはホワイトリストを曲線ルールに置き換えます:(プラットフォーム、設定) ペアごとに 1 つの PlatformCurveRule アカウント、最大 10 個のチェックグループを保持し、各グループは 19 個のローンチパラメータに対して最大 25 個の (フィールド、演算子、値) 制約を保持し、EqGteLte、および Neq を使用します。グループ内の制約は AND で結合され、グループは OR で結合されます。範囲は同じフィールドに対する GteLte です。 完全なモデルと 9 つの実装例は新しいページにあります:products/launchlab/curve-rules

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

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

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

19 個のフィールドには 4 つの導出レート — SellRateALockRateMigrateRateAFundRaisingRateB — が含まれます。これにより、ルールは 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_param1 に設定するまで制限されないままでした。移行命令は、レガシーフィールドが読み取られたため、パスが完了した今、プログラムから削除されました。

変更されなかったもの

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

更新されたページ

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