> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026-09-09 — LaunchLab: Anchor 1.0、余剰ラムポート回収、トランジション・ゲートの廃止

> LaunchLabがAnchor 1.0.2（Agave 3.1.10）に移行し、SIMD-0437で解放されたレント回収用の管理者CollectExcessLamports命令を追加。3つのトランジション機構が廃止：非推奨Initializeは常に失敗、MigrateToAmmは3つの引数と9つのOpenBookアカウントを削除、クロックベースのget_upgrade_timestampゲートを削除。エラー6031を追加。

<Info>
  **このページは AI による自動翻訳です。すべての内容は英語版を正とします。**

  [英語版を表示 →](/reference/changelog/2026-09-09-launchlab-anchor-1-and-excess-lamports)
</Info>

<Info>
  このエントリはLaunchLabプログラムの今後のアップデートについて説明しています。デプロイ前にローカルリリースブランチに対して検証されました。新しい命令または変更された`MigrateToAmm`レイアウトに依存する前に、デプロイされたプログラムを確認してください。
</Info>

これはLaunchLabがトランジション・スキャフォルディングの運用を終了するリリースです。

以前のアップグレードをスムーズに着地させるために、3つの独立した機構が存在していました：`get_upgrade_timestamp`（クロックと比較する複数のチェックが参照するハードコードされたカットオーバー日付）、その日付から3日間機能し続ける非推奨の`Initialize`、およびAMM v4が7月に[独自のOpenBook依存関係を削除](/ja/reference/changelog/2026-07-22-amm-v4-openbook-removal)した後に何も通信するものがなくなった`MigrateToAmm`のOpenBookプラッピング。これら3つはすべて廃止されました。メインネットではカットオーバーは数ヶ月前なので、動作上の影響はありません。ただし、**失敗モード**は変わり、1つのアカウントリストは大きく変わりました。

同時にフレームワークも移行しました：Anchor `0.32.1`から`=1.0.2`へ、Agave 2.3.0から3.1.10へ。また、AMM v4とCPMMと同様に、レント回収用の新しい管理者命令があります。

トレード、手数料、ベスティング、カーブルール、プラットフォーム設定は変更されていません。

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

