Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
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 →
Matriz de compatibilidad: CPMM soporta Token-2022 completamente, incluidos mints con transfer-fee. CLMM soporta Token-2022 con transfer-fee mediante cuentas
SwapV2 explícitas. AMM v4 no soporta Token-2022 en absoluto. LaunchLab no soporta Token-2022 para el mint base (crea mints SPL clásicos). Farm v6 soporta Token-2022 en mints de depósito y recompensa.Qué es una comisión de transferencia
Token-2022 es el segundo programa SPL Token (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA → TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb). Entre sus extensiones, la extensión transfer-fee deduce una comisión de la cantidad transferida en cada TransferChecked sobre un mint de token. La comisión se envía a un destinatario designado por la autoridad del mint y puede ser actualizada por la autoridad (dentro de límites).
Un mint con transfer-fee tiene dos parámetros relevantes:
transfer_fee_basis_points— la tasa (p. ej. 100 = 1%).maximum_fee— un límite absoluto por transferencia (para que usuarios que mueven cantidades enormes no paguen comisiones ilimitadas).
Por qué esto importa para los swaps
Las bóvedas de un pool mantienen saldos reales. Cuando un usuario ejecuta un swap en Raydium:- El usuario envía
amount_ina la bóveda del pool. Si el mint de entrada tiene transfer-fee, la bóveda recibeamount_in − fee_in, noamount_in. - La matemática del swap opera sobre la cantidad recibida por la bóveda.
- El pool envía
amount_outal ATA del usuario. Si el mint de salida tiene transfer-fee, el usuario recibeamount_out − fee_out, noamount_out.
amount_in, la verificación de invariante falla porque la bóveda recibió menos de lo que el programa cree. Conversamente, si computa amount_out sin restar la comisión de transferencia saliente, el usuario verá un déficit y culpará al programa.
Raydium CPMM y CLMM (vía SwapV2) manejan esto:
- Antes del swap: computando
in_after_fee = amount_in − transfer_fee_on(amount_in, in_mint), y usandoin_after_feeen la matemática de la curva. - Después del swap: computando
out_gross = amount_out_from_curve, enviandoout_grossal usuario víaTransferChecked, que el programa Token-2022 mismo reducirá por la comisión de transferencia.
minAmountOut del usuario se verifica contra out_gross (lo que envía el pool), no contra lo que el usuario recibe. Así es como cada DEX mayor en Solana maneja Token-2022, e importa porque:
- Si el pool verificara post-comisión, una actualización de comisión entre cotización y ejecución causaría reversión del trade.
- Verificar pre-comisión fija el fallo a la calidad de la propia cotización, no a cambios de comisión fuera de banda del usuario.
Computar la comisión Token-2022
El programa SPL Token-2022 expone un asistente determinístico. En Rust:@solana/spl-token):
Fórmulas de swap ajustadas (CPMM, entrada exacta)
Seaf_pool la tasa de comisión del pool, f_in la tasa de transfer-fee del mint de entrada, max_in su límite máximo, f_out la tasa de transfer-fee del mint de salida, max_out su límite máximo.
amount_out_gross ≥ min_amount_out (no user_receives ≥ min_amount_out). El minAmountOut del usuario es establecido por el SDK a expected_gross · (1 − slippage) — mantén el límite en el lado “enviado”, no en el lado “recibido”.
Fórmulas ajustadas (CPMM, salida exacta)
El SDK itera para encontraramount_in tal que user_receives = amount_out_exact:
max_in / max_out hacen la computación no lineal porque una vez que se alcanza el límite la comisión deja de crecer. El computeAmountIn / computeAmountOut del SDK manejan esto iterando si la fórmula ingenua empujaría más allá del límite.
Casos límite
Comisiones asimétricas (un lado tiene comisión, el otro no)
Común en la práctica. Las fórmulas anteriores ya manejan esto — si un lado tienef_in = 0, los términos relevantes colapsan. No hay caso especial en el programa.
Actualizaciones de comisión a mitad del swap
Si la comisión de transferencia del mint cambia entre tiempo de cotización y tiempo de ejecución, el swap aterrizará con economía ligeramente peor (el usuario carga la diferencia dentro de la tolerancia de slippage) o se revertirá (la salida bruta cae por debajo deminAmountOut). Los límites de slippage absorben esto; no se necesita protección adicional.
Límite máximo de comisión
Una vez que el trade es lo suficientemente grande para alcanzarmaximum_fee, la comisión se satura y el crecimiento adicional es cero. Esto hace que la tasa efectiva sea asintótica a cero para trades muy grandes, lo que puede causar curvas de precios extrañas en mercados profundamente ilíquidos. El computeAmountOut del SDK da cuenta de esto.
Extensión no transferible
Algunos mints Token-2022 usan la extensiónNonTransferable, que rechaza todas las llamadas Transfer excepto hacia y desde la autoridad del mint. Tales mints no pueden usarse en un pool de Raydium en absoluto. CreatePool las rechaza en la inicialización.
Mints que generan interés
Token-2022 también soporta una extensiónInterestBearingConfig que hace que los saldos parezcan crecer en el tiempo. Los pools de Raydium leen saldos brutos de bóveda (que ignoran el acúmulo de interés), así que en un pool con un mint que genera interés, los LPs capturan el interés acumulado como un regalo puro siempre que canjean (el saldo de bóveda creció más rápido que la representación de suministro LP). Los integradores deben tratar esto como no problema pero documentarlo para el lado LP.
Transfer hooks
La extensiónTransferHook de Token-2022 permite CPI arbitrario en cada transferencia. Raydium CPMM soporta estos — la instrucción de swap reenvía las cuentas de hook — pero agrega sobrecarga de CU y requiere que el hook se comporte bien. CLMM SwapV2 también soporta hooks. AMM v4 no soporta Token-2022 en absoluto, así que la pregunta no surge.
Ejemplo trabajado
Pool CPMM,x = 1_000_000 USDY, y = 1_000_000 USDC, comisión de pool 0.25%.
- USDY tiene transfer-fee de 1%,
max_fee = 10_000(0.01 USDY con 6 decimales). - USDC no tiene transfer-fee.
amount_in = 1_000 USDY por USDC (entrada exacta).
Referencias
products/cpmm/overview— soporte Token-2022 de CPMM.products/clmm/instructions—SwapV2vsSwappara enrutamiento Token-2022.solana-fundamentals/spl-token-and-token-2022— el modelo de extensión Token-2022 general.
- Docs de extensión transfer-fee de SPL Token-2022
- Código fuente del programa Raydium CPMM (manejo Token-2022 de
SwapBaseInput/SwapBaseOutput). - Código fuente del programa Raydium CLMM (
SwapV2).


