このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
LaunchLab は厳選された命令セットを公開しています:6 つのユーザー向けコール、および複数の管理プリミティブです。SDK はすべてをラップしていますが、このページは集約者、監視ツール、および CPI が必要なプログラム向けの生のサーフェスをドキュメント化しています。2026-09 プログラムアップグレードは LaunchLab を Anchor 1.0.2 / Solana 3.1.10 上に再構築し、3 つの遷移メカニズムをクリアしました:非推奨の
Initialize は常に失敗するようになり、MigrateToAmm は 3 つの引数とすべての OpenBook アカウントを失い、複数のチェックをクロックに条件付けていた get_upgrade_timestamp ゲートは削除されました。また、1 つの管理命令 CollectExcessLamports が追加されました。2026-09-09 チェンジログエントリを参照してください。命令インベントリ
「ExactIn/ExactOut」の分割は CPMM の
SwapBaseInput / SwapBaseOutput をミラーします — オンチェーンでは、わずかに異なるラウンディングを持つ別の命令ディスクリミネータです。
卒業パス選択。 すべての新しい InitializeV2 と InitializeWithToken2022 コールは migrate_type = 1(CPSWAP)を設定する必要があります。新しい AMM v4 バウンドプールを初期化しようとする試みは MigrateTypeNotMatch を返します。amm_creator_fee_on は、結果の CPMM 作成者手数料がクォートトークンに適用されるか両方のトークンに適用されるかのみを選択します。ターゲットプログラムを選択しません。レガシー Initialize はもはやローンチを作成できません(下記を参照)。
MigrateToAmm は、この制限の前に migrate_type = 0 で初期化された既存の PoolState に対して呼び出し可能なままです。リリースは既存のプール状態を書き直したり、レガシー命令を削除したりしません。
クォート側トークンプログラム。 クォートミントは SPL Token プログラムまたは Token-2022 のいずれかが所有できます。それに触れるすべての命令 — CreateConfig、InitializeV2、InitializeWithToken2022、4 つのトレード命令すべて、CollectFee、CollectMigrateFee、ClaimCreatorFee、ClaimPlatformFee、および ClaimPlatformFeeFromVault — は、そのクォートプログラムアカウントスロットで所有プログラムを取ります。アカウント位置は変わりませんでした。受け入れられた値のみが変わりました。実際に GlobalConfig.quote_mint を所有するプログラムを渡してください。これは既存のローンチの場合 PoolState.token_program_flag bit1 から読み取ることができます(accountsを参照)、またはそれ以外の場合はミントアカウントの所有者から読み取ることができます。
非推奨の Initialize はここでは無関係です:そのクォートプログラムアカウントは依然として SPL Token に型付けされており、2026-09 アップグレード以降、命令はアカウントを読み取る前に失敗します。InitializeV2 または InitializeWithToken2022 を通じてローンチしてください。
MigrateToCpswap はもう一つの例外で、反対方向です — ミントごとに 1 つではなく、両方のプログラムを無条件に取ります。下記のマイグレーションアカウントを参照してください。
Initialize
新しいローンチを作成します。InitializeV2 は廃止された Initialize に対して amm_fee_on 引数のみを追加します。アカウント数と順序は同じで、唯一のアカウント レベルの違いは quote_token_program が Interface<TokenInterface> として型付けされているため、Token-2022 クォート ミントが受け入れられることです。
引数
1 つの構造体ではなく、4 つの位置引数。(InitializeWithToken2022 は 5 番目の transfer_fee_extension_param: Option<TransferFeeExtensionParams> を追加します。廃止された Initialize は amm_fee_on を削除します。)
global_config.curve_type と一致する必要があります。一致しない場合、インストラクションは InputNotMatchCurveConfig(6003)で失敗します。open_time はなく、quote_mint 引数もありません(global_config から取得)。fees 構造体や post_graduation_lp_policy もありません — LP 処分は PlatformConfig で設定され、ローンチごとではありません。
アカウント — 合計 18 個(宣言された 16 個に加えて #[event_cpi] が追加する 2 個)
前提条件
quote_mint ∈ launch_config.allowed_quote_mints。base_supply_graduation ≤ base_supply_max。- フィー パラメーターが
launch_config.max_*_fee_rateチェックに合格。 open_time ≥ now − slop(SDK は≥ nowを強制。プログラムは軽微なバックデーティングを許容)。curve_typeが認識される。
base_mintはsupply = curve_param.supplyを持ち、すべてbase_vaultに存在。- ミント権限はこのインストラクション内で失効します(
set_authority(MintTokens, None))。供給がミントされた直後 — 卒業時ではなく。したがって、ベース ミントは永続的に固定供給であり、後続のインストラクションでさらにミントすることはできません。 PoolStateはstatus = Fund(0)、real_a = 0、real_b = 0で初期化。total_fund_raising_bはcurve_param.total_quote_fund_raisingから直接取得。TransferFeeConfigが付属するInitializeWithToken2022の場合:transfer_fee_config_authority = launch_authority、withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth(そのフィールドが設定されている場合)、それ以外はlaunch_authority。引き出し側はミント作成時に書き込まれるため、プラットフォームは卒業前に源泉徴収フィーをスイープできます。platform-configを参照。
NotApproved(6000、廃止された Initialize の場合は無条件)、InvalidInput(6002、GlobalConfig からの供給/レート/ファンドレイジング フロアが違反)、InputNotMatchCurveConfig(6003、curve_param バリアントが global_config.curve_type と一致しない)、MigrateTypeNotMatch(6007、migrate_type != 1)、MathOverflow(6008)、VestingRatioTooHigh(6010)、NoSupportExtension(6017)、NotEnoughRemainingAccounts(6018)、InvalidPlatformAllowConfig(6022)、CurveParamNotMatchPlatformRule(6025)。失敗した Anchor address = / constraint = チェックは、これらのいずれかではなく 2xxx コードとして表示されます — InvalidQuoteMint、FeeRateTooHigh、InvalidCurveParams はプログラムのエラー列挙型に存在しません。
Buy(正規バリアント:BuyExactIn)
ユーザーが固定入力額を提供します。カーブが出力を計算します。
引数
残りのアカウント — フィー配管。この正確な順序で読み込まれます:
share_fee_receiver—share_fee_rate > 0の場合のみ。system_program— 常に。== System::id()をチェック。そうでない場合はInvalidInput。platform_fee_vault— PDA[platform_config, quote_token_mint]。初回使用時に作成。creator_fee_vault— PDA[creator, quote_token_mint]。初回使用時に作成。
NotEnoughRemainingAccounts(6018)を返します。associated_token_program スロットはなく、system_program は宣言されたアカウントではなく残りのアカウントです。
前提条件
launch_state.status == Active。now ≥ open_time。user_quote_ata.balance ≥ quote_in。quote_in > 0。
quote_inをフィー部分とquote_in_after_feeに分割。- ポスト フィー クォートが与えられた場合、カーブに対して Newton 法で
base_outを解く。 require(base_out ≥ minimum_base_out)。そうでない場合はExceededSlippageで失敗。quote_inをユーザー → ボルトに移動。base_outをボルト → ユーザーに移動。base_sold += base_out、quote_reserve_real += quote_in_after_fee × (lp_share / total_share)を更新。- フィー カウンター(
protocol_fees_quote、creator_fees_quote)を更新。 state_data.num_buys += 1。- 更新後に
quote_reserve_real ≥ quote_reserve_targetの場合、SDK は通常、同じトランザクション内でGraduateix をチェーンします。プログラムはBuy内で自動卒業しません — 後続のGraduateが必要です。
BuyExactOut
ユーザーが正確な base_out を指定します。プログラムが quote_in を計算します。
引数
BuyExactIn と同じアカウントと同じ残りアカウント契約。Newton 反復ではなく、閉形式の二次積分(または CPMM 逆関数、curve_type 1 の場合)を使用します。
Sell / SellExactIn / SellExactOut
Buy のミラー。ユーザーは base_in をカーブに返却し、quote_out を受け取ります。フィーは quote_out から差し引かれるため、ユーザーが受け取る額は生の統合収益より少なくなります。
前提条件 —
user_base_ata.balance ≥ base_in。- 売却により
base_soldが 0 未満にならない(会計が一貫している場合、上記と冗長)。 - ローンチが
Active状態。
Buy と対称。base_sold が減少し、quote_reserve_real が減少します。フィーは引き続き発生します。
クォート側の転送フィー
クォート・ミントがTransferFeeConfig を持つ場合、ヴォルトが移動する額と支払者が請求または貸方に記入される額が異なり、スリッページ境界は支払者側に対してチェックされます。拡張機能のないクォート・ミントでは、以下のすべてのケースは通常のレガシー・ミントと同じです。
クォーティングの 2 つの結果:
- ミントがフィーなしであるかのように計算された境界は拒否されます。フィーなしのコストを
maximum_amount_inとして、またはフィーなしの収益をminimum_amount_outとして渡すと、ExceededSlippageで戻ります。 real_quoteはヴォルトに到達した額だけ進みます。5% クォート・ミント上のamount_inのBuyExactInはamount_in × 0.95だけreal_quoteを移動させます。
10000 ベーシス・ポイント)は反転できず、正確な出力パスで CalculateOverflow で戻ります。
両方のトレード側ミントも、マッチングスロットで渡されたプログラムに制限されるため、一致しない base_token_program は無視されるのではなく失敗するようになりました。基礎となるフィー計算については、algorithms/token-2022-transfer-fees を参照してください。
トレード残りアカウント
4 つのトレード・インストラクションはすべて、remaining_accounts を通じてフィー配管を取得し、この順序で行われます:
2026-09 で変更:最後の 3 つは無条件になり、
system_program が検証されるようになりました。 このリリース前は、プログラムは unix_timestamp >= get_upgrade_timestamp() の場合にのみこれらを読み取り、その時点の前にプラットフォーム/クリエイター・フィー分割をスキップしていました。タイムスタンプは遠い過去なので、メインネット上の動作は実際には変わっていません — しかしブランチはコードから削除され、3 つのアカウントをまだ省略するビルダーは、カットオーバー後のみではなく常に NotEnoughRemainingAccounts (6018) で失敗するようになりました。system_program スロットは追加で System::id() に対してチェックされ、他のものが含まれている場合は InvalidInput (6002) を返します。以前は任意のアカウントがその位置で受け入れられていました。MigrateToAmm / MigrateToCpswap
カーブが total_quote_fund_raising に到達した後、ローンチを取引可能なプールに昇格させます。新しいローンチは CPMM のみです。MigrateToAmm は、保存された migrate_type が 0 である既存プール用に保持されています。
署名者
MigrateToAmm— バインディングGlobalConfigに記録されたmigrate_to_amm_wallet。MigrateToCpswap— バインディングGlobalConfigに記録されたmigrate_to_cpswap_wallet。
pool_state.status == Migrateを検証します(つまり、quote_reserve_targetに到達しています)。そうでない場合はPoolMigrated(ステータスは既にMigrated)またはPoolFunding(まだ資金調達中)で戻ります。pool_state.migrate_typeが命令と一致することを検証します(AMM の場合は0、CPMM の場合は1)。そうでない場合はMigrateTypeNotMatchで戻ります。- 昇格後のリザーブを計算します:
base_amount_out = base_vault.amount − vesting_schedule.total_locked_amountquote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
- ターゲットプログラム(
AMM v4 Initialize2またはCPMM InitializeWithPermission)に CPI して、これらのリザーブで昇格後のプールを作成します。 - 2026-08-17 アップグレード後に実行された CPMM マイグレーションの場合、
platform_scale + creator_scaleをプラットフォーム所有のロック LP シェアに統合し、最大 1 つの Fee Key NFT をplatform_nft_walletにミントします。burn_scaleの残りを焼却します。アップグレード前は、creator_scaleは別々にロックされ、その Fee Key はトークン作成者に送られました。完了した過去のマイグレーションは変更されません。レガシー AMM v4 昇格の場合、LP の配置はその命令の既存フローに従います。 - (ミント権限ステップなし。
base_mint.mint_authorityは既にローンチ作成時にNoneに設定されています — 以下の注記を参照してください。) pool_state.status = Migratedに切り替え、vesting_schedule.start_time = block_time + cliff_periodを設定します。
TransferFeeConfig を持つ Token-2022 ミントかつ PlatformConfig.transfer_fee_extension_auth がデフォルト以外の場合、マイグレーションはその拡張機能の権限をプラットフォームキーに再割り当てします:
transfer_fee_config_authorityは常に再割り当てされます。ローンチauthorityPDA は昇格前フェーズ全体でそれを保持しているため、常に移動するものがあります。WithheldWithdrawは**authorityPDA がそれを保持している場合のみ**再割り当てされます。2026-08-27 以降に作成されたローンチは、ミント作成時にその権限に既にtransfer_fee_extension_authを持っているため、ステップはスキップされます。ガードは、マイグレーションがこれらのミントで戻るのを防ぐものです — PDA は保持していない権限を署名で放棄することはできません。
transfer_fee_extension_auth が Pubkey::default() の場合、どちらの権限も移動せず、両方とも authority PDA に永続的に留まります。platform-config を参照してください。
ベースミントの供給量は昇格時ではなく、作成時から固定されています。
InitializeV2 と InitializeWithToken2022 は供給量全体をベースボールトにミントし、同じ命令で直ちに MintTokens を取り消すため、base_mint.mint_authority はローンチの全期間 None です。マイグレーションはそれに触れません。(このページの以前のリビジョンは取り消しを昇格時に配置していました。それは間違っていました。)マイグレーションが移動できる唯一の権限は、以下で説明する Token-2022 転送手数料のものです。BuyExactIn、BuyExactOut、SellExactIn、SellExactOut はこの時点から PoolMigrated で拒否されます。結果の AMM プールは正規であり、他の AMM v4 / CPMM プールのように取引されます。
一般的なエラー — PoolFunding、PoolMigrated、MigrateTypeNotMatch、InvalidCpSwapConfig、MathOverflow。
CPMM マイグレーション残りアカウント
MigrateToCpswap をビルドするクライアントは、これらの固定 remaining_accounts インデックスを使用する必要があります:
命令は最低 10 個の残りアカウントが必要です。サポートミントアカウントは読み取り専用 CPI 入力です。ミントが初期化されたサポートレコードを持たない場合でも、両方のアドレスを派生させます。クリエーターロックアカウントを追加し続けるか、インデックス 8–9 を省略する古いビルダーは更新する必要があります。
2026-09 で変更。 2 つのクリーンアップ。どちらも正しいビルダーを変更しません:
- パーミッション CPMM パスが唯一のパスになりました。
MigrateToCpswapはunix_timestamp >= get_upgrade_timestamp()に基づいてInitializeCpSwapとInitializeCpSwapWithPermissionの間で選択していました。タイムスタンプヘルパーとレガシー CPI の両方が削除されたため、パーミッション付きパス — したがって 10 アカウント最小 — が無条件に適用されます。 - 3 つのアドレス制約がアカウント構造体から命令本体に移動しました。
platform_config、base_vault、およびquote_vaultは依然としてPoolStateに保存された値と一致する必要がありますが、不一致は Anchor のaddress =制約ではなくrequire_keys_eq!によって発生します。チェックは同等です。エラーサーフェスのみが異なります — これら 3 つのアカウントに対してConstraintAddress(2012)の代わりに Anchor の汎用RequireKeysEqViolated(2502)を取得し、アカウント名なしで報告されます。これら 3 つのアカウントに対して2012にマッチするエラーハンドリングを更新します。
CPMM マイグレーショントークンプログラム
MigrateToCpswap は両方のトークンプログラムを無条件に取得し、各ミントを所有するプログラムを自身で判定します。その 2 つのトークンプログラムアカウントは相応に名前が変更されました:
これらは、以前の
base_token_program(ベースミントを所有していたプログラム)と quote_token_program(常にレガシー)に置き換わります。位置は変わらないため、これはレイアウト変更ではなく値の変更です — ただし、2 つの値はほぼ逆転しており、古いペアを渡し続けるビルダーは、いずれかのミントが Token-2022 ミントになるとすぐに、レガシープログラムが必要な場所に Token-2022 を提供します。
レガシープログラムは、どちらのミントも使用しない場合でも必要です。CPMM LP ミントとロック流動性 Fee Key NFT は常にそこに存在するためです。
プラットフォーム GlobalConfig 許可リスト
PlatformConfig.restrict_global_config がチェックを制御します:
0:プラットフォームは、その他の有効なGlobalConfigを受け入れます。許可アカウントは必要ありません。1:Initialize、InitializeV2、およびInitializeWithToken2022は、remaining_accountsのどこかに一致するPlatformAllowConfigを含める必要があります。
CreatePlatformAllowConfig と ClosePlatformAllowConfig で PDA を作成または閉じます。そのシードは [b"platform_allow_config", platform_config, global_config] です。以前の管理者管理の PlatformGlobalAccess 命令と PDA は廃止されました。
プラットフォームローンチパラメータルール
4 つの命令が 1 つのPlatformCurveRule アカウントを管理します。4 つすべてが PlatformConfig.curve_rule_manager またはプラットフォーム管理者によって署名されます — プログラムは署名者から PlatformConfig PDA を再派生することで管理者を受け入れるため、それを証明する別のアカウントはありません。どちらでもない署名者は InvalidCurveRuleAuthority を返します。
platform_curve_rule は [b"platform_curve_rule", platform_config, global_config] の PDA です。
Createはグループを保持しないアカウントを割り当てます。その状態は何も制限しません。Updateはそのgroup_idでグループをアップサート(存在する場合は全体的に置き換え)します。アカウントをサイズ変更するため、署名者は成長するレント分を補充し、縮小するレント分を返金として受け取ります。10 番目を超える新しいグループはCurveRuleGroupsExceededを返します。25 を超える制約、未知のフィールドまたはオペレータ、または 1 つのグループ内で同じ(field, op)ペアが 2 回はInvalidCurveRuleConstraintを返します。非定数積設定の 4 つのTotalSellA派生フィールドはCurveRuleFieldNotSupportedByCurveを返します。Removeは ID でグループを削除し、アカウントを縮小して差分を払い戻します。未知の ID はCurveRuleGroupNotExistを返します。Closeはレント全体を署名者に返します。その後、restrict_curve_paramが1のままでも、設定は再び制限されません。
UpdatePlatformConfig::RestrictCurveParam(0 | 1) であり、プラットフォーム管理者のみが呼び出すことができます。
ローンチパス上。 restrict_curve_param が 1 の間、InitializeV2 と InitializeWithToken2022 は remaining_accounts にルール PDA を必要とします — それが存在しない場合でも、それを省略してチェックをスキップできないようにするためです。不足しているアカウントは NotEnoughRemainingAccounts です。グループを満たさないローンチは CurveParamNotMatchPlatformRule です。チェックは GlobalConfig 独自の制限の前に実行され、それらのみを狭めることができます。モデルとプレイブック:products/launchlab/curve-rules。両方のエラーはクライアント側で回避可能です — SDK はこのチェックを純粋関数として反映します。送信前にチェック を参照してください。
CollectFee
プロトコルが単一のローンチで蓄積したトレード手数料の管理者による回収。
引数 — なし。
アカウント
効果 —
quote_vault から recipient_token_account に pool_state.quote_protocol_fee を転送し、カウンターをゼロにします。最初の購入後いつでも呼び出し可能です。
CollectMigrateFee
卒業時に蓄積されたマイグレーション手数料の管理者による回収。CollectFee と同じアカウント構造で、署名者として protocol_fee_owner の代わりに migrate_fee_owner を使用し、消費されるカウンターとして pool_state.migrate_fee を使用します。
ClaimCreatorFee
クリエイターが所有するすべてのローンチにわたって蓄積されたクリエイター手数料の、クリエイターごとの回収。同じクォートミントを使用します。プール単位のフィーヴォルトではなく、クリエイター単位のフィーヴォルトを消費します。
引数 — なし。
アカウント
効果 —
creator_fee_vault の全残高を recipient_token_account に転送します。ヴォルトが空の場合、ゼロより大きいことを要求するチェックで戻ります。
ClaimPlatformFee
ローンチのクォートヴォルトを直接消費するプラットフォーム単位の回収。プラットフォームが集約されたプラットフォームヴォルトを経由せずに、特定の1つのローンチのスライスを要求したい場合に使用します。
引数 — なし。
アカウント
効果 —
quote_vault から recipient_token_account に pool_state.platform_fee を転送し、カウンターをゼロにします。
ClaimPlatformFeeFromVault
プラットフォーム単位の集約回収。プラットフォームを経由してルーティングされたすべてのローンチからの手数料を蓄積する、プラットフォームのクォートミント単位のフィーヴォルトを消費します。
引数 — なし。
アカウント
効果 —
platform_fee_vault の全残高を recipient_token_account に転送します。ヴォルトが空の場合は戻ります。
CollectExcessLamports
LaunchLab が管理するアカウント上のレント免除最小値を超えて存在するラムポートの管理者による回収。2026-09 アップグレードで追加されたもので、プロトコルが SIMD-0437 レント削減 が各ステップの前に作成されたアカウントに残す過剰資金を回収できるようにします。
余剰分のみが移動します。トークン残高、アカウントデータ、所有者、曲線状態、ベスティングは変更されず、アカウントが既に最小値にある場合、命令は何もしません — したがって各ロールアウトステップ後に再実行しても安全です。
引数 — なし。
アカウント
authority の選択
アカウントはチェックなしで渡され、プログラムによって解決されます。プログラムは LaunchLab の3つの権限 PDA すべてを再導出し、マッチングします:
3つのいずれにも一致しないキーは、命令全体を
InvalidOwner(6001)で失敗させます。
各ソースアカウントの処理方法
基本ミントは回収できません。
InitializeV2 と InitializeWithToken2022 は、供給をミントする同じ命令で基本ミント上の MintTokens を取り消すため、どのキーも WithdrawExcessLamports に署名することはできません — ミントのレントは永久にそこに留まります。
一般的なエラー — InvalidOwner(6001、不正な署名者または3つの PDA のいずれでもない authority)、LamportsCalculateError(6031、wSOL ラウンドトリップがゼロにならなかった)、プログラム所有パスからの InsufficientFunds(アカウントが独自のレント最小値より少ない場合)。
SDK ビルダーなし。 @raydium-io/raydium-sdk-v2 はこの命令のビルダーを提供しておらず、raydium-sdk-V2-demo リポジトリも提供していません — これは管理者パスです。手動でエンコードしてください。solana-fundamentals/rent-and-reclaimable-rent のウォレット側スイープがトークンプログラム命令に対して行うのと同じ方法で。
ベスティングおよびプラットフォーム設定命令
これらは専用ページに記載されています。各命令は独自の状態モデルを持つためです:CreateVestingAccount、CreatePlatformVestingAccount、ClaimVestedTokenCreatePlatformConfig、UpdatePlatformConfig、CreatePlatformAllowConfig、ClosePlatformAllowConfigCreatePlatformCurveRule、UpdatePlatformCurveRule、RemovePlatformCurveRule、ClosePlatformCurveRuleCreateConfig、UpdateConfig
状態変化マトリックス
次のステップ
products/launchlab/code-demos— 各命令の TypeScript 例。products/launchlab/accounts— 完全な状態形状。reference/error-codes— LaunchLab エラー列挙。
- Raydium SDK v2
LaunchLabモジュール - Raydium LaunchLab プログラムソース

