> ## 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: pools con permisos y protección de cuenta congelada para órdenes limitadas

> Dos actualizaciones del programa CLMM: CreatePermissionedPool permite que una autoridad en lista blanca cree múltiples pools por par mediante un seed_index integrado en el PDA del pool, y OpenLimitOrder ahora toma las cuentas del lado de salida para rechazar órdenes con una cuenta de token de entrada o salida congelada.

<Info>
  **Esta página fue traducida automáticamente por IA. La versión en inglés es la fuente autorizada.**

  [Ver versión en inglés →](/reference/changelog/2026-07-30-clmm-permissioned-pools)
</Info>

Esta versión documenta dos cambios en el programa CLMM. Ambos son aditivos y compatibles hacia atrás: los pools, posiciones y órdenes abiertas existentes no se ven afectados, y las rutas clásicas `CreatePool` / `CreateCustomizablePool` permanecen sin cambios.

## TL;DR para integradores

* **Los IDs de pool ahora pueden ser no canónicos, detrás de una puerta de permisos.** Históricamente había exactamente una dirección de pool CLMM por `(amm_config, token_mint_0, token_mint_1)` — las semillas del PDA la fijaban. Una nueva instrucción, **`CreatePermissionedPool`**, integra un `seed_index: u16` no nulo suministrado por el cliente en las semillas del PDA del pool, para que un operador en lista blanca pueda crear **varios pools para el mismo par y nivel de comisión**, cada uno en su propia dirección. Dado que las direcciones de pool arbitrarias son una capacidad privilegiada, el pagador debe tener un **PDA de `Permission`** otorgado por el administrador. Dos instrucciones de administrador, **`CreatePermissionPda`** y **`ClosePermissionPda`**, gestionan esos permisos.
* **`OpenLimitOrder` ahora valida el lado de salida.** La instrucción toma tres cuentas adicionales — `output_token_account`, `output_vault`, `output_vault_mint` — y rechaza la orden con `NotApproved` si la cuenta de token de **entrada o salida** del propietario está congelada. Esto garantiza que el llenado eventual pueda entregarse, lo que importa para mints Token-2022 con lista de permisos / congelados por defecto (tokens con permisos). Los clientes compilados contra la lista de cuentas antigua de un solo lado deben agregar las tres cuentas de salida.

## Qué cambió en el programa

### Nueva instrucción: `CreatePermissionedPool`

Tiene la misma forma y parámetros que `CreateCustomizablePool` (toma los mismos `CreateCustomizableParams`, por lo que la comisión de un solo lado y la opción de comisión dinámica están disponibles), más:

* Un argumento `seed_index: u16`, que **debe ser distinto de cero**. Se añade (little-endian) a las semillas del PDA del pool:
  `["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]`.
* Una cuenta `permission`: el PDA `["permission", payer]`. Anchor rechaza la llamada si no existe o no es propiedad del programa — su mera existencia es la autorización.
* Una cuenta `pool_creator` registrada como `pool_state.owner`, que puede diferir del `payer` que paga la comisión.

`seed_index = 0` permanece reservado para pools heredados: para esos, el componente de semilla se colapsa a vacío, reproduciendo la dirección clásica de cuatro semillas, por lo que ninguna dirección de pool existente cambia.

Consulta [Instructions → CreatePermissionedPool](/es/products/clmm/instructions).

### Nueva cuenta: `Permission`

Una cuenta de capacidad cuya existencia **es** el permiso. Solo almacena la `authority` para la que fue creada (más relleno). Semillas del PDA: `["permission", authority]`. Confiere el derecho de llamar a `CreatePermissionedPool` y nada más — no puede mover fondos, cambiar comisiones o mutar ningún pool. Consulta [Accounts → Permission](/es/products/clmm/accounts).

### Nuevas instrucciones de administrador: `CreatePermissionPda` / `ClosePermissionPda`

