> ## 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-07-30 — CLMM：許可制多池與限價單凍結帳戶防護

> 兩項 CLMM 程式更新：CreatePermissionedPool 讓白名單授權者透過折疊到池 PDA 的 seed_index 為同一交易對建立多個池，OpenLimitOrder 現在接受輸出端帳戶以拒絕輸入或輸出代幣帳戶被凍結的訂單。

<Info>
  **本頁內容由 AI 自動翻譯，所有內容以英文版本為準。**

  [查看英文版 →](/reference/changelog/2026-07-30-clmm-permissioned-pools)
</Info>

<Info>
  文件變更日誌條目。如需所有更新的索引，請參閱 [`reference/changelog`](/zh-Hant/reference/changelog)。如需協議本身的歷史時間軸，請參閱 [`introduction/history-and-milestones`](/zh-Hant/introduction/history-and-milestones)。
</Info>

本版本記錄了兩項 CLMM 程式變更。兩者都是附加性的且向後相容：現有的池、頭寸和開放訂單不受影響，經典的 `CreatePool` / `CreateCustomizablePool` 路徑保持不變。

## 整合者速覽

* **池 ID 現在可以是非規範的，受許可閘道保護。** 過去每個 `(amm_config, token_mint_0, token_mint_1)` 只有一個 CLMM 池位址——PDA 種子將其固定。新指令 **`CreatePermissionedPool`** 將客戶端提供的非零 `seed_index: u16` 折疊到池 PDA 種子中，讓白名單運營者可以為同一交易對和費用層級建立**多個池**，每個池位於自己的位址。由於任意池位址是特權功能，付款人必須持有由管理員授予的 **`Permission`** PDA。兩項管理員指令 **`CreatePermissionPda`** 和 **`ClosePermissionPda`** 管理這些授權。
* **`OpenLimitOrder` 現在驗證輸出端。** 該指令接受三個額外帳戶——`output_token_account`、`output_vault`、`output_vault_mint`——如果擁有者的**輸入或輸出**代幣帳戶被凍結，則以 `NotApproved` 拒絕訂單。這保證最終成交可以交付，這對允許清單 / 預設凍結的 Token-2022 鑄幣（許可代幣）很重要。針對舊單邊帳戶清單構建的客戶端必須新增三個輸出帳戶。

## 程式中的變更

### 新指令：`CreatePermissionedPool`

形狀和參數與 `CreateCustomizablePool` 相同（它接受相同的 `CreateCustomizableParams`，因此單邊費用和動態費用選擇可用），加上：

* 一個 `seed_index: u16` 參數，**必須非零**。它被附加（小端序）到池 PDA 種子：
  `["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]`。
* 一個 `permission` 帳戶：PDA `["permission", payer]`。如果它不存在或不由程式擁有，Anchor 會拒絕呼叫——它的存在本身就是授權。
* 一個 `pool_creator` 帳戶，記錄為 `pool_state.owner`，可能與付費的 `payer` 不同。

`seed_index = 0` 仍保留給舊版池：對於這些池，種子元件會摺疊為空，重現經典的四種子位址，因此沒有現有池位址會改變。

請參閱 [Instructions → CreatePermissionedPool](/zh-Hant/products/clmm/instructions)。

### 新帳戶：`Permission`

一個能力帳戶，其存在**就是**授權。它只儲存建立它的 `authority`（加上填充）。PDA 種子：`["permission", authority]`。它只賦予呼叫 `CreatePermissionedPool` 的權利——它不能移動資金、更改費用或改變任何池。請參閱 [Accounts → Permission](/zh-Hant/products/clmm/accounts)。

### 新管理員指令：`CreatePermissionPda` / `ClosePermissionPda`

* `CreatePermissionPda` 為給定的 `permission_authority` 初始化一個 `Permission` PDA。
* `ClosePermissionPda` 關閉它並將租金退款給呼叫者，撤銷授權。已在該授權下建立的池不受影響。

