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 →
Raydium no acepta mints Token-2022 arbitrarios. Tanto CPMM como CLMM ejecutan un modo de lista permitida estricta: solo un pequeño conjunto de extensiones pasan por defecto; todo lo demás se rechaza en la creación del pool. Un puñado de mints de confianza se admiten por dirección codificada; CLMM además soporta un registro por mint administrado y una detección de token Superstate en tiempo de ejecución. Esta página es la referencia única para lo que se aplica y dónde, con citas de archivo y línea en el código fuente del programa.

Soporte a nivel de programa

Las verificaciones de la lista permitida se encuentran en: No hay verificación de mint en tiempo de swap en CPMM o CLMM — la puerta se activa solo en la creación del pool. Una vez que existe un pool, los swaps simplemente confían en que los mints no cambiaron, lo cual es correcto para las partes inmutables del estado del mint Token-2022.

Congelación de NFT de posición CLMM para emisores restringidos

Las cuentas de NFT de posición permanecen descongeladas por defecto. CLMM congela una solo cuando la posición usa una ruta abierta V2 y al menos uno de los mints del vault tiene un freeze_authority actual que coincide con la lista de emisores restringidos codificada. La lista inicial contiene la misma autoridad utilizada por la ruta de detección Superstate abajo. Establecer el PDA del pool como la autoridad de congelación del mint del NFT de posición no es en sí una congelación. Esta es una regla de custodia de posición, no otra lista permitida de creación de pool:
  • El pool ya puede existir y permanecer intercambiable.
  • El mint del NFT de posición usa el PDA del pool CLMM como su propia autoridad de congelación; el emisor subyacente no controla el NFT de posición.
  • OpenPositionV2 cubre NFTs de posición SPL clásicos sobre activos de pool Token-2022. OpenPositionWithToken22Nft cubre NFTs de posición Token-2022.
  • OpenPosition V1 no inspecciona los mints del vault y no puede servir los activos Token-2022 restringidos dirigidos por la lista enviada.
  • Las posiciones existentes no cambian.
Las posiciones congeladas permanecen manejables por su propietario pero no pueden transferirse. ClosePosition descongela y quema atómicamente cuando el cliente pasa el pool como la primera cuenta restante. Ver products/clmm/ticks-and-positions.

Mints quote de LaunchLab

Los dos mints de LaunchLab se controlan de manera muy diferente, y la asimetría es fácil de pasar por alto.
  • Mint base — LaunchLab lo crea. Un mint base Token-2022 solo es alcanzable a través de initialize_with_token_2022, y el programa solo adjuntará MetadataPointer y (opcionalmente) TransferFeeConfig. Cualquier otra cosa devuelve NoSupportExtension. Un mint Token-2022 preexistente no puede suministrarse como base en absoluto. Cuando se adjunta TransferFeeConfig, el transfer_fee_config_authority del mint es el PDA de autoridad de lanzamiento hasta la graduación, mientras que su withdraw_withheld_authority es el transfer_fee_extension_auth configurado de la plataforma desde la creación del mint en adelante — el programa launchpad en sí no tiene instrucción de retiro de fondos retenidos. Ver products/launchlab/platform-config.
  • Mint quote — LaunchLab no lo crea y no lo examina. CreateConfig acepta la cuenta de mint tal como se proporciona, por lo que no hay equivalente de is_supported_mint en el lado quote. La única puerta es qué mints elige un administrador vincular a un GlobalConfig.
Eso hace que vincular un mint quote Token-2022 sea una acción de alta confianza, con el mismo razonamiento que las listas blancas estáticas de CPMM y CLMM abajo: un mint quote TransferHook ejecutaría su hook en cada compra, venta y reclamación de tarifa en cada pool cotizado en él, y un mint quote PermanentDelegate permitiría al delegado barrer los vaults quote de esos pools. Ninguno es bloqueado por el programa. Lo que LaunchLab maneja correctamente una vez que se vincula un mint quote:
  • El vault quote, ambos vaults de tarifa y la cuenta de token del receptor de tarifa de participación se crean en el programa del mint quote.
  • TransferFeeConfig en el lado quote se precifica en las cuatro instrucciones de comercio, y el límite de slippage se verifica contra la cantidad neta del pagador en lugar del movimiento bruto del vault. Ver products/launchlab/instructions.
  • PoolState.token_program_flag registra los programas de ambos mints — bit0 para el mint base, bit1 para el mint quote. Decodifica por bit; el byte no es un booleano. Ver products/launchlab/accounts.
La instrucción Initialize deprecada aún toma un programa quote solo heredado, por lo que una configuración con un mint quote Token-2022 es alcanzable solo a través de InitializeV2 e InitializeWithToken2022.

Lista permitida de extensiones CPMM y CLMM

