このページは 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 ビット 1 から読み取ることができます(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からそのまま来ます。InitializeWithToken2022がTransferFeeConfigを添付している場合: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-solve で
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 反復ではなく、閉じた形の二次積分(または curve_type 1 の場合は CPMM 逆)を使用します。
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% クォートミント上のBuyExactInのamount_inは、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を 1 つのプラットフォーム所有のロック 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 を持つかつ 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 つのアカウントに対して2012にマッチしたエラー処理を更新してください。Anchor の汎用RequireKeysEqViolated(2502)を取得し、アカウント名なしで報告されます。
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は、マッチングPlatformAllowConfigをremaining_accountsの任意の場所に含める必要があります。
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 レント削減が各ステップの前に作成されたアカウントに残す過剰資金を回収できます。
過剰のみが移動します。トークン残高、アカウントデータ、所有者、カーブ状態、ベスティングは変更されず、命令は既に最小値にあるアカウントに対して no-op です — したがって、各ロールアウトステップ後に再実行するのは安全です。
引数 — なし。
アカウント
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

