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 ahora. 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, llamado desdeInitializeeInitializeWithPermission. - CLMM:
is_supported_mintenraydium-clmm/programs/amm/src/util/token.rs, llamado 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 al menos lafreeze_authority actual de uno de los mints 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 restringidos Token-2022 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 están controlados 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 eltransfer_fee_extension_authconfigurado 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. Verproducts/launchlab/platform-config. - Mint quote — LaunchLab no lo crea y no lo examina.
CreateConfigacepta la cuenta de mint tal como se proporciona, por lo que no hay equivalenteis_supported_minten el lado quote. El único control es qué mints elige un administrador vincular a unGlobalConfig.
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 extensiones permitidas 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 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
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 es ahora 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:
Las cuatro claves (CPMM y CLMM × mainnet y devnet) se enumeran bajo Autoridades del registro de mint de soporte.
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 CreateCustomizablePoolV2.
Los mecanismos eliminados
Ambos mecanismos hardcodeados han sido eliminados de los programas desplegados. Se documentan aquí solo porque las integraciones escritas contra el comportamiento anterior aún pueden asumirlos.MINT_WHITELIST estática — eliminada
Una matriz constante de direcciones de mint en base58 que solía cortocircuitar is_supported_mint antes de la iteración de extensiones. CLMM contenía seis direcciones y fue eliminada el 2026-07-24; CPMM contenía las primeras cuatro del mismo conjunto y fue eliminada en la actualización del 2026-09-09.
Un pool que ya existe para uno de estos mints sigue operando — 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 en su lugar.
Detección de forma de autoridad de Superstate — eliminada
CLMM identificó brevemente los activos tokenizados de Superstate por su forma de autoridad en lugar de por dirección: un mint de Token-2022 cuyafreeze_authority y delegado permanente ambos igualaban superstate_allowlist::ID, con DefaultAccountState establecido en Frozen, era admitido. Era una heurística, por lo que cualquier mint futuro con la misma forma habría sido admitido automáticamente.
Fue eliminada el 2026-07-31, junto con el módulo superstate_allowlist. Lo que la 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 de emisor que la heurística anterior coincidía es la única entrada en esa lista.
Lo que los mecanismos no eximen
Los mecanismos omiten la lista de permitidos de extensiones, pero el programa aún refuerza:- El mint es propiedad de
TokenoToken-2022. Un programa de token personalizado es rechazado antes. - Los vaults del pool se crean con las extensiones ATA correctas para pools de Token-2022 (
ImmutableOwner, etc.). - Todas las transferencias pasan por
transfer_checked— los mints que llevan comisión depositan la cantidad correcta en el vault.
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. Registrar un mint es por lo tanto una acción de alta confianza.
Semántica de “Bloqueado”
Cuandois_supported_mint devuelve false, la creación del pool revierte con ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM). Consulta 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 se pueden añadir post-creación), por lo que la verificación estática es suficiente.
Por qué cada extensión excluida es excluida
- TransferHook — invoca un programa personalizado en cada transferencia, con consumo de CU arbitrario, condiciones de fallo arbitrarias, y la capacidad de reentrancia en el 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, incluyendo el vault del pool. Admisible solo registrando el mint, que es cómo se incorpora un emisor de confianza (por ejemplo, una stablecoin regulada) caso por caso.
- MintCloseAuthority — el mint puede cerrarse; los pools existentes se vuelven inutilizables. Desallowed por defecto.
- DefaultAccountState (Frozen) — los ATAs 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. - Group/Member pointers — no activamente dañino, pero no revisado. Desallowed por defecto para mantener la superficie estrecha.
Contabilidad de comisión 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 comisión del pool (LP + protocolo + fondo + creador) proviene de la curva.
raydium.cpmm.computeSwapAmount({ ... })la devuelve comofee, junto conamountIn,amountOut,minAmountOut,executionPrice,priceImpacty elswapResultsin procesar. - La comisión de transferencia de Token-2022 proviene 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 comisión de Token-2022
amountIn → amountOut subestima los costos. Pasa epochInfo del cluster a estos ayudantes en lugar de almacenarlo en caché; la época es lo que selecciona entre la configuración de comisión older y newer de un mint.
Límite de maximumFee
Las comisiones de transferencia de Token-2022 están limitadas 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 comisión. 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 comisión 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 comisión ejecutada puede diferir de la comisión 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 cantidad principal multiplicada por un factor de escala dependiente del tiempo o establecido por el administrador. La matemática de swap opera en principal:pool.token0Vault.amount como principal.
Definición de “pool de Token-2022”
Un pool es un pool de Token-2022 si cualquiera de los mints tieneprogramId == TokenzQdB.... La API lo expone:
programId para despachar, y hasTransferFee para mostrar una advertencia en la UI.
Ayudantes del SDK
Errores comunes de integración
- Pre-flight solo del ID del programa. Un mint puede ser Token-2022 y no soportado. Recorre 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 es aceptado en absoluto. La API de cotización no se niega a cotizar — la creación del pool es lo que 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 comisión de transferencia. Un mint de comisión de transferencia del 1% en ambos lados de un pool CPMM del 0.25% tiene una comisión 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 comisión manualmente solo desde el nivel de comisión del pool.
- Llamar a la instrucción
Swapheredada en un pool de Token-2022.Swapes anterior a Token-2022. UsaSwapV2siempre que cualquiera de los mints sea Token-2022. - Auto-listar nuevos mints de Token-2022. Las billeteras y agregadores deben verificar
TransferHookyNonTransferableantes de exponer 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 confidential-transfer (etapa de investigación).
- Registro por mint de CPMM más amplio (paridad con CLMM).
- Una ruta de lectura pública para el registro, para que una UI pueda distinguir “no soportado” de “no soportado pero registrado” sin derivar el PDA por sí misma.
Referencias
algorithms/token-2022-transfer-fees— matemática de comisión 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 de Token-2022 de LaunchLab.raydium-launchpad/programs/launchpad/src/instructions/admin/create_config.rs— vinculación de mint de cotización de LaunchLab (sin verificación de extensión).