兩者都接受程式 `admin` 公鑰**或**專用的 `permission_pda_admin` 金鑰（主網和開發網上的不同常數）。請參閱 [Admin keys and multisig → CLMM](/zh-Hant/security/admin-and-multisig)。

### `PoolState`：`seed_index` 欄位

兩個位元組從現有填充區域（`padding: [u8; 6]` → `seed_index: [u8; 2]` + `padding: [u8; 4]`）直接在 `fee_on` 之後被分割出來。**總帳戶大小不變，不需要索引器遷移。** 對於透過 `CreatePool` / `CreateCustomizablePool` 建立的池，`seed_index` 是 `[0, 0]`；對於許可制池，它攜帶建立者選擇的索引，並且需要在離線重新推導池位址。

### `OpenLimitOrder`：輸出端帳戶和凍結帳戶防護

`OpenLimitOrder` 帳戶清單新增 `output_token_account`、`output_vault` 和 `output_vault_mint`。它們僅用於驗證——開放時不會從輸出端扣除。處理程式現在要求**輸入和輸出**代幣帳戶都未被凍結，否則返回 `NotApproved`（相同的代碼已在池禁用交換或限價單時返回）。這關閉了一個漏洞，即訂單可能針對永遠無法接收成交的代幣帳戶開放（例如預設凍結的 Token-2022 鑄幣的尚未解凍帳戶）。

請參閱 [Instructions → OpenLimitOrder](/zh-Hant/products/clmm/instructions)。

## 錯誤代碼

沒有新的錯誤代碼。現有的 `6000 NotApproved` 現在另外涵蓋凍結的輸入/輸出代幣帳戶和 `OpenLimitOrder` 上的交換/限價單禁用情況，以及許可指令上的「簽署者既不是 `admin` 也不是 `permission_pda_admin`」情況。錯誤代碼表和編號在其他方面與 [2026-05-18 版本](/zh-Hant/reference/changelog/2026-05-18-clmm-limit-orders) 保持不變。請參閱 [Error codes → CLMM](/zh-Hant/reference/error-codes)。

## 遷移說明

* **讀取池位址**：不要假設每個 `(config, mint0, mint1)` 只有一個池。一個交易對現在可能有一個規範池加上一個或多個位於 `seed_index` 推導位址的許可制池。從 API / 索引器列舉池而不是推導單個 PDA，並在需要重新推導許可制池時儲存 `seed_index`。
* **下達限價單**：將三個輸出端帳戶新增到你的 `OpenLimitOrder` 交易，並在為凍結帳戶返回 `NotApproved` 時顯示清晰的訊息。
* **無帳戶大小或佈局破壞**：`PoolState` 大小相同；已停用的填充位元組現在保存 `seed_index`。

## 更新的頁面

* `products/clmm/overview` — 關於許可制多池和限價單防護的「新增功能」說明。
* `products/clmm/instructions` — 新的 `CreatePermissionedPool` 部分，指令表中的 `CreatePermissionPda` / `ClosePermissionPda` 和管理員閘道說明，以及更新的 `OpenLimitOrder` 帳戶清單 / 前置條件 / 錯誤。
* `products/clmm/accounts` — 清單中的 `Permission` 及其自己的部分，`PoolState.seed_index` 欄位，PDA 推導幫助程式（`derivePermissionedPool`、`derivePermission`），以及生命週期快速參考。
* `security/admin-and-multisig` — CLMM 角色表中新的 `permission_pda_admin` 列和許可範圍說明。
* `reference/error-codes` — 擴展的 `NotApproved` 描述。

**驗證對象**：

* `raydium-clmm` 原始碼（`create_permissioned_pool.rs`、`admin/create_permission_pda.rs`、`admin/close_permission_pda.rs`、`states/permission.rs`、`states/pool.rs`、`limit_order/open_limit_order.rs`、`lib.rs`）。
