Skip to main content
このページは 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

2026-09 アップグレード以降、実質的に削除されました — この命令は常に失敗します。 initialize のハンドラは、Not supported. Please use initialize_v2 instruction と NotApproved(6000)のログだけです。ディスクリミネータを占有したままにして IDL が安定した形を保つためだけに保持されています。(Accounts 構造体は変わらないため、Anchor の生成された検証は最初に実行されます。トランザクションは関係なく戻ります。)以前は、クロックでゲートされていました:get_upgrade_timestamp カットオーバーの 3 日後まで機能し、その後失敗しました。そのタイムスタンプヘルパーはなくなったため、失敗は無条件になりました。それを通じて作成された既存のローンチは影響を受けません — それらは MigrateToAmm または MigrateToCpswap を通じて正常にトレードおよび卒業します。これは、保存された migrate_type に依存します。以下の引数とアカウントリストは InitializeV2 のものです。非推奨の Initialize は同じ 18 個の アカウントを同じ順序で取り、最初の 3 つの引数のみを取ります — amm_fee_on はありません — そして その quote_token_program スロットは Interface<TokenInterface> ではなく SPL Token 型です。
新しいローンチを作成します。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)

ユーザーは固定の入力額を提供します。カーブが出力を計算します。 引数
アカウント 残りのアカウント — 手数料の配管で、正確にこの順序で読み取られます:
  1. share_fee_receiver — share_fee_rate > 0 の場合 のみ。
  2. system_program — 常に必要。== System::id() がチェックされ、そうでなければ InvalidInput。
  3. platform_fee_vault — PDA [platform_config, quote_token_mint]。初回使用時に作成されます。
  4. 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。
効果
  1. quote_in を quote_in_after_fee と手数料部分に分割します。
  2. ポストフィー クォートが与えられたカーブに対して Newton-solve で base_out を求めます。
  3. require(base_out ≥ minimum_base_out) そうでなければ ExceededSlippage で戻ります。
  4. quote_in ユーザー → ボルトを移動します。base_out ボルト → ユーザーを移動します。
  5. base_sold += base_out、quote_reserve_real += quote_in_after_fee × (lp_share / total_share) を更新します。
  6. 手数料カウンタ(protocol_fees_quote、creator_fees_quote)を更新します。
  7. state_data.num_buys += 1。
  8. 更新後に quote_reserve_real ≥ quote_reserve_target の場合、SDK は通常、同じトランザクション内で Graduate ix をチェーンします。プログラムは 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 を移動します。
