Skip to main content
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 →
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:
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. 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:

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:
El controlador verifica la clave antes de cargar PoolState, deriva las semillas del firmante del pool y realiza:
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.
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.

Matriz de compatibilidad

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.
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.