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 comprobaciones de la lista blanca 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 de bóveda 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 a continuación. 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 otra lista blanca 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 los 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.
Lista blanca de extensiones CPMM y CLMM
Después de que los cortocircuitos de lista blanca estática (cubiertos a continuación), 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:190–200
Rutas de omisión
Un mint Token-2022 que no se ajusta a la lista blanca 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 extensiones.1. Lista blanca estática de mints
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 ninguna comprobació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 con seed [b"support_mint", mint]. Si ese PDA existe para el mint, se admite independientemente de su conjunto de extensiones.
El PDA se crea mediante CreateSupportMintAssociated (admin/create_support_mint_associated.rs). La instrucción está controlada por 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 utilizan 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á configurada enFrozen. - Su delegado permanente también es
superstate_allowlist::ID.
Lo que las omisiones no eximen
Las omisiones saltan la lista blanca de extensiones, pero el programa aún aplica:- El mint es propiedad de
TokenoToken-2022. Un programa de token personalizado se rechaza antes. - Los 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 con tarifa aterrizan la cantidad correcta en la bóveda.
TransferHook más tarde no obtiene una comprobación en tiempo de swap; el hook simplemente se ejecutaría en cada transferencia y podría bloquear los swaps. La lista blanca es por lo tanto 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 comprobación — el control 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 agregar post-creación), por lo que la comprobació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 blancas 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. 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 ATA del pool aterrizarían en estado
Frozeny requerirían descongelación por cuenta. Permitido solo a través de la 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 el monto 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 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 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 configs (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 config 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 config más antigua.
Interés acumulado y ScaledUiAmount
El pool mantiene el monto principal; el “monto de UI” es el principal multiplicado 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 blanca (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. - Listar automáticamente 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 en lista blanca a nivel de Solana (convención del ecosistema en evolución).
- AMMs compatibles con confidential-transfer (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.

