> ## 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 — CPMM: Anchor 1.0、エクセスラムポート回収、および固定フィーオーナー

> CPMM は Agave 3.1.10 上の Anchor 1.0.2 に移行し、SIMD-0437 によって解放されたレント用の管理者 CollectExcessLamports 命令を追加します。CreateAmmConfig は署名者の代わりにハードコードされたプロトコルおよびファンドフィーオーナーを書き込むようになり、4 アドレスの Token-2022 ミントホワイトリストが削除され、ClosePermissionPda は専用のグラント権限を受け入れます。エラー 6015 が追加されます。

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

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

<Info>
  このエントリは、今後の CPMM プログラム更新をカバーしています。デプロイ前にローカルリリースブランチに対して検証されました。新しい命令または変更された `CreateAmmConfig` の動作に依存する前に、デプロイされたプログラムを確認してください。
</Info>

CPMM の主な変更はフレームワークの移行です：Anchor `0.32.1` から `=1.0.2` へ、ビルドツールチェーンを Agave 2.3.0 から 3.1.10 へ移行します。これに伴い 4 つの動作変更があります。そのうち 3 つは管理ツールにのみ関係し、1 つ（ミントホワイトリストの削除）は**新しい**プール用に使用できる Token-2022 ミントを変更します。

トレーダー、LP、またはプール作成者が呼び出すすべてのものは、アカウントリスト、引数、および数学を保持します。

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