100% 手数料クォートミント(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。
これらのウォレットは通常、Raydium が運営する卒業クランクによって保持されます。実際には、卒業は閾値を超えた数秒後に着地し、最終的な買いをトリガーした人に関係なく。 引数 どちらも取りません。
破壊的な変更(マイグレーションウォレットのみ、2026-09)。 MigrateToAmm は 3 つの引数すべてを削除しました — base_lot_size、quote_lot_size、market_vault_signer_nonce — および 9 つのアカウント。その命令データは現在、ベアディスクリミネータのみです。そのため、古いビルダーは 17 バイトの予期しない引数バイトを送信し、もはや整列しないアカウントリストを提供します。これは AMM v4 自体の OpenBook 削除に従います:AMM v4 の Initialize2 はもはや market_program または amm_open_orders を取らないため、LaunchLab は転送するものが何もありませんでした。プログラムも initialize_openbook_market への CPI を停止しました。これは 3 つの引数が設定したものです。削除されたアカウント:openbook_program、request_queue、event_queue、bids、asks、market_vault_signer、market_base_vault、market_quote_vault、および amm_open_orders。market アカウントは位置に留まります — AMM v4 はそれを参照フィールドとして記録します — しかし、それは現在、ベアの #[account(mut)] として宣言されています:所有者、アドレス、またはシード制約なし。それは完全に検証されず、AMM v4 の Initialize2 CPI に直接転送され、プログラムはそれを初期化しません。市場アカウントが実際に初期化された市場であることを望むコーラーは、事前にそれ自体を作成する必要があります。残りの 23 アカウントリストは、順序で:payer、base_mint、quote_mint、market、amm_program、amm_pool、amm_authority、amm_lp_mint、amm_base_vault、amm_quote_vault、amm_target_orders、amm_config、amm_create_fee_destination、authority、pool_state、global_config、base_vault、quote_vault、pool_lp_token、spl_token_program、associated_token_program、system_program、rent_program。MigrateToCpswap は影響を受けません — それは引数を持ったことがありません。
効果(両方に共通)
  1. pool_state.status == Migrate を確認します(つまり、quote_reserve_target に達しました)。そうでない場合は PoolMigrated(ステータスは既に Migrated)または PoolFunding(まだ資金調達中)で戻ります。
  2. pool_state.migrate_type が命令と一致することを確認します(AMM の場合は 0、CPMM の場合は 1)。そうでない場合は MigrateTypeNotMatch で戻ります。
  3. 卒業後の準備金を計算します:
    • base_amount_out = base_vault.amount − vesting_schedule.total_locked_amount
    • quote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
  4. ターゲットプログラム(AMM v4 Initialize2 または CPMM InitializeWithPermission)に CPI して、それらの準備金を使用して卒業後のプールを作成します。
  5. 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 処分はその命令の既存のフローに従います。
  6. (ミント権限ステップなし。base_mint.mint_authority は既にローンチ作成時に None に設定されていました — 下記の注記を参照してください。)
  7. pool_state.status = Migrated をフリップし、vesting_schedule.start_time = block_time + cliff_period を設定します。
Token-2022 転送手数料権限の引き渡し — ベースミントが Token-2022 ミントで TransferFeeConfig を持つかつ PlatformConfig.transfer_fee_extension_auth がデフォルト以外の場合、マイグレーションはその拡張の権限をプラットフォームキーに再割り当てします:
  • transfer_fee_config_authority は常に再割り当てされます。ローンチ authority PDA は卒業前フェーズ全体でそれを保持するため、常に移動するものがあります。
  • WithheldWithdraw は**authority PDA がそれを保持している場合のみ**再割り当てされます。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 のままであっても、その後、制限されなくなります。
4 つのどれもルールが強制されるかどうかを変更しません。それは UpdatePlatformConfig::RestrictCurveParam(0 | 1) です。プラットフォーム管理者のみが呼び出すことができます。 ローンチパス上。 restrict_curve_param が 1 の間、InitializeV2 と InitializeWithToken2022 は remaining_accounts のルール PDA を必要とします — それが存在しない場合でも、それを省略することでチェックをスキップできないようにするため。欠落しているアカウントは NotEnoughRemainingAccounts。ローンチがグループを満たさない場合は CurveParamNotMatchPlatformRule。チェックは GlobalConfig 独自の制限の前に実行され、それらのみを狭めることができます。モデルとプレイブック:products/launchlab/curve-rules。両方のエラーはクライアント側で回避可能です — SDK はこのチェックを純粋な関数としてミラーします。送信前にチェックを参照してください。

CollectFee

単一のローンチでプロトコルの累積トレード手数料の管理者スイープ。 引数 — なし。 アカウント
ここでは quote_mint が recipient_token_account の 前 に来ます — 受取人を先に置く ClaimCreatorFee、ClaimPlatformFee、ClaimPlatformFeeFromVault とは逆です。この 2 つの スロットは Anchor 型が異なる(Mint と TokenAccount)ため、入れ替えると実行時に デシリアライズが失敗し、アカウント誤りのバグのように見えます。CollectMigrateFee は 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)で失敗させます。
ソースアカウントを権限でグループ化します。 1 つの呼び出しは 1 つの authority を持ち、トークンプログラムはアカウントの実際の所有者に署名することを要求します。渡した authority とは異なる 3 つの PDA の 1 つが所有するトークンアカウントは CPI を失敗させ、トランザクション全体を持ち去ります。プールボルト、プラットフォーム手数料ボルト、クリエイター手数料ボルトを別々のトランザクションでスイープします。プログラム所有の PDA は例外です — それらは直接請求されるため、任意の権限と一緒に乗ることができます。
各ソースアカウントの処理方法 ベースミントはスイープできません。 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のウォレット側スイープが行うのと同じ方法で。

ベスティングおよびプラットフォーム設定命令

これらは専用ページで文書化されています。各ページは独自の状態モデルを持つためです:

状態変更マトリックス