Tabla de Contenidos
- 1. ¿Qué es un impuesto de tokens en Solana?
- 2. Extensión de tarifa de transferencia Token-2022 explicada
- 3. Parámetros clave: Puntos base, tarifa máxima, autoridades
- 4. Impuesto de tokens de Solana vs. Impuesto de compra/venta EVM — Diferencias clave
- 5. Cómo establecer impuestos de tokens sin código (CreateMyCoin)
- 6. Cómo establecer impuestos de tokens usando la CLI de SPL
- 7. Cómo retirar las tarifas de transferencia recaudadas
- 8. Compatibilidad DEX: Dónde se negocian los tokens Token-2022
- 9. Mejores prácticas y errores comunes
- 10. Preguntas Frecuentes
¿Qué es un impuesto de tokens en Solana?
Un impuesto de tokens en Solana — también llamado tarifa de transferencia o impuesto de tokens SPL — es una deducción automática aplicada cada vez que su token cambia de manos. Cada vez que alguien envía, compra o vende su token, un porcentaje de la cantidad transferida se retiene y se almacena en la cuenta de tokens del destinatario. El proyecto de tokens puede retirar esas tarifas retenidas a su monedero en cualquier momento.
Este es el equivalente nativo de Solana de lo que las cadenas EVM llaman un "impuesto de compra/venta" o "impuesto de reflexión". La diferencia clave: en Solana, el mecanismo de tarifas reside dentro del propio programa de tokens, no en un contrato inteligente separado. Esto lo hace más barato, más confiable y más difícil de eludir que las implementaciones de impuestos EVM.
- Casos de uso comunes: Financiamiento de tesorería de recompra automática, fondos de recompensa de la comunidad, ingresos del equipo, mecanismos de quema a través de la redirección de tarifas
- Quién lo controla: El monedero que tiene la autoridad de configuración de la tarifa de transferencia — establecida cuando se crea el token
- Cuándo se cobran las tarifas: En cada transferencia de tokens SPL, automáticamente, a nivel de protocolo
- Adónde van las tarifas: Retenidas en la cuenta de tokens del destinatario hasta que la autoridad de tarifas las recoja
Extensión de tarifa de transferencia Token-2022 explicada
Solana tiene dos programas de tokens: el programa de tokens SPL original (también llamado Token) y el más nuevo programa Token-2022 (también escrito como Extensiones de tokens o Token22). Las tarifas de transferencia son una característica de Token-2022, no están disponibles en el programa de tokens SPL original.
| Característica | Token SPL (Original) | Token-2022 (Extensiones) |
|---|---|---|
| Tarifa de transferencia / impuesto de tokens | ❌ No compatible | ✅ Extensión incorporada |
| Transferencias confidenciales | ❌ No compatible | ✅ Disponible |
| Tokens no transferibles | ❌ No compatible | ✅ Disponible |
| Tokens con intereses | ❌ No compatible | ✅ Disponible |
| Autoridad de cierre de emisión | ❌ No compatible | ✅ Disponible |
| Soporte DEX (Raydium, Orca) | ✅ Soporte completo | ✅ Creciente (verificar versión) |
| Soporte de monederos (Phantom, Solflare) | ✅ Universal | ✅ Compatible |
La extensión de tarifa de transferencia funciona incrustando la lógica de la tarifa directamente en la cuenta de emisión de tokens. Cuando crea un token Token-2022 con la extensión de tarifa de transferencia habilitada, cada instrucción de transferencia verifica los parámetros de la tarifa y retiene la cantidad correcta, antes de que los tokens lleguen al destino.
Importante: La extensión de la tarifa de transferencia debe añadirse en el momento de la creación del token. No se puede añadir una tarifa de transferencia a un token SPL existente o a un token Token-2022 existente después de la implementación. Esta decisión se toma una vez, permanentemente, en el momento de la creación de la emisión.
Parámetros clave: Puntos base, tarifa máxima, autoridades
Al establecer un impuesto de tokens en Solana, se configuran cuatro parámetros críticos. Comprender cada uno antes de desplegar es esencial — estos valores definen cómo se comporta económicamente su token.
| Parámetro | Tipo | Descripción | Ejemplo |
|---|---|---|---|
feeBasisPoints |
u16 (0–10000) | La tarifa en puntos base. 100 puntos base = 1%. 500 = 5%. | 300 = 3% de impuesto |
maxFee |
u64 | Tarifa máxima por transferencia en unidades de token brutas (con decimales). Limita la tarifa para transferencias muy grandes. | 1000000 = 1 token (si tiene 6 decimales) |
transferFeeConfigAuthority |
Pubkey | null | El monedero que puede actualizar la tasa de la tarifa y la tarifa máxima en el futuro. Se establece en nulo para bloquearlo para siempre. | Su monedero de proyecto o nulo |
withdrawWithheldAuthority |
Pubkey | null | El monedero que puede recolectar las tarifas retenidas de las cuentas de tokens. Debe ser un monedero de tesorería seguro. | Su monedero de tesorería |
Entendiendo los puntos base
Los puntos base (bps) son la unidad estándar para expresar porcentajes de tarifas en sistemas financieros. Un punto base equivale al 0.01%, por lo que:
- 50 bps = 0.5% de impuesto por transferencia
- 100 bps = 1% de impuesto por transferencia
- 300 bps = 3% de impuesto por transferencia
- 500 bps = 5% de impuesto por transferencia
- 1000 bps = 10% de impuesto por transferencia
- 10000 bps = 100% (cada token retenido — efectivamente intransferible)
Entendiendo maxFee
El parámetro maxFee limita la cantidad retenida en cualquier transferencia individual. Esto evita que su impuesto se vuelva punitivo en transacciones masivas de ballenas. Por ejemplo, si establece un impuesto del 3% pero una ballena transfiere 10,000,000 tokens, sin un límite pagaría 300,000 tokens en tarifas. Un maxFee de, digamos, 10,000 tokens (con 6 decimales: 10000000000) limita la tarifa máxima en cualquier transferencia individual.
Establecer maxFee al valor máximo (18446744073709551615, un máximo u64) significa efectivamente que no hay límite — el porcentaje siempre se aplica. La mayoría de los proyectos establecen un límite razonable para evitar disuadir a los grandes poseedores.
Autoridad de configuración de la tarifa de transferencia vs. Autoridad de retirada de fondos retenidos
Estas son dos autoridades separadas, cada una con poderes distintos:
- Autoridad de configuración de la tarifa de transferencia — Puede actualizar
feeBasisPointsymaxFeeen cualquier momento mediante una instrucciónsetTransferFee. Esto es poderoso: si retiene esta autoridad, puede cambiar la tasa de impuestos del 3% al 10% sin el consentimiento de los poseedores de tokens. Los proyectos que quieren generar confianza deben renunciar a esta autoridad (establecerla en nulo) o comprometerse públicamente con un proceso de gobernanza de tarifas. - Autoridad de retirada de fondos retenidos — Puede recolectar las tarifas acumuladas en las cuentas de tokens y en la cuenta de emisión. Esta autoridad no puede cambiar la tasa de la tarifa — solo cobra las tarifas ya ganadas. Esto siempre debe apuntar a un monedero seguro (idealmente un monedero multifirma).
Impuesto de tokens de Solana vs. Impuesto de compra/venta EVM — Diferencias clave
Si ha creado tokens en Ethereum, BNB Chain u otras cadenas EVM, el concepto de impuesto de compra/venta le resultará familiar, pero Solana lo implementa de manera muy diferente. Esto es lo que cambia:
| Aspecto | Impuesto de compra/venta EVM | Tarifa de transferencia de Solana (Token-2022) |
|---|---|---|
| Implementación | Lógica de contrato Solidity personalizada (ej. anulación ERC-20) | Extensión de programa Token-2022 incorporada |
| Se aplica a | Normalmente solo compras/ventas DEX (mediante detección de intercambio) | Todas las transferencias, incluidas de monedero a monedero |
| ¿Eludible? | A veces (las llamadas directas a contratos pueden omitir la lógica fiscal) | No — aplicado a nivel de tiempo de ejecución |
| Destino de la tarifa | Típicamente autodistribuida (reflexión) o enviada a contrato | Retenida en la cuenta del destinatario, recolectada manualmente |
| Flexibilidad de actualización de tarifas | Requiere volver a desplegar o llamar a funciones del propietario | Instrucción setTransferFee (si se retiene la autoridad) |
| Requisito de auditoría | El código personalizado debe ser auditado en busca de puertas traseras ocultas | Programa estándar — no se necesita auditoría personalizada para la lógica de tarifas |
| Costo de gas | Más alto (lógica extra por transferencia) | Mínimo (pocas unidades de cálculo extra por transferencia) |
La diferencia más importante: la tarifa de transferencia de Solana se aplica a todas las transferencias, no solo a los intercambios DEX. Esto significa que las transferencias de monedero a monedero, los airdrops y los movimientos internos del equipo también incurren en la tarifa. Tenga esto en cuenta en su tokenomics: las operaciones internas frecuentes reducirán su propia tesorería si no tiene cuidado.
Cómo establecer impuestos de tokens usando la CLI de SPL
Para los desarrolladores que desean control total, la CLI spl-token y la biblioteca TypeScript @solana/spl-token admiten la creación de tokens Token-2022 con tarifas de transferencia. A continuación, se explica cómo hacerlo a través de la CLI y el código.
Requisitos previos
- CLI de Solana instalada (
solana --version) - CLI spl-token actualizada a una versión que admita Token-2022 (
spl-token --version≥ 3.0) - Un par de claves de Solana financiado (mainnet o devnet)
- Node.js ≥ 18 si usa TypeScript
Método 1: CLI de tokens SPL
Cree una emisión de Token-2022 con la extensión de tarifa de transferencia en un solo comando:
spl-token create-token \ --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \ --transfer-fee 300 1000000 \ --decimals 6
Desglosando los indicadores:
--program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb— Esta es la dirección del programa Token-2022. Requerida para crear un token Token-2022.--transfer-fee 300 1000000— Establece la tarifa en 300 puntos base (3%) con una tarifa máxima de 1,000,000 unidades brutas. Con 6 decimales, eso equivale a 1 token máximo.--decimals 6— Estándar para la mayoría de los tokens de Solana (igual que USDC).
La CLI mostrará su nueva dirección de emisión. El par de claves actual (su ~/.config/solana/id.json) se convierte en la autoridad de configuración de la tarifa de transferencia y en la autoridad de retirada de fondos retenidos por defecto.
Método 2: TypeScript (@solana/spl-token)
Para la creación programática — útil para scripts, backends o dApps:
import {
createInitializeMintInstruction,
createInitializeTransferFeeConfigInstruction,
ExtensionType,
getMintLen,
TOKEN_2022_PROGRAM_ID,
} from "@solana/spl-token";
import {
Connection, Keypair, SystemProgram,
Transaction, sendAndConfirmTransaction, clusterApiUrl
} from "@solana/web3.js";
const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
const payer = Keypair.fromSecretKey(/* your secret key */);
const mintKeypair = Keypair.generate();
// Fee config
const feeBasisPoints = 300; // 3%
const maxFee = BigInt(1_000_000); // 1 token (6 decimals)
const feeConfigAuthority = payer.publicKey;
const withdrawAuthority = payer.publicKey;
const decimals = 6;
// Calculate space needed for the mint + extension
const extensions = [ExtensionType.TransferFeeConfig];
const mintLen = getMintLen(extensions);
const lamports = await connection.getMinimumBalanceForRentExemption(mintLen);
const transaction = new Transaction().add(
SystemProgram.createAccount({
fromPubkey: payer.publicKey,
newAccountPubkey: mintKeypair.publicKey,
space: mintLen,
lamports,
programId: TOKEN_2022_PROGRAM_ID,
}),
createInitializeTransferFeeConfigInstruction(
mintKeypair.publicKey,
feeConfigAuthority,
withdrawAuthority,
feeBasisPoints,
maxFee,
TOKEN_2022_PROGRAM_ID
),
createInitializeMintInstruction(
mintKeypair.publicKey,
decimals,
payer.publicKey, // mint authority
null, // freeze authority (null = none)
TOKEN_2022_PROGRAM_ID
)
);
await sendAndConfirmTransaction(connection, transaction, [payer, mintKeypair]);
console.log("Mint address:", mintKeypair.publicKey.toBase58());
El orden importa: La instruccióncreateInitializeTransferFeeConfigInstructiondebe ir antes decreateInitializeMintInstructionen la transacción. La inicialización de la extensión debe ocurrir antes de que se inicialice la emisión. Si se equivoca en este orden, se producirá un error de transacción.
Cómo retirar las tarifas de transferencia recaudadas
Después de que su token esté activo y se transfiera, las tarifas se acumulan en dos lugares:
- Cuentas de tokens del destinatario — Cada cuenta que recibe tokens con una tarifa retenida almacena esa tarifa internamente.
- La propia cuenta de emisión — Las tarifas pueden ser barridas opcionalmente de cuentas individuales a la cuenta de emisión primero.
Para recolectar estas tarifas, la autoridad de retiro de fondos retenidos ejecuta un proceso de dos pasos:
-
Cosechar los tokens retenidos para la emisión. Llame a
harvestWithheldTokensToMintcontra la lista de cuentas de tokens que retienen tarifas. Esto barre todas las cantidades retenidas de las cuentas individuales a la cuenta de fideicomiso de la emisión. -
Retirar de la emisión a su monedero. Llame a
withdrawWithheldTokensFromMintcon su cuenta de token de tesorería como destino. Esto mueve las tarifas del fideicomiso de la emisión a su cuenta de token.
Retirada CLI
# Paso 1: Cosechar tarifas de todas las cuentas de tokens a la emisión spl-token harvest-withheld-tokens YOUR_MINT_ADDRESS \ --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb # Paso 2: Retirar tarifas de la emisión a su cuenta de token spl-token withdraw-withheld-tokens YOUR_MINT_ADDRESS YOUR_TOKEN_ACCOUNT \ --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
El monedero que ejecuta estos comandos debe ser la autoridad de retirada de fondos retenidos establecida en el momento de la creación de la emisión. Cualquier otra persona que llame a estas instrucciones recibirá un error de no autorizado.
Compatibilidad DEX: Dónde se negocian los tokens Token-2022
Una de las preguntas prácticas más importantes para un token de Solana con una tarifa de transferencia: ¿qué DEX admiten Token-2022? No todos los AMM actualizaron sus pools para manejar la contabilidad de tarifas retenidas que requiere Token-2022.
| DEX / Plataforma | Soporte Token-2022 | Manejo de tarifas de transferencia | Notas |
|---|---|---|---|
| Raydium | ✅ Sí | Compatible con pools CPMM | Utilice el tipo de pool CPMM para tokens Token-2022 |
| Orca | ✅ Sí | Compatible (Whirlpools) | Whirlpool v2 admite extensiones Token-2022 |
| Jupiter | ✅ Sí | El agregador enruta a través de pools compatibles | Jupiter enruta a pools de Raydium/Orca automáticamente |
| Meteora | ✅ Sí | DLMM y pools dinámicos | Verifique la compatibilidad del tipo de pool antes de crear |
| DexScreener | ✅ Sí (muestra) | Muestra pools de Token-2022 y precio | Gráficos de precios y datos totalmente compatibles |
| Phantom Wallet | ✅ Sí | Muestra tokens e información de tarifas | Muestra la insignia de tarifa de transferencia en los tokens Token-2022 |
| Solflare | ✅ Sí | Soporte completo de visualización de Token-2022 | Muestra el saldo de la tarifa retenida en los detalles de la cuenta |
Para nuevos proyectos, el camino práctico es: cree su token Token-2022 → agregue liquidez en Raydium CPMM → su token aparece en DexScreener y se enruta a través de Jupiter automáticamente. Esto le da acceso completo al mercado sin ninguna configuración adicional.
Mejores prácticas y errores comunes
Mejores prácticas
- Mantenga la tarifa razonable. Impuestos superiores al 5% reducen drásticamente la profundidad de liquidez y el interés de los operadores. La mayoría de los proyectos exitosos de Solana con tarifas de transferencia utilizan del 1 al 3%. Cualquier valor superior al 5% es etiquetado como "honeypot" por las herramientas de verificación de estafas.
- Utilice un monedero de hardware o multifirma como autoridades. Tanto la autoridad de configuración de la tarifa como la autoridad de retirada de fondos retenidos deben estar protegidas. Multisig de Squads es el estándar para los equipos de proyectos de Solana.
- Divulgue la tarifa públicamente. Añada un descargo de responsabilidad sobre la tarifa de transferencia en su sitio web, Telegram y cualquier página de listado de tokens. Los operadores informados tienen menos probabilidades de sentirse estafados cuando ven la tarifa en la cadena.
- Establezca un límite máximo de tarifa sensato. Un límite razonable evita que los grandes poseedores paguen tarifas desproporcionadas y mantiene su token atractivo para inversores más grandes.
- Pruebe primero en devnet. Despliegue su token en la devnet de Solana, ejecute algunas transferencias de prueba y confirme que las matemáticas de la tarifa son correctas antes del lanzamiento en la red principal.
- Documente el uso de su tarifa. Publique a dónde van las tarifas recaudadas (recompra, equipo, recompensas de staking). La transparencia genera confianza y reduce la percepción de "rug pull".
Errores comunes a evitar
- Establecer
feeBasisPointsincorrectamente. Introducir 3 en lugar de 300 da como resultado una tarifa del 0.03% en lugar del 3%. Siempre verifique dos veces el valor de sus puntos base. - Olvidar las unidades de
maxFee. ElmaxFeeestá en unidades de token brutas, no en cantidades legibles por humanos. Para un token de 6 decimales, 1 token = 1,000,000 unidades brutas. UnmaxFeede1limita la tarifa a 0.000001 tokens, esencialmente cero. - Usar el mismo monedero para ambas autoridades. Si su monedero caliente se ve comprometido, perderá el control tanto de la tasa de tarifas como de la recaudación de tarifas de una sola vez.
- No tener en cuenta las tarifas en las transferencias internas. Si usted distribuye su propio token o mueve tokens entre monederos de equipo, se aplica la tarifa de transferencia. Presupueste en consecuencia.
- Intentar añadir la extensión después del despliegue. La extensión de la tarifa de transferencia no se puede adaptar a una emisión ya desplegada. Si olvidó habilitarla, debe crear un nuevo token.
- Crear un pool de Raydium v4 (heredado). Los pools heredados de Raydium no son compatibles con Token-2022. Utilice CPMM.
Preguntas Frecuentes
No. La extensión de la tarifa de transferencia debe añadirse en el momento de la creación de la emisión. No se pueden añadir extensiones a una emisión de token ya desplegada. Si desea una tarifa de transferencia, debe crear un nuevo token Token-2022 desde cero.
Técnicamente, hasta 10,000 puntos base (100%) — lo que significa que todos los tokens transferidos son retenidos. En la práctica, cualquier cosa por encima del 5-10% hace que su token sea ilíquido y será marcado por los escáneres. La mayoría de los proyectos exitosos usan 1-3%. Una tarifa del 100% crea efectivamente un token intransferible.
Sí, la tarifa se aplica a cada transferencia de token, incluidos los intercambios DEX. Cuando un comprador adquiere su token en Raydium, el intercambio transfiere internamente los tokens del pool al monedero del comprador. Esa transferencia activa la tarifa. Lo mismo ocurre con las ventas. La tarifa se aplica independientemente de si la transferencia es un envío directo o un intercambio DEX.
Si retuvo la autoridad de configuración de la tarifa de transferencia, puede llamar a setTransferFee con nuevos valores de feeBasisPoints y maxFee en cualquier momento. A través de la CLI: spl-token set-transfer-fee YOUR_MINT NUEVA_TASA NUEVA_TARIFA_MAXIMA --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb. Si renunció (estableció en nulo) a la autoridad en el momento de la creación, la tasa de la tarifa se bloquea permanentemente.
DexScreener muestra insignias de extensión Token-2022, incluida información sobre la tarifa de transferencia, directamente en la página del token. Las páginas de listado de CoinGecko también pueden mostrar datos de extensión de token. Los monederos Phantom y Solflare muestran un indicador de tarifa de transferencia cuando los usuarios ven su token, para que los compradores vean la tarifa antes de realizar la transacción.
Las tarifas retenidas son las cantidades deducidas automáticamente de las transferencias y almacenadas dentro de las cuentas de tokens individuales del destinatario. Se mantienen en fideicomiso y aún no están disponibles para el proyecto. Recaudar tarifas es el proceso manual de ejecutar harvestWithheldTokensToMint seguido de withdrawWithheldTokensFromMint; esto mueve las tarifas retenidas a su monedero de tesorería. Debe recaudar tarifas activamente; no llegan automáticamente.
No. Un token de reflexión (común en la cadena BNB) redistribuye automáticamente las tarifas a todos los poseedores existentes de manera proporcional. El mecanismo de tarifa de transferencia de Solana no hace esto de forma nativa; las tarifas se retienen y van a quien controla la autoridad de retirada de fondos retenidos. Puede simular la reflexión distribuyendo manualmente las tarifas recaudadas a los poseedores, pero requiere lógica adicional y no es automático.
La tarifa se deduce de la cantidad transferida. Si envía 1000 tokens con una tarifa del 3%, el destinatario recibe 970 tokens y 30 tokens son retenidos. El remitente no paga extra, el destinatario recibe menos. Esto es diferente de algunas implementaciones de impuestos EVM donde la tarifa se añade a la cantidad enviada.