* **ユーザー向けの命令は変更されていません。** `Initialize`、`InitializeWithPermission`、`Deposit`、`Withdraw`、`SwapBaseInput`、`SwapBaseOutput`、および 4 つの `Collect*Fee` パスはすべてバイト単位で同一です。アカウントレイアウトは変更されていません。
* **1 つの命令が追加されます：`CollectExcessLamports`。** 管理者のみ、引数なし、渡されたアカウントは `remaining_accounts` として渡されます。CPMM 制御のボルト、LP ミント、および PDA からレント免除最小値を超えるラムポートを返し、他には何も触れません。[`products/cpmm/instructions`](/ja/products/cpmm/instructions#collectexcesslamports) を参照してください。
* **1 つのエラーコードが追加されます：`6015` `LamportsCalculateError`。** コード `6000`–`6014` は変更されていません。
* **`CreateAmmConfig` は署名者をフィーオーナーフィールドにコピーしなくなりました。** 新しい設定は、ハードコードされた `protocol_fee_owner` および `fund_fee_owner` キーを取得します。**既存の `AmmConfig` アカウントは変更されません** — アカウントから `protocol_owner` / `fund_owner` を読み取り続けてください。どちらかの値を想定しないでください。
* **ハードコードされた 4 アドレスの Token-2022 `MINT_WHITELIST` は削除されました。** `SupportMintAssociated` PDA レジストリは、拡張機能許可リストのバイパスの CPMM の唯一の方法になりました。既存のプールは影響を受けません。チェックはプール作成時にのみ実行されます。
* **`ClosePermissionPda` は共有管理者だけでなく、専用のパーミッション PDA 作成者権限を受け入れます。**
* **IDL の更新が必要です。** 1 つの新しい命令、1 つの新しいエラーバリアント。
* **TypeScript クライアントパッケージの名前が変更されました。** `@coral-xyz/anchor` は `0.32.1` で固定されています。Anchor 1.x クライアントは `@anchor-lang/core` として公開されます。

## `CollectExcessLamports`

[SIMD-0437](/ja/solana-fundamentals/rent-and-reclaimable-rent) のステップ 1 は 2026 年 9 月 3 日にメインネットに着陸し、レント免除最小値を 9% 削減し、さらに 4 つのステップが続きます。ステップの前に作成されたすべての CPMM プールボルト、LP ミント、`PoolState`、`AmmConfig`、`ObservationState`、`Permission`、および `SupportMintAssociated` アカウントは現在過剰に資金提供されており、プログラム所有のアカウント内のラムポートはそのプログラムによってのみ移動できます。

命令は 4 つの固定アカウント（署名者/宛先ウォレット、`vault_and_lp_mint_auth_seed` 権限 PDA、および**両方の**トークンプログラム）を取得し、その後 `remaining_accounts` に任意の数のソースアカウントを取得します。各ソースアカウントの所有者に基づいてディスパッチします：トークンアカウントまたはミント用のトークンプログラムの `WithdrawExcessLamports`（判別式 `38`）への CPI、CPMM 所有の PDA の直接デビット、その他はサイレントにスキップします。

ラップされた SOL は理解する価値のあるケースです。ネイティブトークンアカウントのラムポート残高は*その*トークン残高であるため、両方のトークンプログラムは 1 つで `WithdrawExcessLamports` を拒否します。代わりに CPMM は `SyncNative` を CPI します（寄付されたエクセスをラップされた `amount` に折り込む）、金額がどれだけ増加したかを測定し、正確にその差分に対して `UnwrapLamports`（判別式 `45`）を実行し、その後ラップされた残高が事前同期値と等しいことを要求します — 等しくない場合は `LamportsCalculateError`。**SOL 側のプールボルトはスイープを通じて完全な流動性を保持し**、LP は 1 つ全体で価格変更を見ません。

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

## `CreateAmmConfig` は固定フィーオーナーを書き込みます

このリリースの前に、`create_amm_config` は両方のフィーオーナーフィールドを呼び出し署名者から設定しました：

```rust theme={null}
amm_config.protocol_owner = ctx.accounts.owner.key();
amm_config.fund_owner      = ctx.accounts.owner.key();
```

これでプログラム自身の定数を書き込みます：

```rust theme={null}
amm_config.protocol_owner = crate::protocol_fee_owner::ID;
amm_config.fund_owner      = crate::fund_fee_owner::ID;
```

`CreateAmmConfig` は `crate::admin::ID` にゲートされているため、実際の効果は、新しく作成されたフィーティアが最初から管理マルチシグの代わりに専用の運用ウォレットによってスイープされ、管理者は `UpdateAmmConfig` パラメータ `3` または `4` を通じてフィールドをローテーションしない限り、作成したばかりの設定から収集することはできません。

2 つの定数は、プログラムの残りのアドレスと同じ devnet/mainnet `cfg` パターンに従い、devnet では両方とも同じキーに解決されます。[`reference/program-addresses`](/ja/reference/program-addresses#cpmm-fee-owner-wallets) を参照してください。

<Warning>
  **これはマイグレーションではありません。** 既に存在するすべての `AmmConfig` は、作成されたときの `protocol_owner` と `fund_owner` を保持します。新しい定数をハードコードし始める収集ツールは古い設定で失敗し、「管理者キー」を想定するツールは新しい設定で失敗します。フィールドを読み取ってください。
</Warning>

## Token-2022 ミントホワイトリストが削除されました

`is_supported_mint` は、ミントの拡張機能を反復する前に、ハードコードされた 4 つのアドレスの `MINT_WHITELIST` でショートサーキットしていました。そのアレイ — および毎回それから構築された `HashSet` — は削除されました。残っているのは：

1. レガシー SPL Token ミントは無条件でパスします。
2. `[b"support_mint", mint]` で初期化された `SupportMintAssociated` PDA を持つミントは無条件でパスします。
3. それ以外の場合、ミント上のすべての拡張機能は `TransferFeeConfig`、`MetadataPointer`、`TokenMetadata`、`InterestBearingConfig`、`ScaledUiAmount` の 1 つである必要があります。

レジストリ PDA はしばらくの間プログラムに含まれており、独自の `CreateSupportMintAssociated` / `CloseSupportMintAssociated` ペアと共有管理者と並んで独自の専用権限を持ち、`Initialize` と `InitializeWithPermission` の両方から参照されます。静的配列を削除することは、ミントのオンボーディングがプログラムアップグレードではなく純粋なオンチェーンアクションになったことを意味します — これが要点です。

**既存のプールは影響を受けません**。ミントチェックはプール作成時にのみ実行されるためです。変わるのは、以前ホワイトリストに登録されていた 4 つのミントの 1 つに対して*新しい* CPMM プールを作成するには、そのミントがレジストリ PDA を持つ必要があることです — 重要なものはメインネットで既に持っています。レジストリが何をするか、何をしないかを含む完全な図は、[`reference/token-2022-support`](/ja/reference/token-2022-support#bypass-paths) にあります。

## `ClosePermissionPda` 署名者の拡大

`CreatePermissionPda` は既に共有管理者または専用のパーミッション PDA 作成者権限のいずれかを受け入れていましたが、`ClosePermissionPda` は `address =` 制約で管理者に固定されていました。クローズパスは同じペアを取得するようになりました：

```rust theme={null}
constraint = (owner.key() == crate::admin::ID
           || owner.key() == crate::create_permission_pda_owner::ID) @ ErrorCode::InvalidOwner
```

したがって、グラントを発行する権限はマルチシグをルーティングせずにそれを取り消すこともできます。不正な署名者のエラーは `InvalidOwner`（`6001`）のいずれかです — 古い `address =` 制約は既にそのカスタムエラーを実行していました — 受け入れられた署名者のセットのみが拡大しました。

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

| 項目                                                                                  | 前                                 | 後                                 |
| ----------------------------------------------------------------------------------- | --------------------------------- | --------------------------------- |
| `anchor-lang` / `anchor-spl`                                                        | `0.32.1`                          | `=1.0.2`                          |
| `Anchor.toml` `solana_version`                                                      | `2.3.0`                           | `3.1.10`                          |
| `solana-sdk` / `-client` / `-account-decoder` / `-transaction-status`（クライアント crate） | `2.3.0`                           | `3.0`                             |
| `anchor-client` / `-lang` / `-spl`（クライアント crate）                                    | `0.32.1`                          | `=1.0.2`                          |
| 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`        |
| Docker イメージ                                                                         | `solanafoundation/anchor:v0.32.1` | `solanafoundation/anchor:v1.0.2`  |
| `@coral-xyz/anchor`                                                                 | `0.32.1`                          | `@anchor-lang/core` `1.0.2` に置き換え |
| `@solana/spl-token`                                                                 | `^0.4.8`                          | `^0.4.14`                         |
| `typescript`                                                                        | `^4.3.5`                          | `^5.6.3`                          |

Anchor 1.0 は、すべての CPI 呼び出しサイトで 2 つのことを変更します。これは、独自のプログラムから CPMM を統合する場合に重要です：`CpiContext::new` はプログラムの `AccountInfo` ではなく `Pubkey` を取得し、`Context` は 4 つのライフタイムパラメータの代わりに 1 つを持ちます。クライアント側では `RequestBuilder::instructions()` は `Result<...>` ではなく `Vec<Instruction>` を返し、`CommitmentConfig` は `solana_sdk` ではなく `anchor_client` から来ます。`spl-associated-token-account` 8.0 はアドレスヘルパーを `::address` の下に移動し、プログラム ID を `::program::ID` に移動しました。[`sdk-api/rust-cpi`](/ja/sdk-api/rust-cpi#cargo-dependencies) を参照してください。

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

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

* **すべてのアカウントレイアウト。** `PoolState`、`AmmConfig`、`ObservationState`、`Permission`、`SupportMintAssociated` — 同じサイズ、同じオフセット。
* **エラーコード `6000`–`6014`。**
* **拡張機能許可リスト自体。** 依然として同じ 5 つの拡張機能。
* **フィーレート、フィー発生、および曲線。** `CollectExcessLamports` は、プールの準備金の一部ではなかったラムポートを移動します。
* **`spl_memo`。** `Withdraw` のメモプログラム制約は `spl_memo::id()` から `anchor_spl::memo::ID` に移動しました — 名前が変更された `anchor-spl` エクスポートの下の同じアドレス。
* **プログラム ID。** 変更されていません。

## 更新されたページ

* `products/cpmm/instructions` — `CollectExcessLamports` がアカウントリストと所有者ごとのディスパッチテーブルで追加されました。`CreateAmmConfig` は `creator_fee_rate` 引数と固定フィーオーナーに関する注記を取得します。`CollectExcessLamports`、`CreateSupportMintAssociated`、`CloseSupportMintAssociated` の命令サマリー行が追加されました。`ClosePermissionPda` 署名者が修正されました。`Initialize` 前提条件がレジストリのみのバイパス用に書き直されました。状態変更マトリックス行が追加されました。
* `products/cpmm/accounts` — Token-2022 セクションがレジストリ PDA の周りに書き直され、ホワイトリスト削除が呼び出されました。`ClosePermissionPda` 署名者が修正されました。
* `products/cpmm/overview` — ホワイトリスト文が書き直されました。
* `products/cpmm/code-demos` — Rust CPI スケルトンが Anchor 1.0 用に更新されました。
* `reference/token-2022-support` — バイパスパスセクションがレジストリ PDA の周りに書き直され、削除された `MINT_WHITELIST` が「削除されたバイパス」セクションに移動されました。
* `reference/error-codes` — `6015` が文書化されました。
* `reference/program-addresses` — 新しい「CPMM サポートミントレジストリ権限」、「CPMM フィーオーナーウォレット」、および「エクセスラムポート収集ウォレット」セクション。`ClosePermissionPda` 注記が修正されました。
* `sdk-api/rust-cpi`、`solana-fundamentals/toolchain`、`integration-guides/cpi-integration` — Anchor 1.0 ピンと CPI マイグレーション注記。
* `solana-fundamentals/rent-and-reclaimable-rent` — 新しい「Raydium プログラムが独自側でスイープするもの」セクション。
