Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このページは、ローンチごとのアカウントグラフについて説明しています。PoolState(1 つのローンチのルート状態アカウント)、その 2 つのヴォルト、オーソリティ PDA、およびローンチが決済されるときに取得するポストグラデュエーション参照です。すべてのローンチを制限するプロトコルレベルの設定については、products/launchlab/global-config を参照してください。プラットフォームごとのオーバーレイについては、products/launchlab/platform-config を参照してください。ベスティングアカウント(PoolState の VestingSchedule、受益者ごとの VestingRecord)については、products/launchlab/vesting を参照してください。

アカウント一覧

SDK はこれを raydium.launchpad.getRpcPoolInfo({ poolId }) で読み取ります。これはデコードされた PoolState を返し、バインドされた GlobalConfig が configInfo として付随します(バッチ形式は getRpcPoolsInfo({ poolIdList }))。getLaunchById は存在しません。プール ID 自体は (programId, mintA, mintB) の PDA です — getPdaLaunchpadPoolId。

PoolState

ローンチごとのルート状態。以下のフィールド名はオンチェーン Rust 構造体(states/pool.rs)と一致します。一部の値は読みやすさのために簡略化されています。正確なメモリレイアウトについてはソースを参照してください。
PoolStatus の値(IDL のバリアント名は Fund / Migrate / Trade):
インテグレーター向けフィールド:
  • status — 3 つの値、単調(Fund → Migrate → Trade)。読み取りは常に安全です。書き込みはゲートされます。ClaimVestedToken は Trade を必要とします。
  • real_base、real_quote — 現在のカーブ状態。virtual_base / virtual_quote と組み合わせると、ヴォルトに触れずにスポット価格を計算するのに十分です。bonding-curve を参照してください。
  • total_base_sell vs real_base — UI の「グラデュエーションへの進捗」比率。
  • migrate_type — 新しい初期化には 1(CPSWAP)が必要です。保存された 0 は、CPMM のみの強制が適用される前に作成された既存のローンチに対してのみ意味があります。
  • amm_creator_fee_on — ポストグラデュエーション CPMM プール上で creator_fee_on = OnlyQuoteToken(0)または BothToken(1)を選択します。マイグレーションターゲットを選択しません。creator-fees を参照してください。
  • token_program_flag — ブール値ではなくビットフィールド。Bit0 はベースミント、Bit1 はクォートミント。各々 SPL Token の場合は 0、Token-2022 の場合は 1 です。したがってバイトは 4 つの値を取ります:0(両方レガシー)、1(Token-2022 ベース)、2(Token-2022 クォート)、3(両方 Token-2022)。1 つのミントを読み取るには (token_program_flag >> bit) & 1 を使用します。ベースミントを分類するために全バイトを 0 と比較すると、2 が間違ったプログラムに解決されます。Bit1 は Token-2022 クォートミントがサポートされるまで定数 0 でした。
  • quote_protocol_fee / platform_fee / migrate_fee — 3 つの独立した手数料カウンター。各々に独自のクレーム命令があります。instructions を参照してください。
  • vesting_schedule — すべての PoolState に存在しますが、total_locked_amount == 0 の場合は非アクティブです。完全なライフサイクルについては vesting を参照してください。

オーソリティ PDA

LaunchLab は、ローンチごとのシードなしで、すべてのローンチ全体で単一のオーソリティ PDA を使用します:
その単一 PDA は:
  • すべてのローンチの base_vault および quote_vault のオーソリティ。
  • base_mint 上には何もありません。ミントオーソリティは InitializeV2 が返される前に取り消されます(以下を参照)。
  • CPMM グラデュエーション CPI の署名者、および既存の状態に対するレガシー AMM v4 グラデュエーション。
  • ClaimVestedToken がベースヴォルトから転送する際の署名者。
  • Token-2022 ベースミントの TransferFeeConfig の transfer_fee_config_authority。グラデュエーション前の全フェーズ。および withdraw_withheld_authority も、ただしプラットフォームが PlatformConfig.transfer_fee_extension_auth を設定しなかった場合のみ。
mint_authority は初期化命令で取り消されます。グラデュエーション時ではなく:InitializeV2 および InitializeWithToken2022 は完全な供給を base_vault にミントしてから、同じ命令で MintTokens を None に設定します。したがって供給はローンチが存在する瞬間から固定され、マイグレーションにはミントオーソリティステップがありません。副作用:誰もベースミントに署名できないため、その家賃は CollectExcessLamports で回収できません。 2 つの追加 PDA が手数料ヴォルトをゲートします:
これらは ClaimCreatorFee および ClaimPlatformFeeFromVault 中に対応する手数料ヴォルトから転送する際に署名します。

ベースミント

Initialize によってインラインで作成されます:
  • mint_authority = authority(グラデュエーション時に取り消し)。
  • freeze_authority = None。
  • supply = supply。完全に base_vault にミントされます。
  • decimals は Initialize でクリエーターによって選択されます(一般的には 6)。