* **トレード命令のアカウント、引数、計算は変更されていません。** `BuyExactIn`、`BuyExactOut`、`SellExactIn`、`SellExactOut`はバイト単位で同一です。アカウントレイアウトは変更されていません。
* **`Initialize`（非推奨版）は常に`NotApproved`（`6000`）で失敗します。** アカウントを読む前に失敗します。`InitializeV2`を使用してください。既に作成されたローンチは通常通りトレードおよび卒業します。
* **`MigrateToAmm`はマイグレーション・ウォレットに対して破壊的な変更です。** 3つの引数（`base_lot_size`、`quote_lot_size`、`market_vault_signer_nonce`）と9つのアカウントが削除されました。以下を参照してください。
* **3つのトレード`remaining_accounts`は無条件で必須になり、** `system_program`スロットが検証されます。これらを省略するビルダーは、カットオーバー後のみではなく常に`NotEnoughRemainingAccounts`（`6018`）で失敗します。
* **1つの命令が追加されます：`CollectExcessLamports`。** 管理者のみ。[`products/launchlab/instructions`](/ja/products/launchlab/instructions#collectexcesslamports)を参照してください。
* **1つのエラーコードが追加されます：`6031` `LamportsCalculateError`。** コード`6000`～`6030`は変更されていません。
* **3つの`MigrateToCpswap`アドレス制約が命令本体に移動し、** エラーが`ConstraintAddress`（`2012`）から`RequireKeysEqViolated`（`2502`）に変わります。
* **IDLの更新が必要です。** 1つの新しい命令、1つの削除された引数セット、9つの削除されたアカウント、1つの新しいエラーバリアント。

## `MigrateToAmm`はOpenBook部分を失いました

これは何かを壊す可能性が最も高い変更です。古い命令データはディスクリミネータの後に17バイトの引数を含んでいました。新しいデータは裸のディスクリミネータです。古いアカウントリストは構造体に存在しなくなった9つのアカウントを含んでいたため、最初の削除後のすべてがミスアライメントされています。

**削除された引数：** `base_lot_size: u64`、`quote_lot_size: u64`、`market_vault_signer_nonce: u8`。これら3つはすべて、プログラムがCPIで初期化するために使用していたOpenBookマーケットを設定するためにのみ存在していました。そのCPI（`initialize_openbook_market`）は、ノンスを検証した`gen_vault_signer_key`チェックとともに廃止されました。

**削除されたアカウント：** `openbook_program`、`request_queue`、`event_queue`、`bids`、`asks`、`market_vault_signer`、`market_base_vault`、`market_quote_vault`、および`amm_open_orders`。最後のものはAMM v4の`Initialize2`がそれを受け取らなくなったため削除されました。

**`market`アカウントは元の位置に残ります。** AMM v4は依然として`AmmInfo`の参照フィールドとしてマーケットを記録するため、LaunchLabは依然としてそれを転送します。それについて2つのことが変わりました：プログラムはそれを初期化しなくなり、それは現在**完全に検証されていません**。その宣言は所有者、アドレス、またはシード制約のない裸の`#[account(mut)]`です。`owner = openbook_program.key()`は`openbook_program`アカウントとともに削除され、何も置き換わりませんでした。マイグレーション・ウォレットがそこに渡すものは何でも、AMM v4の`Initialize2` CPIに直接転送され、新しいプールに記録されます。そのフィールドの背後に本当に初期化されたマーケットを望む呼び出し元は、事前にそれを作成する必要があり、プログラムはそれ以外を通知しません。

結果として得られる23アカウントリストは、[`products/launchlab/instructions`](/ja/products/launchlab/instructions#migratetoamm-/-migratetocpswap)に完全に記載されています。

`MigrateToCpswap`は影響を受けません。引数を持たず、アカウントリストは変更されていません。

## 非推奨の`Initialize`は常に失敗します

`initialize`は以前、ソフト非推奨を実行していました：`get_upgrade_timestamp() + 3 days`まで機能し、その後`NotApproved`を返しました。タイムスタンプヘルパーが削除されたため、失敗は無条件です。ハンドラーは現在`msg!`と`err!(NotApproved)`のみです。

ログを読んでいる場合の1つの詳細：`Accounts`構造体は変更されず、依然として4つの`init`制約を含んでいるため、Anchorの生成されたアカウント検証プロローグが実行され、ハンドラーが戻る前にそれらのアカウントが作成されます。いずれにしてもトランザクションは戻るため、実際には何も作成されませんが、失敗はアカウント検証の前ではなく後に表示されます。

命令は削除されるのではなく保持されるため、そのディスクリミネータは占有されたままであり、IDLは安定した形状を保ちます。その引数とアカウント定義は、歴史的なトランザクションをデコードするために文書化する価値があり、ページはそれらを警告の背後に保ちます。

## `get_upgrade_timestamp`ゲートは廃止されました

ヘルパーは`local`および`devnet`フィーチャーの下で`0`を返し、それ以外の場合はハードコードされたメインネット・タイムスタンプ`1755522000`（2025-08-18 13:00 UTC）を返しました。4つの命令がクロックと比較し、ソース内で5つの参照にわたります。各参照はカットオーバー後のブランチに無条件になります：

| 呼び出しサイト                               | 前                                                                                                                                  | 後                                                                                              |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `distribute_trade_fee`（すべての4つのトレードパス） | `remaining_accounts`からのみカットオーバー後に`system_program`、`platform_fee_vault`、`creator_fee_vault`を読み取り。カットオーバー前はプラットフォーム/クリエーター手数料分割をスキップ | 常にすべての3つを読み取り、**かつ** `system_program`スロットが`System::id()`と等しいことを要求するか、`InvalidInput`（`6002`）を返す |
| `migrate_to_cpswap`                   | 前は`InitializeCpSwap`、後は`InitializeCpSwapWithPermission`                                                                            | 常に許可されたCPI。レガシー`initialize_cpswap`ヘルパーは削除され、10残りアカウント最小値は無条件                                   |
| `initialize_with_token_2022`          | カットオーバー前に`amm_fee_on == BothToken`が必須。カットオーバー後のみプラットフォーム・カーブルール・チェックを実行                                                            | `amm_fee_on`制限なし。`restrict_curve_param`が設定されている場合、カーブルール・チェックは常に実行                             |
| `initialize`（非推奨）                     | カットオーバー後3日でのみ失敗                                                                                                                    | 常に失敗                                                                                           |

メインネット・タイムスタンプは1年以上前なので、正しく最新のビルダーは動作の変更を見ません。変わったのは、**古い**ビルダーが、devnetビルドに対して機能しているように見えるのではなく、決定論的に失敗するようになったことです。新しい`system_program`検証は本当に新しいものです：そのスロットは以前、任意のアカウントを受け入れていました。

## `CollectExcessLamports`

[SIMD-0437](/ja/solana-fundamentals/rent-and-reclaimable-rent)のステップ1は2026年9月3日にメインネットに着地し、レント免除最小値を9%削減し、さらに4つのステップが続きます。ステップ前に作成されたすべてのLaunchLabプール・ボルト、手数料ボルト、プログラム所有PDAsは現在、過剰に資金提供されています。

命令は4つの固定アカウント（署名者/宛先ウォレット、**1つの**ボルト権限PDA、および両方のトークン・プログラム）を取得し、その後`remaining_accounts`内の任意の数のソース・アカウントを取得します。

`authority`スロットは注意深く読む価値があります。LaunchLabには3つのボルト権限PDA（`vault_auth_seed`、`platform_fee_vault_auth_seed`、`creator_fee_vault_auth_seed`）があり、命令は渡したものを再導出してすべての3つをマッチングして解決します。キーがいずれにも一致しない場合は`InvalidOwner`（`6001`）で失敗します。1つの呼び出しが1つの権限を持ち、トークン・プログラムは各アカウントの実際の所有者に署名することを要求するため、**ソース・アカウントは権限でグループ化する必要があります**。プール・ボルト、プラットフォーム手数料ボルト、クリエーター手数料ボルトは別々のトランザクションで掃引されます。プログラム所有PDAsは直接デビットされ、任意の権限に乗ることができます。

ラップされたSOLはCPMMおよびAMM v4が使用する同じ`SyncNative` → デルタサイズの`UnwrapLamports` → 変更なしアサート・シーケンスに従い、ラウンドトリップがゼロにネットされない場合は`LamportsCalculateError`（`6031`）です。SOL引用ローンチはその完全な引用リザーブを保ちます。

**ベース・ミントは掃引できません。** `InitializeV2`と`InitializeWithToken2022`は、供給をミントする同じ命令で`MintTokens`を取り消すため、ベース・ミントの`WithdrawExcessLamports`に署名できるキーはありません。そのレントは設計上、取り残されています。

署名者は共有プログラム管理者または専用のラムポート収集ウォレットのいずれかです。アドレスは[`reference/program-addresses`](/ja/reference/program-addresses#excess-lamports-collection-wallets)にあります。

## `MigrateToCpswap`制約の再配置

3つのアカウント制約が`Accounts`構造体から命令本体に移動しました：

```rust theme={null}
require_keys_eq!(ctx.accounts.platform_config.key(), ctx.accounts.pool_state.platform_config);
require_keys_eq!(ctx.accounts.base_vault.key(),      ctx.accounts.pool_state.base_vault);
require_keys_eq!(ctx.accounts.quote_vault.key(),     ctx.accounts.pool_state.quote_vault);
```

要件は同じです。すべての3つは依然として`PoolState`に保存されている値と一致する必要があります。エラー表面のみが異なります：Anchorの汎用`RequireKeysEqViolated`（`2502`）、アカウント名なしで報告されるのではなく、`ConstraintAddress`（`2012`）が問題のあるアカウントに名前を付けます。これら3つのアカウントの`2012`に一致するエラー処理を更新してください。

## ツールチェーンと依存関係の変更

| 項目                             | 前                         | 後                                  |
| ------------------------------ | ------------------------- | ---------------------------------- |
| `anchor-lang` / `anchor-spl`   | `0.32.1`                  | `=1.0.2`                           |
| `Anchor.toml` `solana_version` | `2.3.0`                   | `3.1.10`                           |
| README: `rustup default`       | `1.81.0`                  | `1.91.0`                           |
| README: Solanaインストーラー          | `release.anza.xyz/v2.1.0` | `release.anza.xyz/v3.1.10`         |
| README: `avm install`          | `0.31.0`                  | `1.0.2`（プラス`avm use 1.0.2`）        |
| README: Anchorリポジトリ            | `coral-xyz/anchor`        | `solana-foundation/anchor`         |
| `@coral-xyz/anchor`            | `^0.32.1`                 | `@anchor-lang/core` `1.0.2`に置き換え   |
| `@solana/spl-token`            | `^0.4.0`                  | `^0.4.14`                          |
| `typescript`                   | `^4.3.5`                  | `^5.6.3`                           |
| `tsconfig` target / lib        | `es6` / `es2015`          | `ES2020` / `es2020`、`skipLibCheck` |

Anchor 1.0の2つの呼び出しサイト変更もここに適用されます：`Context`は4つのライフタイム・パラメータから1つに縮小され、`CpiContext::new`はプログラムの`AccountInfo`ではなく`Pubkey`を取得します。[`sdk-api/rust-cpi`](/ja/sdk-api/rust-cpi#cargo-dependencies)を参照してください。

オンチェーン効果のない2つのビルド・システムの詳細：`local`フィーチャーは`localnet`に置き換えられ、`LAUNCHPAD_LOCALNET_ADMIN`環境変数から`admin`としてローカル・ウォレットをコンパイルします（`yarn test:local-admin`がそれを配線します）。`programs/launchpad/Cargo.toml`の重複した`[profile.release]`ブロックは削除されました。Cargoはワークスペース・ルート外の`[profile]`を無視するため、ルート・ブロックは既に有効なものでした。プログラム・レベルのブロックの`panic = "abort"`が適用されなかったという事実を含めて。

## 変更されなかったもの

* **すべてのアカウント・レイアウト。** `PoolState`、`GlobalConfig`、`PlatformConfig`、`PlatformCurveRule`、`PlatformAllowConfig`、ベスティング・レコード。同じサイズ、同じオフセット。
* **エラーコード`6000`～`6030`。** 意図的に保持された`6020`を含む。
* **カーブ計算、手数料率、手数料発生、ベスティング・スケジュール、卒業LP分割。**
* **プラットフォーム・カーブルールと`GlobalConfig`許可リスト。** 同じ命令、同じアカウント、同じセマンティクス。カーブルール・チェックの周りのクロック・ゲートのみが廃止されました。
* **`MigrateToCpswap`のアカウント・リストと`remaining_accounts`インデックス。**
* **卒業時のToken-2022転送手数料権限の引き継ぎ。**
* **プログラムID。** 変更されていません。

## 更新されたページ

* `products/launchlab/instructions` — `CollectExcessLamports`がアカウント・リスト、権限解決テーブル、グループ化警告とともに追加。`MigrateToAmm`の引数とアカウント削除が完全な新しいリストとともに記載。`Initialize`が常に失敗する警告とともに前置。新しい「トレード残りアカウント」セクション。無条件の3つのアカウントと`system_program`チェックをカバー。`MigrateToCpswap`の許可のみパスと再配置された制約に関する注記。インベントリと状態変更マトリックス行。
* `products/launchlab/overview` — リリース・バナー。「CPMMのみ」とベース・ミント不変式が修正。
* `products/launchlab/accounts` — ミント権限取り消しタイミングがローンチ作成に修正（卒業時に記載されていました）。`CollectExcessLamports`行が追加。
* `reference/error-codes` — `6031`が記載。
* `reference/program-addresses` — 新しい「余剰ラムポート収集ウォレット」セクション。
* `solana-fundamentals/rent-and-reclaimable-rent` — 新しい「Raydiumプログラムが独自に掃引するもの」セクション。
* `sdk-api/rust-cpi`、`solana-fundamentals/toolchain` — Anchor 1.0ピンとCPI移行ノート。