Después de los cortocircuitos de lista blanca estática (cubiertos abajo), el programa itera las extensiones del mint y rechaza el mint si lleva cualquier extensión que no sea estas cinco: Cualquier cosa no en esta lista — TransferHook, NonTransferable, ConfidentialTransferMint, PermanentDelegate, MintCloseAuthority, DefaultAccountState, GroupPointer, GroupMemberPointer, MemberPointer, Pausable, etc. — causa que is_supported_mint devuelva false y la creación del pool se revierta. Las líneas relevantes (CPMM, forma idéntica en CLMM):
cp-swap/src/utils/token.rs:190–200

Rutas de omisión

Un mint Token-2022 que no se ajusta a la lista permitida aún puede ser admitido a través de una de tres omisiones explícitas. Se intentan en orden, antes de que se ejecute la iteración de extensión.

1. Lista blanca de mint estática

Un array constante MINT_WHITELIST de strings base58 está codificado en cada programa. Si la dirección del mint coincide, la función devuelve true inmediatamente y no se realiza verificación de extensión. Estas direcciones están integradas en el programa; actualizar la lista requiere una actualización del programa a través del multisig de actualización 3/4.

2. Registro por mint — solo CLMM

CLMM además consulta un PDA SupportMintAssociated en seed [b"support_mint", mint]. Si ese PDA existe para el mint, se admite independientemente de su conjunto de extensiones. El PDA se crea por CreateSupportMintAssociated (admin/create_support_mint_associated.rs). La instrucción se controla a dos firmantes:
  • crate::admin::ID — la autoridad de administrador estándar de Raydium.
  • crate::create_support_mint_associated_owner::ID — una autoridad dedicada para este propósito: RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY (mainnet), rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5 (devnet).
Efecto: el equipo de CLMM puede optar por un mint Token-2022 específico en la creación del pool sin una actualización del programa. CPMM no tiene equivalente — su lista permitida es estrictamente código fuente.

3. Detección Superstate — solo CLMM

CLMM tiene una tercera ruta específicamente para activos tokenizados de Superstate, que usan la extensión ScaledUiConfig que la versión de spl-token-2022 vinculada al programa CLMM no puede desempacar. En lugar de actualizar la dependencia, CLMM detecta tokens Superstate por su forma de autoridad:
raydium-clmm/programs/amm/src/util/token.rs:485 Un mint pasa esta rama si los cuatro se cumplen:
  • Su programa propietario es el programa Token-2022.
  • Su autoridad de congelación es igual a superstate_allowlist::ID. Ver reference/program-addresses para los valores de mainnet-beta y devnet.
  • Su extensión DefaultAccountState está establecida en Frozen.
  • Su delegado permanente también es superstate_allowlist::ID.
Esta es una heurística, no un registro — cualquier mint futuro que Superstate emita con la misma forma de autoridad será admitido automáticamente.

Lo que las omisiones no eximen

Las omisiones saltan la lista permitida de extensiones, pero el programa aún aplica:
  • El mint es propiedad de Token o Token-2022. Un programa de token personalizado se rechaza aguas arriba.
  • Los vaults del pool se crean con las extensiones ATA correctas para pools Token-2022 (ImmutableOwner, etc.).
  • Todas las transferencias pasan por transfer_checked — los mints que llevan tarifa aterrizan la cantidad correcta en el vault.
Un mint en lista blanca o registrado en PDA que, por ejemplo, agregue un TransferHook después no obtiene una verificación en tiempo de swap; el hook simplemente se ejecutaría en cada transferencia y podría bloquear los swaps. Por lo tanto, la lista blanca es una acción de alta confianza.

Semántica de “bloqueado”

Cuando is_supported_mint devuelve false, la creación del pool se revierte con ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM). Ver reference/error-codes para los códigos numéricos. Los pools existentes no pueden fallar retroactivamente esta verificación — la puerta se ejecuta solo en la creación. Las extensiones de mint son inmutables para las categorías que Raydium rechaza (transfer hook, non-transferable, confidential transfer no pueden agregarse post-creación), por lo que la verificación estática es suficiente.

Por qué se excluye cada extensión

  • TransferHook — invoca un programa personalizado en cada transferencia, con consumo de CU arbitrario, condiciones de fallo arbitrarias y la capacidad de reingresar al programa que llama. No existe sandbox seguro. Algunos DEXes mantienen listas permitidas de hooks; Raydium no.
  • NonTransferableTransfer siempre falla. Un pool no puede tomar custodia.
  • ConfidentialTransfer — los montos de transferencia están encriptados; la curva no puede fijar el precio del swap.
  • PermanentDelegate — un titular del delegado puede barrer cualquier cuenta de token, incluido el vault del pool. Permitido solo a través de la lista blanca estática para emisores de confianza (por ejemplo, stablecoins regulados).
  • MintCloseAuthority — el mint puede cerrarse; los pools existentes se vuelven inutilizables. Desallowed por defecto.
  • DefaultAccountState (Frozen) — los ATAs del pool aterrizarían en estado Frozen y requerirían descongelación por cuenta. Permitido solo a través de detección Superstate, que asume que el emisor descongela cuentas institucionales en la inscripción.
  • Punteros de grupo/miembro — no activamente dañinos, pero no revisados. Desallowed por defecto para mantener la superficie estrecha.

