Transacción fallida en TRON: REVERT, TRX quemados y qué se recupera
El estado REVERT significa que el contrato rechazó la llamada: sus USDT siguen en su dirección y solo se cobra la energy hasta la reversión y el bandwidth. Causas, Tronscan y qué hacer.
Respuesta corta: el estado REVERT significa que el propio contrato inteligente rechazó su llamada: una comprobación dentro de su código no se cumplió y la red revirtió todos los cambios. El monto que intentó enviar o intercambiar sigue en su dirección. Lo único que pierde es lo que la red consumió antes del punto de reversión: energy (o TRX quemados en su lugar) y bandwidth por la propia transacción. No tiene sentido reintentar hasta corregir la causa: un segundo REVERT volverá a cobrar recursos.

Qué es REVERT en TRON
REVERT es uno de los códigos estándar de resultado de ejecución de contratos en el protocolo TRON. Figura en Tron.proto del repositorio java-tron (la enumeración contractResult) junto a SUCCESS, OUT_OF_ENERGY y otros resultados. Aparece cuando el código del contrato llega a una instrucción de reversión: una condición como «el saldo es suficiente», «la dirección no está bloqueada» o «el precio está dentro de la tolerancia» resultó falsa y el contrato detuvo la ejecución a propósito.
Una transacción en TRON es atómica: o se ejecuta por completo o se deshacen todos sus cambios. Por eso no existe un REVERT «parcial»: el destinatario no recibió nada y su saldo del token no cambió. Aun así, la transacción entró en un bloque: se ve en el explorador, tiene TXID y estado FAILED.
REVERT frente a OUT_OF_ENERGY: en qué se diferencian
Ambos errores muestran FAILED, pero las causas y el coste son distintos. OUT_OF_ENERGY significa que al contrato le faltaron recursos para terminar (si busca más guías sobre errores, vea el blog). REVERT significa que había recursos suficientes, pero el contrato mismo dijo que no. La diferencia importa para su billetera: según la documentación de TRON sobre fee_limit, la ejecución normal y REVERT liquidan la energy realmente usada, mientras que fallos excepcionales como OUT_OF_TIME o una instrucción ilegal pueden cobrar el máximo de energy permitido para la transacción.
- REVERT: el contrato rechazó la llamada por su propia comprobación. Se cobra la energy usada hasta el punto de reversión.
- OUT_OF_ENERGY: la energy y los TRX dentro de fee_limit no alcanzaron para terminar. Se resuelve con recursos, no cambiando parámetros.
- Otras excepciones (tiempo agotado, instrucción ilegal): pueden cobrar todo el límite de energy de la transacción.
- SUCCESS: la transferencia se realizó. Si los fondos «no llegaron», el problema está del lado del destinatario o del exchange, no de la red.
Qué se quema y qué se conserva
- El monto de la transferencia o del intercambio se queda en su dirección. Los cambios de saldo se revierten por completo.
- La energy consumida antes del punto de reversión no se devuelve. La documentación indica claramente que la energy consumida nunca se reembolsa, aunque la transacción se revierta después.
- Los TRX quemados en lugar de energy tampoco se devuelven. Si su dirección no tenía energy, la red cubrió el coste quemando TRX dentro de fee_limit.
- El bandwidth se cobra. La transacción entró en un bloque y sus bytes siempre se pagan: con las 600 unidades gratuitas diarias o quemando TRX cuando se agotan.
- Energy alquilada: la parte consumida se pierde; el resto está disponible hasta que termine el plazo del alquiler.
La buena noticia es que un REVERT suele costar menos que una transferencia completa: los contratos a menudo rechazan en las primeras comprobaciones, antes de escribir saldos. La mala es que una serie de reintentos con el mismo error cobra recursos cada vez.
Causas frecuentes de REVERT para usuarios de USDT
1. El monto supera el saldo del token
Las billeteras normalmente no permiten enviar más de lo que tiene. Pero al enviar mediante una API, un script o una interfaz de terceros, se puede solicitar una transferencia superior al saldo: el contrato comprueba el saldo y la rechaza. Tenga en cuenta que USDT TRC-20 tiene seis decimales: 1 USDT en una llamada al contrato se escribe como 1 000 000 unidades mínimas. Un multiplicador incorrecto es una causa clásica de rechazos en integraciones propias. Los parámetros del token, incluidos los decimales, se ven en la página del contrato de USDT en Tronscan.
2. La dirección del remitente está congelada por el emisor
El contrato de USDT permite al emisor bloquear direcciones. Una transferencia desde una dirección bloqueada no se realizará, por mucha energy que tenga. Antes de operar con fondos de origen dudoso, compruebe la dirección con un servicio de análisis AML.
3. Falta la autorización (approve) para gastar
Servicios, bots y pasarelas de pago suelen retirar tokens mediante transferFrom, lo que exige que el propietario haya otorgado antes una autorización por el monto necesario. Si la autorización es menor que el monto de la operación o nunca se otorgó, el contrato rechaza la llamada.
4. Intercambios en DEX: deslizamiento y plazo vencido
Al intercambiar en un exchange descentralizado, usted fija un monto mínimo a recibir y un plazo de validez. Si mientras la transacción esperaba entrar en un bloque el precio del pool se movió más allá de la tolerancia o venció el plazo, el contrato del pool revierte el intercambio. En los intercambios, es la causa más frecuente de REVERT.
5. Parámetros de llamada incorrectos
Una dirección de contrato equivocada, argumentos intercambiados o la llamada a una función que el contrato no admite pueden terminar en reversión. Es una situación típica para quienes empiezan a trabajar con TRC-20 desde código.
Cómo leer la causa en Tronscan
Abra Tronscan y pegue el TXID en el buscador. Para este error bastan cuatro campos:
- Estado y resultado: FAILED y REVERT. Si el resultado es otro, consulte la sección correspondiente más arriba.
- Mensaje de rechazo: si el contrato devolvió un texto con el motivo, el explorador puede mostrarlo junto al resultado. Es la pista más útil.
- Recursos: cuánta energy y bandwidth se cobraron y cuántos TRX se quemaron: su pérdida real.
- Método llamado y parámetros: transfer, transferFrom o una función de intercambio, la dirección del destinatario y el monto. Aquí se ven los errores de monto y dirección.
Qué hacer después de un REVERT
- No pulse «enviar» de nuevo enseguida. Sin corregir la causa, el reintento producirá el mismo rechazo y volverá a cobrar recursos.
- Compare su saldo del token con el monto de la operación, incluidos los seis decimales de USDT.
- Para operaciones a través de un servicio, revise la autorización (approve) otorgada y, si hace falta, otórguela por el monto necesario.
- Para un intercambio, actualice la cotización, aumente con cuidado la tolerancia de deslizamiento si es necesario y vuelva a enviarlo.
- Si sospecha que la dirección está bloqueada, compruébelo antes de cualquier nuevo intento: la energy no ayudará aquí.
- Antes de reintentar, asegúrese de que la dirección tenga energy para la operación y así no quemar TRX.
Si envía transferencias desde código, simule la llamada antes de difundirla. El método triggerconstantcontract ejecuta el contrato sin publicar la transacción y devuelve una estimación de energy y el resultado, incluido el rechazo si se produjera. Así detecta un REVERT gratis, antes de que la red cobre recursos.
Cómo dejar de perder TRX en transacciones fallidas
No es posible descartar por completo los rechazos: el precio de un pool o el estado de una dirección pueden cambiar en los segundos en que la transacción espera un bloque (un bloque de TRON dura 3 segundos). Pero sí puede reducir al mínimo el coste de un rechazo.
- Compruebe saldo, autorizaciones y dirección antes de enviar, no después.
- En integraciones, simule la llamada antes de difundirla y fije fee_limit con margen sobre la estimación, sin inflarlo muchas veces.
- Mantenga energy en la dirección para las operaciones previstas: así tanto una transferencia exitosa como un rechazo se pagan con recursos y no con TRX quemados. Sin energy, una transferencia normal de USDT quema unos 6,5 TRX, o unos 13 hacia una dirección vacía.
- Para una serie de transferencias, alquile el volumen para toda la serie de una vez: una transferencia normal de USDT a una dirección que ya tiene USDT usa unos 64 500–65 000 de energy, y aproximadamente el doble (~131 000) hacia una dirección vacía.
Una vez corregida la causa, resuelva los recursos con antelación: puede alquilar energy para una transferencia en el bot @overtronbot o en el sitio web: la energy se delega a su dirección on-chain, sin claves privadas. El estado del servicio se muestra en la página de estado.
Read also
¿Perdí mis USDT después de un REVERT?
No. REVERT revierte todos los cambios de saldo, así que el monto de la transferencia sigue en su dirección. Solo pierde los recursos consumidos antes de la reversión.
¿Me devolverán los TRX quemados en una transacción fallida?
No. La energy y los TRX consumidos durante la ejecución nunca se reembolsan, aunque la transacción se revierta después. Es una regla del protocolo, no de una billetera.
¿Por qué un REVERT suele ser más barato que OUT_OF_ENERGY?
Con REVERT se paga la energy realmente usada hasta el punto de rechazo. Fallos excepcionales como el tiempo agotado pueden cobrar todo el límite de energy de la transacción.
¿Puedo simplemente volver a enviar la transferencia?
Solo después de corregir la causa. Un reintento con los mismos parámetros choca con la misma comprobación del contrato y vuelve a cobrar recursos.
¿Alquilar energy evita un REVERT?
No: REVERT es un rechazo del contrato, no una falta de recursos. Pero con energy alquilada, un intento fallido se paga con recursos y no con TRX quemados.
¿Dónde veo el motivo del rechazo?
En Tronscan por TXID: estado FAILED, resultado REVERT y, si el contrato devolvió un texto con el motivo, el mensaje de rechazo. Allí también se ven el método llamado y los parámetros.
¿Por qué mi intercambio en un DEX terminó en REVERT?
Lo más habitual es que el precio del pool se moviera más allá de su tolerancia de deslizamiento o que venciera el plazo. Actualice la cotización y vuelva a enviarlo.
¿Cómo puede un desarrollador detectar un REVERT antes de enviar?
Simulando la llamada con triggerconstantcontract: ejecuta el contrato sin difundirlo y devuelve una estimación de energy y el resultado, incluido el rechazo.


