> ## 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-08-17 — CLMM: congelación de NFT de posición con emisor restringido

> CLMM congela condicionalmente una nueva cuenta de NFT de posición solo cuando una ruta V2 abierta encuentra un mint subyacente cuya autoridad de congelación coincide con la lista de emisores restringidos.

<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-08-17-clmm-restricted-position-nft-freeze)
</Info>

Esta versión añade una ruta de no transferibilidad condicional para pools de emisores restringidos por KYC seleccionados. No congela todas las posiciones nuevas, no congela activos del pool ni impide que los propietarios de posiciones gestionen liquidez. El PDA del pool CLMM se convierte en autoridad de congelación para cada nuevo mint de NFT de posición, pero la cuenta de token del NFT permanece descongelada por defecto. El programa la congela solo cuando la posición usa `OpenPositionV2` u `OpenPositionWithToken22Nft` y al menos uno de los mints de bóveda subyacentes lleva una autoridad de congelación de la lista de emisores restringidos codificada.

## Resumen ejecutivo para integradores

* **Los nuevos mints de NFT de posición tienen una autoridad de congelación, pero no están congelados por defecto.** `OpenPosition`, `OpenPositionV2` y `OpenPositionWithToken22Nft` establecen el `pool_state` de la posición como autoridad de congelación del mint. La autoridad del mint se sigue eliminando después de que se acuña el único NFT.
* **La congelación requiere una ruta V2 más una coincidencia de emisor.** `OpenPositionV2` y `OpenPositionWithToken22Nft` inspeccionan `vault_0_mint.freeze_authority` y `vault_1_mint.freeze_authority`. La nueva cuenta de NFT se congela solo si al menos una coincide con la lista del programa. Sin coincidencia, permanece descongelada y transferible.
* **Congelado significa vinculado al propietario.** SPL Token rechaza la transferencia de NFT y cambios de propietario de cuenta de token con su error nativo `AccountFrozen`. El aumento/disminución de liquidez y la recopilación de comisiones/recompensas continúan funcionando cuando el propietario del NFT firma.
* **Cerrar sigue disponible.** `ClosePosition` detecta una cuenta de NFT congelada, usa el PDA del pool para descongelarla, luego quema el NFT y cierra la posición atómicamente.
* **El cierre congelado requiere una cuenta restante.** El cliente debe añadir `personal_position.pool_id` como la primera cuenta restante. Si falta, devuelve `AccountLack` de CLMM; pasar el pool incorrecto devuelve `NotApproved`.
* **Las posiciones existentes no se ven afectadas.** La actualización no cambia retroactivamente las autoridades de mint de NFT ni congela cuentas de token existentes.
* **Sin cambio de diseño de estado CLMM ni lista de cuentas IDL declarada.** `PoolState`, `PersonalPositionState` y argumentos de instrucción permanecen compatibles a nivel de bytes. El requisito de ruta de cierre se transmite a través de `remaining_accounts`.

## Lógica de activación

El programa evalúa los dos mints de bóveda en el momento de apertura:

```rust theme={null}
must_freeze = restricted_ids.contains(vault_0_mint.freeze_authority)
           || restricted_ids.contains(vault_1_mint.freeze_authority)
```