Contabilidad de tarifa de transferencia

Para mints que llevan TransferFeeConfig, cada swap, depósito y retiro mueve menos que la cantidad nominal. El SDK expone ambas mitades del cálculo:
Una UI correcta muestra:
  • amountIn + token2022FeeIn como “envías”
  • amountOut - token2022FeeOut como “recibes”
  • feeAmount como la tarifa del pool (LP + protocolo), que es separada de la tarifa de transferencia Token-2022
Una UI ingenua que muestra solo amountIn → amountOut subestima los costos.

Límite de maximumFee

Las tarifas de transferencia Token-2022 se limitan por transferencia. Para un mint del 1% con un límite de 10,000 tokens, una transferencia de 100,000,000 tokens paga solo 10,000 en tarifa. El computeSwapAmount del SDK aplica el límite; los llamadores de programa directo deben replicarlo.

Transición de época

Una autoridad de mint puede programar un cambio de tasa de tarifa que se active en la próxima época. Durante la ventana de transición, dos configuraciones (older, newer) viven en el mint a la vez y TransferChecked selecciona por época actual. Tanto CPMM SwapV2 como CLMM SwapV2 pasan la cuenta de mint completa en accounts, por lo que el programa lee la configuración correcta sin una búsqueda adicional. Si citas más de una época por adelantado a través de la API de Trade o SDK, la tarifa ejecutada puede diferir de la tarifa cotizada — limitada por los maximum_fee_basis_points de la configuración anterior.

Interés acumulado y ScaledUiAmount

El pool mantiene la cantidad principal; la “cantidad de UI” es la principal multiplicada por un factor de escala dependiente del tiempo o establecido por administrador. La matemática del swap opera en principal:
El SDK convierte automáticamente. Los lectores de RPC directo deben tratar pool.token0Vault.amount como principal.

Definición de “pool Token-2022”

Un pool es un pool Token-2022 si cualquiera de los mints tiene programId == TokenzQdB.... La API expone esto:
Usa programId para despachar, y hasTransferFee para mostrar una advertencia de UI.

Ayudantes del SDK

Errores comunes de integración

  • Pre-vuelo solo del ID del programa. Un mint puede ser Token-2022 y no soportado. Camina la lista de extensiones contra la lista permitida (y la lista blanca estática) antes de permitir la creación del pool.
  • Confiar en la cotización del SDK cuando el mint no se acepta en absoluto. La API de cotización no se niega a cotizar — la creación del pool es lo que se revierte. Confirma la semántica de is_supported_mint fuera de cadena antes de exponer la creación del pool en tu UI.
  • Cotizar sin el corte de tarifa de transferencia. Un mint de tarifa de transferencia del 1% en ambos lados de un pool CPMM del 0.25% tiene una tarifa efectiva alrededor del 2.25%, no del 0.25%. Usa la cotización del SDK o la cotización de la API de Trade — nunca calcules la tarifa manualmente solo desde el nivel de tarifa del pool.
  • Llamar a la instrucción Swap heredada en un pool Token-2022. Swap es anterior a Token-2022. Usa SwapV2 siempre que cualquiera de los mints sea Token-2022.
  • Auto-listar nuevos mints Token-2022. Las billeteras y agregadores deben verificar TransferHook y NonTransferable antes de mostrar un mint a los usuarios; ambos son hostiles a Raydium.

Trabajo futuro

Elementos de hoja de ruta del ecosistema Solana y protocolo que cambiarían esta matriz:
  • Programas de transfer-hook en lista permitida a nivel de Solana (convención del ecosistema en evolución).
  • AMMs compatibles con transferencia confidencial (etapa de investigación).
  • Registro por mint CPMM más amplio (paridad con CLMM).
  • Actualización de dependencia para que la decodificación ScaledUiConfig de CLMM funcione sin la heurística Superstate.
Esta página se actualizará cuando alguno aterrice.

Punteros

Fuentes:
  • raydium-cp-swap/programs/cp-swap/src/utils/token.rsMINT_WHITELIST, is_supported_mint.
  • raydium-clmm/programs/amm/src/util/token.rsMINT_WHITELIST, superstate_allowlist, is_superstate_token, is_supported_mint.
  • raydium-clmm/programs/amm/src/instructions/admin/create_support_mint_associated.rs — instrucción de registro por mint.
  • raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs — creación de mint base Token-2022 de LaunchLab.
  • raydium-launchpad/programs/launchpad/src/instructions/admin/create_config.rs — vinculación de mint quote de LaunchLab (sin verificación de extensión).