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 de permitidos estricto: solo un pequeño conjunto de extensiones pasan por defecto; todo lo demás se rechaza en la creación del pool. Cada programa admite un mint individual a través de un mecanismo — un PDA de registro por mint administrado. Ambos programas también llevaban derivaciones codificadas en varios puntos; todas ellas han sido eliminadas. Esta página es la referencia única para lo que se aplica y dónde, con citas en el código fuente del programa.
Soporte a nivel de programa
Las verificaciones de la lista de permitidos se encuentran en:
- CPMM:
is_supported_mintenraydium-cp-swap/programs/cp-swap/src/utils/token.rs, llamada desdeInitializeeInitializeWithPermission. - CLMM:
is_supported_mintenraydium-clmm/programs/amm/src/util/token.rs, llamada desdeCreatePool. - LaunchLab:
initialize_with_token_2022enraydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs(código fuente no disponible públicamente).
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 lafreeze_authority actual de al menos un mint de bóveda aparece en la lista codificada frozen_position_nft_authorities::IDS. Esa lista es lo que reemplazó la detección anterior de token Superstate de CLMM, y lleva la misma autoridad del emisor que la heurística anterior coincidía. Establecer el PDA del pool como la autoridad de congelación del mint de NFT de posición no es en sí mismo una congelación. Esta es una regla de custodia de posición, no una lista de permitidos de creación de pool:
- El pool ya puede existir y permanecer intercambiable.
- El mint de 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.
OpenPositionV2cubre NFT de posición SPL clásicos sobre activos de pool Token-2022.OpenPositionWithToken22Nftcubre NFT de posición Token-2022.OpenPositionV1 no inspecciona mints de bóveda y no puede servir los activos Token-2022 restringidos dirigidos por la lista enviada.- Las posiciones existentes no cambian.
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áMetadataPointery (opcionalmente)TransferFeeConfig. Cualquier otra cosa devuelveNoSupportExtension. Un mint Token-2022 preexistente no puede suministrarse como base en absoluto. Cuando se adjuntaTransferFeeConfig, latransfer_fee_config_authoritydel mint es el PDA de autoridad de lanzamiento hasta la graduación, mientras que suwithdraw_withheld_authorityes latransfer_fee_extension_authconfigurada de la plataforma desde la creación del mint en adelante — el programa de launchpad en sí no tiene instrucción de retiro de retenido. Verproducts/launchlab/platform-config. - Mint quote — LaunchLab no lo crea ni lo examina.
CreateConfigacepta la cuenta de mint tal como se proporciona, por lo que no hay equivalente deis_supported_minten el lado quote. La única compuerta es qué mints elige un administrador vincular a unaGlobalConfig.
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 las bóvedas quote de esos pools. Ninguno está bloqueado por el programa.
Lo que LaunchLab maneja correctamente una vez que se vincula un mint quote:
- La bóveda quote, ambas bóvedas de tarifa y la cuenta de token del receptor de tarifa de participación se crean en el programa del mint quote.
TransferFeeConfigen 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 de la bóveda. Verproducts/launchlab/instructions.PoolState.token_program_flagregistra los programas de ambos mints — bit0 para el mint base, bit1 para el mint quote. Decodifica por bit; el byte no es un booleano. Verproducts/launchlab/accounts.
Initialize deprecada aún toma un programa quote heredado, por lo que una configuración con un mint quote Token-2022 es alcanzable solo a través de InitializeV2 e InitializeWithToken2022.
Lista de permitidos de extensiones CPMM y CLMM
Después de los dos cortocircuitos 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 que no esté 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
Rutas de derivación
Un mint Token-2022 que no se ajusta a la lista de permitidos aún puede ser admitido, a través de un mecanismo en cada programa. Ambos programas también llevaban derivaciones codificadas en el pasado; ninguna de ellas sobrevive.is_supported_mint ahora es byte por byte la misma función en ambos programas: los mints Token SPL heredados pasan, un mint con un PDA de registro pasa, y todo lo demás debe llevar solo extensiones permitidas.
La única derivación: el registro por mint
Ambos programas consultan un PDASupportMintAssociated en la semilla [b"support_mint", mint]. Si ese PDA existe para el mint, el mint se admite independientemente de su conjunto de extensiones.
Cada programa tiene su propia copia del PDA (se derivan bajo IDs de programa diferentes), su propio par CreateSupportMintAssociated / CloseSupportMintAssociated, y su propia autoridad dedicada junto con el administrador compartido:
En ambos programas la instrucción acepta
crate::admin::ID o la autoridad dedicada de ese programa, y requiere que el mint sea propiedad de Token-2022. Efecto: un mint Token-2022 específico puede ser incluido en la creación del pool sin una actualización del programa — por eso las listas codificadas podrían desaparecer.
Cada programa consulta el registro desde cada ruta de creación de pool que tiene: CPMM desde Initialize e InitializeWithPermission (este último es lo que usan las graduaciones de LaunchLab, por lo que un mint registrado se gradúa así como crea), CLMM desde CreatePool, CreateCustomizablePool y CreatePermissionedPool.
Las derivaciones eliminadas
Ambos mecanismos codificados se han ido de los programas desplegados. Se documentan aquí solo porque las integraciones escritas contra el comportamiento anterior aún pueden asumirlas.MINT_WHITELIST estático — eliminado
Una matriz constante de direcciones de mint en base58 solía cortocircuitar is_supported_mint antes de la iteración de extensiones. La de CLMM contenía seis direcciones y fue eliminada el 2026-07-24; la de CPMM contenía los primeros cuatro del mismo conjunto y fue eliminada en la actualización 2026-09-09.
Un pool que ya existe para uno de estos mints sigue comerciando — la verificación de mint se ejecuta solo en la creación del pool. Crear un nuevo pool para uno ahora requiere un PDA de registro para él en su lugar.
Detección de forma de autoridad Superstate — eliminado
CLMM identificó brevemente los activos tokenizados de Superstate por su forma de autoridad en lugar de por dirección: un mint Token-2022 cuyafreeze_authority y delegado permanente ambos igualaban superstate_allowlist::ID, con DefaultAccountState establecido en Frozen, fue admitido. Era una heurística, por lo que cualquier mint futuro con la misma forma habría sido admitido automáticamente.
Fue eliminado el 2026-07-31, junto con el módulo superstate_allowlist. Lo que lo reemplazó es más estrecho y sirve un propósito diferente: frozen_position_nft_authorities::IDS, que no admite nada — decide si un NFT de posición se congela, y se describe arriba. La única autoridad del emisor que la heurística anterior coincidía es la única entrada en esa lista.
Lo que las derivaciones no eximen
Las derivaciones omiten la lista de permitidos de extensiones, pero el programa aún aplica:- El mint es propiedad de
TokenoToken-2022. Un programa de token personalizado se rechaza aguas arriba. - Las bóvedas 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 la bóveda.
TransferHook más tarde no gana una verificación en tiempo de swap; el hook simplemente se ejecutaría en cada transferencia y podría romper los swaps. Registrar un mint es por lo tanto una acción de alta confianza.
Semántica “Bloqueado”
Cuandois_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 compuerta se ejecuta solo en la creación. Las extensiones de mint son inmutables para las categorías que Raydium rechaza (transfer hook, no transferible, transferencia confidencial no se puede agregar después de la 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 de permitidos de hooks; Raydium no.
- NonTransferable —
Transfersiempre 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, incluida la bóveda del pool. Admisible solo registrando el mint, que es cómo se incorpora un emisor de confianza (p. ej. una stablecoin regulada) caso por caso.
- MintCloseAuthority — el mint puede cerrarse; los pools existentes se vuelven inutilizables. Desallowed por defecto.
- DefaultAccountState (Frozen) — los ATA del pool aterrizarían en estado
Frozeny requerirían descongelación por cuenta. Admisible solo registrando el mint, 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 llevanTransferFeeConfig, cada swap, depósito y retiro mueve menos que la cantidad nominal. Dos números separados están involucrados, y el SDK los mantiene separados:
- La tarifa del pool (LP + protocolo + fondo + creador) viene de la curva.
raydium.cpmm.computeSwapAmount({ ... })la devuelve comofee, junto conamountIn,amountOut,minAmountOut,executionPrice,priceImpacty elswapResultsin procesar. - La tarifa de transferencia Token-2022 viene del mint, no del pool. Se calcula mediante los ayudantes
getTransferAmountFeeen@raydium-io/raydium-sdk-v2, que devuelven unGetTransferAmountFee:
computePairAmount devuelve inputAmountFee y anotherAmount como valores GetTransferAmountFee.
Una UI correcta muestra:
- la cantidad de entrada más su transferencia
feecomo “envías” - la cantidad de salida menos su transferencia
feecomo “recibes” - la
feedel pool como una línea separada — no es la tarifa Token-2022
amountIn → amountOut subestima los costos. Pasa epochInfo del clúster a estos ayudantes en lugar de almacenarlo en caché; la época es lo que selecciona entre la configuración de tarifa older y newer de un mint.
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 SwapV2 de CPMM como SwapV2 de CLMM 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 Comercio 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 de swap opera en principal:pool.token0Vault.amount como principal.
Definición de “pool Token-2022”
Un pool es un pool Token-2022 si cualquiera de los mints tieneprogramId == TokenzQdB.... La API lo expone:
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 de permitidos, y verifica el PDA de registro del mint, 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_mintfuera 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 Comercio — nunca calcules la tarifa manualmente solo desde el nivel de tarifa del pool.
- Llamar a la instrucción
Swapheredada en un pool Token-2022.Swapes anterior a Token-2022. UsaSwapV2siempre que cualquiera de los mints sea Token-2022. - Auto-listar nuevos mints Token-2022. Las billeteras y agregadores deben verificar
TransferHookyNonTransferableantes de mostrar un mint a los usuarios; ambos son hostiles a Raydium.
Trabajo futuro
Elementos de la hoja de ruta del ecosistema Solana y protocolo que cambiarían esta matriz:- Programas de transfer-hook permitidos 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).
- Una ruta de lectura pública para el registro, para que una UI pueda decir “no soportado” de “no soportado pero registrado” sin derivar el PDA en sí.
Punteros
algorithms/token-2022-transfer-fees— matemática de tarifa en swaps.products/cpmm/instructions—SwapV2,Initialize.products/clmm/instructions—SwapV2,CreatePool,CreateSupportMintAssociated.reference/error-codes— códigos numéricos deNotSupportMintpor programa.
raydium-cp-swap/programs/cp-swap/src/utils/token.rs—is_supported_mint,support_mint_associated_is_initialized.raydium-clmm/programs/amm/src/util/token.rs—is_supported_mint,support_mint_associated_is_initialized,frozen_position_nft_authorities,position_nft_must_freeze.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 extensiones).