Una autoridad de congelación faltante no coincide. Una coincidencia en un lado es suficiente. La lista inicial contiene la misma autoridad de emisor utilizada por la detección de activos Superstate de CLMM. Las claves de coincidencia actuales de mainnet-beta y devnet se encuentran en [`reference/program-addresses`](/es/reference/program-addresses#clmm-restricted-issuer-freeze-authorities).

La verificación se ejecuta en el controlador de posición abierta compartida solo cuando se suministran cuentas de mint de bóveda. Esto significa:

| Ruta abierta                 | Programa de NFT de posición | Comportamiento de congelación de emisor restringido                                             |
| ---------------------------- | --------------------------- | ----------------------------------------------------------------------------------------------- |
| `OpenPosition` V1            | SPL Token                   | No congela. V1 no puede servir los activos de emisor Token-2022 dirigidos por la lista enviada. |
| `OpenPositionV2`             | SPL Token                   | Inspecciona ambos mints de bóveda y congela en una coincidencia.                                |
| `OpenPositionWithToken22Nft` | Token-2022                  | Inspecciona ambos mints de bóveda y congela en una coincidencia.                                |

## Cambios de autoridad de NFT de posición

Antes de esta actualización, un mint de NFT de posición SPL clásico recién creado no retenía una autoridad de congelación. Después de la actualización, cada nuevo mint de NFT de posición nombra su pool como autoridad de congelación, incluidas las posiciones en pools ordinarios. Esta configuración de autoridad por sí sola no congela la cuenta de token del NFT; las posiciones ordinarias y sin coincidencia permanecen descongeladas.

Usar el PDA del pool en lugar de una clave de administrador global o emisor limita la autoridad a un pool. Una parte externa no puede firmar como el PDA, y CLMM no expone ninguna instrucción de propósito general para congelar o descongelar cuentas de posición arbitrarias. El nuevo código usa la autoridad en solo dos lugares:

1. Congelar inmediatamente después de acuñar cuando la verificación de emisor subyacente coincide.
2. Descongelar durante `ClosePosition` inmediatamente antes de quemar.

## Migración de `ClosePosition`

Las seis cuentas declaradas no cambian. Para un NFT congelado, añade el pool como la primera cuenta restante:

```text theme={null}
declared: nft_owner, position_nft_mint, position_nft_account,
          personal_position, system_program, token_program
remaining[0]: personal_position.pool_id   // read-only, non-signer
```

El controlador verifica la clave antes de cargar `PoolState`, deriva las semillas del firmante del pool y realiza:

```text theme={null}
descongelar cuenta de NFT → quemar NFT → cerrar cuenta de token de NFT / estado de posición
```

Todos los pasos se ejecutan en una instrucción de Solana y, por lo tanto, se confirman o revierten juntos. Pasar el pool en cada cierre es seguro: el controlador ignora las cuentas restantes cuando la cuenta de NFT no está congelada.

<Warning>
  **Ruptura condicional del cliente.** Un cliente más antiguo puede abrir exitosamente una posición después de la actualización porque los diseños de cuenta abierta V2 no cambian. Si esa posición está congelada, el mismo cliente puede fallar más tarde al cerrarla porque su constructor `ClosePosition` omite la cuenta restante del pool. Actualiza el constructor de cierre antes de permitir que los usuarios abran posiciones en pools afectados.
</Warning>

## Matriz de compatibilidad

| Escenario                                     | Transferir NFT | Gestionar liquidez | Constructor de cierre heredado | Constructor de cierre actualizado  |
| --------------------------------------------- | -------------- | ------------------ | ------------------------------ | ---------------------------------- |
| Posición existente                            | sin cambios    | sí                 | sí                             | sí                                 |
| Nueva posición, pool ordinario                | sí             | sí                 | sí                             | sí                                 |
| Nueva posición V2, pool de emisor restringido | no             | sí                 | falla con `AccountLack`        | sí; descongelación y quema atómica |

No se introducen nuevas variantes de error personalizado de CLMM ni cambios numéricos. El error nativo `AccountFrozen` de SPL Token rechaza intentos de transferencia o cambio de propietario.

## Páginas actualizadas

* `products/clmm/overview` — resumen de versión y advertencia de transferibilidad restringida.
* `products/clmm/ticks-and-positions` — modelo de autoridad, activación, capacidades del propietario y advertencia de migración de cierre.
* `products/clmm/accounts` — comportamiento del mint de NFT de posición y ciclo de vida.
* `products/clmm/instructions` — postcondiciones abiertas y ruta de cuenta restante `ClosePosition` congelada.
* `products/clmm/code-demos` — ejemplo de cierre directo de Anchor y advertencia de SDK fijado.
* `user-flows/add-remove-liquidity` — comportamiento de posición restringida visible para el usuario.
* `user-flows/burn-and-earn` — las posiciones congeladas no pueden transferirse a depósito de bloqueo.
* `security/oracle-and-token-risks` / `security/attack-vectors` — límites de riesgo de emisor y transferencia.
* `reference/token-2022-support` — distinción entre lista de permitidos de pool y custodia de posición.
* `reference/error-codes` — causas expandidas de `AccountLack` y `NotApproved`.
* `reference/program-addresses` — claves de coincidencia de autoridad de emisor restringido.
* `reference/fee-comparison` / `reference/glossary` — excepciones de transferibilidad.

**Verificado 2026-08-13 contra**:

* Rama de pre-lanzamiento de CLMM `feat/position-nft-freeze` en `ecb157760776f83f97507fa78c6e32cfb30d92a9`.
* Commits `2e95310` (congelación de NFT de emisor restringido) y `ecb1577` (autoridad de congelación con alcance de pool), comparados con `master` en `51fdba2`.
* Fuentes del programa bajo `instructions/{open_position,open_position_v2,open_position_with_token22_nft,close_position}.rs` y `util/token.rs`.
* `position-nft-freeze.test.ts`, cubriendo transferibilidad ordinaria, rechazo de transferencia/cambio de propietario congelado y flujos de descongelación V2 más Token-2022.

<Warning>
  Esta verificación cubre la rama de fuente de pre-lanzamiento, no una implementación de mainnet-beta o una versión de SDK publicada. Confirma el programa implementado, la lista de autoridad restringida de producción y el constructor de cierre de SDK antes de habilitar el flujo.
</Warning>
