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 →
Soporte a nivel de programa
Las verificaciones de la lista permitida se encuentran en:
- CPMM:
is_supported_mintenraydium-cp-swap/programs/cp-swap/src/utils/token.rs:178, llamado desdeInitialize. - CLMM:
is_supported_mintenraydium-clmm/programs/amm/src/util/token.rs:280, 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 uno de los mints del vault tiene unfreeze_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.
OpenPositionV2cubre NFTs de posición SPL clásicos sobre activos de pool Token-2022.OpenPositionWithToken22Nftcubre NFTs de posición Token-2022.OpenPositionV1 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.
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, eltransfer_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 equivalente deis_supported_minten el lado quote. La única puerta 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 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.
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 del vault. 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 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 constanteMINT_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 PDASupportMintAssociated 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).
3. Detección Superstate — solo CLMM
CLMM tiene una tercera ruta específicamente para activos tokenizados de Superstate, que usan la extensiónScaledUiConfig 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. Verreference/program-addressespara los valores de mainnet-beta y devnet. - Su extensión
DefaultAccountStateestá establecida enFrozen. - Su delegado permanente también es
superstate_allowlist::ID.
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
TokenoToken-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.
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”
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 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.
- 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, 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
Frozeny 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 llevanTransferFeeConfig, cada swap, depósito y retiro mueve menos que la cantidad nominal. El SDK expone ambas mitades del cálculo:
amountIn + token2022FeeIncomo “envías”amountOut - token2022FeeOutcomo “recibes”feeAmountcomo la tarifa del pool (LP + protocolo), que es separada de la tarifa de transferencia Token-2022
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: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 expone esto:
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_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 Trade — 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 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
ScaledUiConfigde CLMM funcione sin la heurística Superstate.
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—MINT_WHITELIST,is_supported_mint.raydium-clmm/programs/amm/src/util/token.rs—MINT_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).