* `CreatePermissionPda` inicializa un PDA de `Permission` para una `permission_authority` dada.
* `ClosePermissionPda` lo cierra y reembolsa la renta al llamador, revocando el permiso. Los pools ya creados bajo ese permiso no se ven afectados.

Ambas aceptan la clave `admin` del programa **o** una clave dedicada `permission_pda_admin` (una constante distinta en mainnet vs devnet). Consulta [Admin keys and multisig → CLMM](/es/security/admin-and-multisig).

### `PoolState`: campo `seed_index`

Se tallaron dos bytes de una región de relleno existente (`padding: [u8; 6]` → `seed_index: [u8; 2]` + `padding: [u8; 4]`) directamente después de `fee_on`. **El tamaño total de la cuenta no cambia, y no se requiere migración de indexador.** Para pools creados mediante `CreatePool` / `CreateCustomizablePool`, `seed_index` es `[0, 0]`; para pools con permisos lleva el índice elegido por el creador y es necesario para re-derivar la dirección del pool fuera de cadena.

### `OpenLimitOrder`: cuentas del lado de salida y protección de cuenta congelada

La lista de cuentas de `OpenLimitOrder` gana `output_token_account`, `output_vault` y `output_vault_mint`. Se utilizan solo para validación — no se debita salida al abrir. El manejador ahora requiere que **ninguna** de las cuentas de token de entrada o salida esté congelada, devolviendo `NotApproved` en caso contrario (el mismo código ya devuelto cuando el pool tiene swap u órdenes limitadas deshabilitadas). Esto cierra una brecha donde una orden podría abrirse contra una cuenta de token que nunca podría recibir el llenado (por ejemplo, una cuenta aún no descongelada para un mint Token-2022 congelado por defecto).

Consulta [Instructions → OpenLimitOrder](/es/products/clmm/instructions).

## Códigos de error

Sin nuevos códigos de error. El código existente `6000 NotApproved` ahora cubre además la cuenta de token de entrada/salida congelada y los casos de swap/órdenes limitadas deshabilitadas en `OpenLimitOrder`, y el caso "el firmante no es ni `admin` ni `permission_pda_admin`" en las instrucciones de permisos. La tabla de códigos de error y la numeración son iguales a las de la [versión 2026-05-18](/es/reference/changelog/2026-05-18-clmm-limit-orders). Consulta [Error codes → CLMM](/es/reference/error-codes).

## Notas de migración

* **Lectura de direcciones de pool**: no asumas un pool por `(config, mint0, mint1)`. Un par ahora puede tener un pool canónico más uno o más pools con permisos en direcciones derivadas de `seed_index`. Enumera pools desde la API / indexador en lugar de derivar un único PDA, y almacena `seed_index` cuando necesites re-derivar un pool con permisos.
* **Colocación de órdenes limitadas**: agrega las tres cuentas del lado de salida a tu transacción `OpenLimitOrder`, y muestra un mensaje claro cuando se devuelve `NotApproved` para una cuenta congelada.
* **Sin ruptura de tamaño de cuenta o diseño**: `PoolState` tiene el mismo tamaño; los bytes de relleno retirados ahora contienen `seed_index`.

## Páginas actualizadas

* `products/clmm/overview` — nota "What's new" sobre pools multi con permisos y la protección de órdenes limitadas.
* `products/clmm/instructions` — nueva sección `CreatePermissionedPool`, `CreatePermissionPda` / `ClosePermissionPda` en la tabla de instrucciones y nota de puerta de administrador, y la lista de cuentas / precondiciones / errores actualizada de `OpenLimitOrder`.
* `products/clmm/accounts` — `Permission` en el inventario y su propia sección, el campo `PoolState.seed_index`, ayudantes de derivación de PDA (`derivePermissionedPool`, `derivePermission`), y la referencia rápida del ciclo de vida.
* `security/admin-and-multisig` — nueva fila `permission_pda_admin` y explicador de alcance de permisos en la tabla de roles de CLMM.
* `reference/error-codes` — descripción ampliada de `NotApproved`.

**Verificado contra**:

* Fuente de `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`).