完全な供給が事前にミントされるため、base_mint.supply はローンチの全期間にわたって定数です。カーブの買いはトークンを base_vault から買い手に移動しますが、mint_to を呼び出しません。 Initialize / InitializeV2 は SPL Token ベースミントを作成します。専用の InitializeWithToken2022 命令により、ベースミントを Token-2022 ミント(オプションの TransferFeeConfig 付き)にできます。3 つの初期化パスすべてが CPMM グラデュエーションを必要とします。 InitializeWithToken2022 が TransferFeeConfig をアタッチする場合、ミントは transfer_fee_config_authority = authority および withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth で作成され、プラットフォームがそのフィールドを設定していない場合は authority にフォールバックします。両方のオーソリティはグラデュエーション時にプラットフォームキーに再割り当てされます。引き出し側は PDA がまだ保有している場合のみです。platform-config を参照してください。 クォートミントはベースミントから独立しており、それ自体が Token-2022 ミントである可能性があります。InitializeV2 および InitializeWithToken2022 はクォートプログラムスロットでどちらのプログラムも受け入れます。非推奨の Initialize はそうではありません。そのクォートプログラムアカウントは依然として SPL Token に型付けされているため、クォートミントが Token-2022 である設定は他の 2 つを通じてのみ起動できます。クォートミントは LaunchLab によって作成されることはありません。GlobalConfig.quote_mint が指定するものです。global-config および reference/token-2022-support を参照してください。

ヴォルト

base_vault と quote_vault の両方は LaunchLab authority PDA によって所有されるトークンアカウントで、各々は独自のミントを所有するプログラムで作成されます。したがってローンチはレガシーベースヴォルトと Token-2022 クォートヴォルト、または他の任意の組み合わせを持つことができます。token_program_flag はどちらがどちらかを記録します。アドレスは PoolState に保存され、また導出することもできます:
(本番環境での導出に依存する前に、ソースの Initialize アカウント構造体から正確なシードプレフィックスを確認してください。)

手数料ヴォルト

2 つの PDA がローンチ全体の手数料を集約します:
  • クリエーター手数料ヴォルト — シード [creator, quote_mint] の PDA。同じクォートミント上で同じクリエーター手数料を獲得するすべてのローンチは同じヴォルトに流れ込みます。クリエーターは ClaimCreatorFee を介してスイープします。
  • プラットフォーム手数料ヴォルト — シード [platform_config, quote_mint] の PDA。同じプラットフォームを通じてルーティングされ、同じクォートミントを使用するすべてのローンチは同じヴォルトに流れ込みます。プラットフォームの platform_fee_wallet は ClaimPlatformFeeFromVault を介してスイープします。また、ローンチごとのスイープバリアント(ClaimPlatformFee)もあり、集約ヴォルトを経由せずにローンチの quote_vault から直接プルします。
両方は手数料を発生させる最初のスワップで遅延作成され、クォートミントを所有するプログラムで作成されます。クリエーターまたはプラットフォームがレガシーと Token-2022 クォートミントの両方に対してローンチを実行する場合、2 つの異なるレガシーミントの場合と同様に、ミントごとに 1 つのヴォルトで終わります。 集約ヴォルトパターンにより、高ボリュームのクリエーターまたはプラットフォームは、多くのローンチ全体で手数料蓄積の家賃コストを償却できます。

クォートヴォルト ↔ real_quote

quote_vault.balance と PoolState.real_quote は同期を保つ必要があります。3 つの保留中の手数料カウンター(quote_protocol_fee、platform_fee、migrate_fee)の合計によって最大でドリフトできます。これらはヴォルトに存在しますが、手数料カウンターに属し、カーブリザーブには属しません。カーブ数学は常に real_quote を使用し、生のヴォルト残高は使用しません。 グラデュエーション前の不変式:

PlatformCurveRule

(PlatformConfig, GlobalConfig) ペアごとに 1 つのアカウント。そのプラットフォームがその設定で許可するローンチ形状を保有します。PDA シードは [b"platform_curve_rule", platform_config, global_config] です。
アカウントはグループなしで作成され、グループ変更のたびにリサイズされるため、その長さは 150 + Σ(14 + 18 × constraints) で、デコーダーは固定サイズを想定してはいけません。グループは OR されます。1 つのグループの制約がすべて成立するとすぐにローンチが許可されます。ゼログループは制限がないことを意味します。 所有する PlatformConfig.restrict_curve_param が 1 の場合にのみ読み取ります。0 の場合、プログラムはアカウントを無視し、古いルールがそこに存在する可能性があります。フィールド ID、オペレーター、およびプレイブックは products/launchlab/curve-rules にあります。

ライフサイクルアカウント遷移

次のステップ

ソース:
  • raydium-launch/programs/launchpad/src/states/pool.rs — PoolState、PoolStatus、VestingSchedule、AmmCreatorFeeOn。
  • raydium-launch/programs/launchpad/src/lib.rs — PDA シード定数(AUTH_SEED、CREATOR_FEE_VAULT_AUTH_SEED、PLATFORM_FEE_VAULT_AUTH_SEED)。
  • Raydium SDK v2 launchpad モジュール。