TransferFeeConfig (extensión)
Extensión del lado Mint de Token-2022 que cobra una comisión porcentual en cada transferencia. Las comisiones se acumulan como saldos retenidos en las Token Accounts destinatarias y las reclama más tarde la autoridad de retiro.
Ejemplo: PYUSD Mint (Token-2022)
(en caché; se actualiza cada hora · solo mainnet)
Ejemplo no disponible temporalmente
No pudimos obtener el ejemplo en caché desde mainnet en este momento. La vista hex completa lo intentará en vivo.
Prueba el visualizadorQué es
TransferFeeConfig es una extensión de Mint de Token-2022 que impone una comisión porcentual en cada transferencia del token. Las comisiones no van a una tesorería en el momento de la transferencia — se acumulan como saldos retenidos dentro de la Token Account del destinatario (mediante la extensión emparejada TransferFeeAmount), y la withdraw_withheld_authority las reclama más tarde.
Por qué existe
SPL Token no tiene comisiones nativas. Los protocolos (DEX, apps de pago, aplicadores de regalías de NFT) cobran comisiones enrutando a través de una billetera extra a nivel de aplicación — con pérdidas, difícil de auditar, fácil de eludir. Token-2022 permite que la propia Mint aplique una política de comisiones, de modo que cada transferencia del token paga la comisión, ya pase por un DEX, un envío de billetera o una CPI desde otro protocolo.
Diseño de bytes
Esta es la carga útil de una entrada TLV TransferFeeConfig (extension_type = 1, length = 108). La entrada on-chain completa son 4 bytes de cabecera TLV (consulta el primer de diseño TLV) más esta carga útil de 108 bytes.
| Offset | Tamaño | Campo | Tipo | Notas |
|---|---|---|---|---|
| 0 | 32 | transfer_fee_config_authority |
OptionalNonZeroPubkey |
Actualiza la configuración de comisiones. Pubkey a cero = None (deshabilitada — comisiones congeladas para siempre). Sin byte de etiqueta. |
| 32 | 32 | withdraw_withheld_authority |
OptionalNonZeroPubkey |
Reclama las comisiones retenidas de las Token Accounts. Todo a cero = None (comisiones no cobrables). |
| 64 | 8 | withheld_amount |
u64 LE |
Total de comisiones retenidas a nivel de Mint (separado de los montos retenidos por cuenta). |
| 72 | 18 | older_transfer_fee |
struct TransferFee |
Configuración previa a la actualización — activa hasta que llega newer.epoch. |
| 90 | 18 | newer_transfer_fee |
struct TransferFee |
Configuración activa a partir de newer.epoch. |
El struct anidado TransferFee ocupa 18 bytes:
| Offset | Tamaño | Campo | Tipo | Notas |
|---|---|---|---|---|
| 0 | 8 | epoch |
u64 LE |
Epoch en que esta configuración entró (o entrará) en vigor. |
| 8 | 8 | maximum_fee |
u64 LE |
Tope absoluto en unidades atómicas (por transferencia). |
| 16 | 2 | transfer_fee_basis_points |
u16 LE |
Tasa de comisión en puntos básicos (100 = 1%). |
Carga útil total: 108 bytes.
Por qué dos configuraciones de comisión
Los cambios de comisión no surten efecto de inmediato. Cuando la autoridad fija una nueva comisión vía SetTransferFee, el valor va a newer_transfer_fee con epoch fijado dos epochs por delante; hasta entonces, la red sigue cobrando older_transfer_fee. El modelo de dos configuraciones + epoch da a los titulares una ventana para reaccionar antes de que entre la nueva tasa.
Un decodificador que muestre la comisión actual debe leer el epoch actual del clúster y elegir newer si epoch_actual >= newer.epoch, en caso contrario older. Mostrar solo newer.transfer_fee_basis_points es el error canónico aquí.
Dónde lo encuentras
PYUSD (la stablecoin de PayPal) lleva esta extensión con una configuración de 0 puntos básicos — presente para la auditabilidad de cumplimiento sin cobrar realmente. Los despliegues con comisión real son más raros pero crecientes: tokens comunitarios de reparto de ingresos, tokens RWA con regalías de transferencia, y algunos memecoins experimentales que enrutan comisiones a una billetera del creador.
Errores comunes
- Las extensiones de Token-2022 usan una tercera codificación opcional:
OptionalNonZeroPubkey. Mismo tamaño de 32 bytes que unaPubkeynormal sin byte de etiqueta — todos los bytes a cero significan None. Distinta tanto delCOption<Pubkey>de SPL (etiqueta de 4 bytes + 32 = 36 bytes) como delOption<Pubkey>de Borsh (etiqueta de 1 byte + 32 = 33 bytes). Tres codificaciones opcionales coexisten en una sola cuenta de Token-2022. - Las comisiones se retienen, no se queman. La comisión se resta del saldo del emisor y aterriza en la extensión
TransferFeeAmount.withheld_amountpor cuenta del destinatario. Lawithdraw_withheld_authorityluego las recoge víaWithdrawWithheldTokensFromAccountsyWithdrawWithheldTokensFromMint. maximum_feees por transferencia, no por periodo. Una comisión del 1% sobre una transferencia de 1.000.000 USDC conmaximum_fee = 1000se topa en $0,001 (unidades atómicas = 1000), no en los $10.000 que implicarían los puntos básicos sobre una comisión sin tope.- Retraso de actualización de dos epochs. Fijar una nueva comisión no surte efecto hasta el epoch siguiente al siguiente — aproximadamente cuatro o cinco días en producción. Planifica los textos de la interfaz y las notificaciones en torno a ese retraso.
- Leer la comisión activa requiere el epoch actual del clúster. No muestres los parámetros de
newer_transfer_feecomo «la comisión» a menos que el epoch haya cambiado; de lo contrario, los usuarios ven una tasa que aún no están pagando.
Última verificación: 2026-05-19