> ## 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-30 — CLMM: Anchor 1.0、余剰ラムポート回収、固定フィーオーナー

> CLMMがAgave 3.1.10上のAnchor 1.0.2に移行し、SIMD-0437で解放されたレント用の管理者向けCollectExcessLamports命令を追加します。プールごとにプールPDAが署名者として実行されます。CreateAmmConfigは署名者の代わりにハードコードされたプロトコルおよびファンドフィーオーナーを書き込むようになります。エラー6052が追加されます。ユーザー向けの命令またはアカウントレイアウトは変更されていません。

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

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

CLMMは[2026-09-09](/ja/reference/changelog/2026-09-09-cpmm-anchor-1-and-excess-lamports)にCPMMとLaunchLabが配信したのと同じフレームワーク移行を実施します。Anchorは`0.32.1`から`=1.0.2`に、ビルドツールチェーンはAgave 2.3.0から3.1.10に移行します。2つの管理者向け変更が伴います：新しい`CollectExcessLamports`命令と、`CreateAmmConfig`での固定フィーオーナーです。

トレーダー、LP、リミットオーダーユーザー、またはプール作成者が呼び出すすべての命令は、アカウントリスト、引数、数学を保持します。

## 統合者向けTL;DR

* **ユーザー向けの命令は変更されていません。** `CreatePool`、`CreateCustomizablePool`、`CreatePermissionedPool`、すべての`OpenPosition*` / `IncreaseLiquidity*` / `DecreaseLiquidity*`パス、`ClosePosition`、`Swap` / `SwapV2` / `SwapRouterBaseIn`、5つのリミットオーダー命令、報酬命令はワイヤ上でバイト同一です。アカウントレイアウトは変更されていません。
* **1つの命令が追加されます：`CollectExcessLamports`。** これは管理者専用で、引数を取りません。**呼び出しごとに1つのプール**をスイープします：プール自身の`PoolState`は常にスイープされ、プールPDAが`remaining_accounts`で渡すボルトに署名します。`remaining_accounts`内の他のCLMM所有アカウントもスイープされます。[`products/clmm/instructions`](/ja/products/clmm/instructions#collectexcesslamports)を参照してください。
* **1つのエラーコードが追加されます：`6052` `LamportsCalculateError`。** コード`6000`–`6051`は変更されていません。
* **`CreateAmmConfig`は署名者を`owner` / `fund_owner`にコピーしなくなります。** 新しい設定はハードコードされた`protocol_fee_owner`と`fund_fee_owner`キーを取得します。メインネットでは、これらは既存の21個すべての設定に既に保存されている同じ2つのキーです。**既存の`AmmConfig`アカウントは変更されません**ので、フィールドをアカウントから読み取り続けてください。
* **IDLを更新してください。** 1つの命令と1つのエラーバリアントが追加され、39個の命令と53個のエラーになります。
* **CPMMとCLMMを1つのクレートに入れることができるようになりました。** 両方のリポジトリは`chore/upgrade-anchor`ブランチで`anchor-lang` / `anchor-spl` `=1.0.2`をピンしているため、単一のプログラムが両方にCPIできます。[`sdk-api/rust-cpi`](/ja/sdk-api/rust-cpi#cargo-dependencies)を参照してください。
* **TypeScriptクライアントパッケージの名前が変更されました。** テストスイートは`@coral-xyz/anchor` `0.32.1`から`@anchor-lang/core` `1.0.2`に移行します。

## `CollectExcessLamports`

[SIMD-0437](/ja/solana-fundamentals/rent-and-reclaimable-rent)のステップ1は2026年9月3日にメインネットで有効化されました。ステップ前に作成されたすべてのCLMMアカウントは現在過剰資金化されており、CLMMプログラムのみがそれが所有するアカウントからラムポートを移動できます。これはプールボルト、報酬ボルト、`PoolState`、`AmmConfig`、`ObservationState`、`TickArrayBitmapExtension`などをカバーします。

命令は4つの固定アカウントを取り、その後`remaining_accounts`に任意の数のソースアカウントを取ります：

| # | アカウント                            | 役割                                                                                         |
| - | -------------------------------- | ------------------------------------------------------------------------------------------ |
| 1 | `collect_lamports_wallet` (W, S) | 署名者と宛先。共有プログラム管理者または専用CLMM回収ラムポートウォレットである必要があります。そうでない場合、呼び出しは`NotApproved`（`6000`）で失敗します。 |
| 2 | `pool_state` (W)                 | PDAシードを通じてトークンプログラムCPIに署名し、常に自身もスイープされます。                                                  |
| 3 | `token_program`                  | SPLトークン。                                                                                   |
| 4 | `token_program_2022`             | Token-2022。両方が必須です。プログラムはソースアカウントごとに1つを選択します。                                              |

**プールは署名権限であり、プログラム全体のPDAではありません。** CPMMは1つのグローバル`vault_and_lp_mint_auth_seed`権限で署名します。CLMMトークンボルトはそれらの`PoolState`によって所有されるため、単一の呼び出しはスロット2で渡されたプールに対してのみ署名できます。各トークンプログラムソースはそのプールを権限として持つ必要があります：`token_vault_0`、`token_vault_1`、またはプールの報酬ボルトの1つ。別のプールからのトークンアカウント、またはユーザーのトークンアカウントはトークンプログラムの所有者チェックに失敗し、命令全体を元に戻します。プログラムはそれをスキップしません。ポジションNFTミントもスイープできません。ポジションが開かれるとミント権限が取り消されるためです。プールごとにスイープしてください。

命令は2つのパスを実行し、その順序は固定されています：

1. **トークンプログラムCPIが最初。** SPLトークンまたはToken-2022によって所有されるすべてのソースについて、ネイティブ以外のアカウントは`WithdrawExcessLamports`（判別式`38`）を取得します。ネイティブwSOLボルトは`SyncNative` → `UnwrapLamports`（判別式`45`）ラウンドトリップを取得し、ラップされたバランスが同期前の値と等しいことを確認して終了します。そうでない場合、呼び出しは`LamportsCalculateError`で失敗します。**SOL側ボルトは完全なリクイディティを保持し**、スイープ全体でスワップクォートは変わりません。
2. **直接デビットが2番目。** パス2は`pool_state`を最初にデビットし、その後CLMMプログラムによって所有されるすべてのソースを`rent.minimum_balance(data_len)`までデビットします。

他のプログラムによって所有されるソースは静かにスキップされます。この2パス順序はCPMMが[2026-09-19](/ja/reference/changelog/2026-09-19-cpmm-creator-fee-protocol-share)で採用したものです。CLMMはその最初のリリースからこれを持っています。PDAがCPIの前にデビットされた場合、ランタイムは`UnbalancedInstruction`で中止するため、呼び出し元は任意の順序でソースを渡すことができます。

<Warning>
  **プログラム所有パスは、アカウントがどのプールまたはユーザーに属しているかをチェックしません。** CLMMプログラムによって所有されるすべてのアカウントが対象です。ユーザーがレントを支払った一部を含む：`PersonalPositionState`、`LimitOrderState`、`TickArrayState`。レント免除最小値を超える余剰のみが移動します。アカウントはそのデータを保持し、レント免除のままです。ポジションまたはオーダーが後で閉じられるとき、プログラムはアカウントがその時点で保持しているバランスをリファンドします。スイープ後、そのバランスは現在のレント最小値です。
</Warning>

ウォレットアドレスは[`reference/program-addresses`](/ja/reference/program-addresses#excess-lamports-collection-wallets)にリストされています。

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

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

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

現在はプログラム自身の定数を書き込みます：

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

`CreateAmmConfig`は依然として`crate::admin::ID`にゲートされています。このリリース前、すべての新しいフィーティアは両方のフィールドに管理者で開始され、`UpdateAmmConfig`パラメータ`3` / `4`で回転する必要がありました。現在は運用ウォレットで開始されます。メインネットでは定数は既存の21個すべての設定に既に`owner` / `fund_owner`として保存されている同じキーです。プログラムは現在、運用が手動で設定するために使用した値を書き込みます。

回収署名者は変わりません。`CollectProtocolFee`は`amm_config.owner`**または**`crate::admin::ID`を受け入れ、`CollectFundFee`は`amm_config.fund_owner`**または**`crate::admin::ID`を受け入れます。このリリースの前後両方です。

デブネットでは、両方の定数は同じキーに解決されます。[`reference/program-addresses`](/ja/reference/program-addresses#clmm-fee-owner-wallets)を参照してください。

<Warning>
  **これはマイグレーションではありません。** すべての既存の`AmmConfig`は既に持っている`owner`と`fund_owner`を保持します。定数または管理者キーをハードコードするのではなく、フィールドを読み取ってください。
</Warning>

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

| 項目                                                                                | 前                                         | 後                                                                                                    |
| --------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `anchor-lang` / `anchor-spl`（プログラム）                                               | `=0.32.1`                                 | `=1.0.2`                                                                                             |
| `Anchor.toml`ツールチェーン                                                              | `[tool-chain]`、`solana-version = "2.3.0"` | `[toolchain]`、`solana_version = "3.1.10"`                                                            |
| ワークスペース`Cargo.toml`                                                               | —                                         | `[workspace.metadata.cli] solana = "3.1.10"`                                                         |
| `anchor-client` / `anchor-lang`（クライアントクレート）                                       | `0.32.1`                                  | `1.0.2`                                                                                              |
| `solana-sdk` / `-client` / `-account-decoder` / `-transaction-status`（クライアントクレート） | `2.3.0`                                   | `3`                                                                                                  |
| `spl-token` / `spl-token-2022`（クライアントクレート）                                        | `7.0.0` / `7.0.0`                         | `9.0` / `11.0`                                                                                       |
| `spl-associated-token-account` / `spl-memo` / `spl-token-client`（クライアントクレート）      | `6.0.0` / `6.0.0` / `0.14.0`              | `8.0` / `7.0` / `0.19`                                                                               |
| `mpl-token-metadata`（クライアントクレート）                                                  | `5.1.0`                                   | `=5.1.2-alpha.2`                                                                                     |
| 新しいクライアントクレート                                                                     | —                                         | `solana-system-interface` `3.2`、`solana-commitment-config` `3`、`solana-compute-budget-interface` `3` |
| Dockerイメージ                                                                        | `solanafoundation/anchor:v0.32.1`         | `solanafoundation/anchor:v1.0.2`                                                                     |
| `@coral-xyz/anchor`                                                               | `0.32.1`                                  | `@anchor-lang/core` `1.0.2`に置き換え                                                                     |
| `typescript`                                                                      | `^4.3.5`                                  | `^5.6.3`                                                                                             |

Anchor 1.0のCPI呼び出しサイトでの変更は、CPMMの統合者が既に処理したのと同じものです。`CpiContext::new`はプログラムの`AccountInfo`ではなく`Pubkey`を取り、`Context`は4つのライフタイムパラメータの代わりに1つを持ちます。クライアントクレートでは、`RequestBuilder::instructions()`は`Result`なしで`Vec<Instruction>`を返すようになり、`system_program`は`solana-system-interface`に移動しました。[`sdk-api/rust-cpi`](/ja/sdk-api/rust-cpi#cargo-dependencies)を参照してください。

オンチェーン効果のないビルドシステムの詳細：

* **ローカルネット管理者。** `localnet`フィーチャーはコミットされたフィクスチャによってサポートされた固定テストキーをコンパイルしなくなります。代わりに、ビルド時に`CLMM_LOCALNET_ADMIN`環境変数から管理者を読み取ります。これは`yarn test:local-admin`がローカルウォレットから設定します。フィクスチャの`.gitignore`例外は削除されました。
* **リリースプロファイル。** `programs/amm/Cargo.toml`の重複した`[profile.release]`ブロックが削除されました。Cargoはワークスペースルート外の`[profile]`を無視するため、ルートブロックが既に有効なものであり、プログラムレベルの`panic = "abort"`は適用されていませんでした。
* **Anchor.toml。** `seeds = false`は`resolution = true`プラス`skip-lint = false`になり、古い`[registry]` URLが削除されます。
* **リント。** `programs/amm/Cargo.toml`は、AnchorおよびSolanaマクロが出力するフィーチャcfgの`[lints.rust] unexpected_cfgs`許可リストを追加します。
* **README。** このブランチではREADMEは`coral-xyz/anchor`から`rustup default 1.86.0`と`avm install 0.32.1`を実行するよう指示しています。代わりに`Anchor.toml`と[`solana-fundamentals/toolchain`](/ja/solana-fundamentals/toolchain)に従ってください。

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

* **すべてのアカウントレイアウト。** `PoolState`、`AmmConfig`、`TickArrayState`、`TickArrayBitmapExtension`、`PersonalPositionState`、`ObservationState`、`LimitOrderState`、`DynamicFeeConfig`、`Permission`、`SupportMintAssociated`は同じサイズとオフセットを保持します。
* **エラーコード`6000`–`6051`。**
* **スワップ、リクイディティ、フィー、動的フィー、リミットオーダー数学。** `CollectExcessLamports`はプールのリザーブの一部ではなかったラムポートを移動します。
* **[2026-08-17](/ja/reference/changelog/2026-08-17-clmm-restricted-position-nft-freeze)からのポジションNFTフリーズ**。プール・フリーズ権限ルールと`ClosePosition`解凍パスを含みます。
* **`spl_memo`。** `DecreaseLiquidityV2`のメモプログラム制約は`spl_memo::id()`から`anchor_spl::memo::ID`に移動しました。両方とも同じアドレスに名前を付けます。`anchor-spl`はエクスポートの名前を変更しただけです。
* **プログラムID。**

## 更新されたページ

* `products/clmm/instructions`：アップグレードバナー；`CollectExcessLamports`セクション（アカウントリスト、2パス配信テーブル、プールごとのスコープ付き）；インベントリ、管理者ゲート、状態変更マトリックス行；`CollectProtocolFee` / `CollectFundFee`のフィーオーナーノート。
* `products/clmm/accounts`：`AmmConfig`オーナーコメントと`CreateAmmConfig`が書き込むものに関するノート。
* `products/clmm/code-demos`：バージョンバナーとRust CPIスケルトンがAnchor 1.0に移動。
* `products/cpmm/code-demos`：「CLMMとクレートを共有できない」ノートが削除されました。
* `reference/error-codes`：`6052`がドキュメント化されました。
* `reference/program-addresses`：新しい「CLMMフィーオーナーウォレット」セクション；CLMMが「余剰ラムポート回収ウォレット」に追加されました。
* `sdk-api/rust-cpi`、`sdk-api/anchor-idl`、`solana-fundamentals/toolchain`：`raydium-clmm`のAnchor 1.0ピン、およびクレート分割警告が廃止されました。
* `solana-fundamentals/rent-and-reclaimable-rent`：「Raydiumプログラムが自身の側でスイープするもの」にCLMMが追加されました。
* `security/admin-and-multisig`：CLMM余剰ラムポート回収者ロール。
* `protocol-overview/versions-and-migration`：CLMMアップグレード履歴の箇条書き。
