> ## 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/reference/changelog)。协议的历史时间线见 [`introduction/history-and-milestones`](/zh/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/products/clmm/instructions)。

### 新账户：`Permission`

一个能力账户，其存在**就是**授权。它仅存储创建它的 `authority`（加上填充）。PDA 种子：`["permission", authority]`。它仅赋予调用 `CreatePermissionedPool` 的权利——它不能移动资金、更改费用或改变任何池。见 [Accounts → Permission](/zh/products/clmm/accounts)。

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

* `CreatePermissionPda` 为给定的 `permission_authority` 初始化一个 `Permission` PDA。
* `ClosePermissionPda` 关闭它并将租金退款给调用者，撤销授权。已在该授权下创建的池不受影响。

两者都接受程序 `admin` 公钥**或**专用的 `permission_pda_admin` 密钥（主网和开发网上的不同常数）。见 [Admin keys and multisig → CLMM](/zh/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/products/clmm/instructions)。

## 错误代码

无新错误代码。现有的 `6000 NotApproved` 现在另外涵盖冻结的输入/输出代币账户和 `OpenLimitOrder` 上的交换/限价单禁用情况，以及权限指令上的"签名者既不是 `admin` 也不是 `permission_pda_admin`"情况。错误代码表和编号与 [2026-05-18 版本](/zh/reference/changelog/2026-05-18-clmm-limit-orders) 相比没有其他变化。见 [Error codes → CLMM](/zh/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`）。
