¿Qué es una transacción Tron en bruto?
Una transacción Tron en bruto es el mensaje Transaction.raw serializado en protobuf, que TronGrid y tronWeb exponen como raw_data_hex: bytes y hash del bloque de referencia, expiración, timestamp, fee limit, datos de memo opcionales y una lista de contratos tipados como TransferContract o TriggerSmartContract. El txID es el SHA-256 de estos bytes, y la firma es una firma secp256k1 de 65 bytes sobre ese mismo hash.
Campos explicados
- Expiración: la transacción se rechaza después de este momento (normalmente 60 segundos tras su creación). Una transacción caducada es la causa más común de una difusión fallida.
- Fee limit: el máximo de TRX que se puede quemar en energía en una llamada a contrato; no existe en las transferencias simples.
- Permission ID: 0 para el permiso de propietario, 2 o más para permisos activos en configuraciones multifirma.
- Ref block: el bloque al que está anclada la transacción; los nodos lo usan para rechazar transacciones obsoletas.
Transferencias TRC-20
Un pago en USDT en Tron es un TriggerSmartContract cuyo contract_address es el token y cuyos datos son transfer(address,uint256). El decodificador muestra el destinatario tanto como el argumento hex de 20 bytes en bruto como en forma de dirección T…, y la cantidad en unidades en bruto (USDT tiene 6 decimales, así que divide por 1.000.000).
Tipos de contrato que entiende el decodificador
| Tipo de contrato | Qué hace | Campos clave |
|---|---|---|
| TransferContract | enviar TRX | owner_address, to_address, amount (sun) |
| TriggerSmartContract | llamar a un contrato (transferencia TRC-20, approve, swap) | contract_address, data, call_value |
| TransferAssetContract | enviar un token TRC-10 | asset_name, to_address, amount |
| FreezeBalanceV2 / UnfreezeBalanceV2 | poner o retirar TRX en staking para energía o ancho de banda | frozen_balance, resource |
| DelegateResourceContract | prestar energía o ancho de banda a otra cuenta | receiver_address, balance, resource |
| VoteWitnessContract | votar a superrepresentantes | votes (address, count) |
Ejemplo práctico
Un pago en USDT se decodifica como un TriggerSmartContract cuyo contract_address es TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t y cuyos datos son a9059cbb + el destinatario como palabra de 32 bytes + la cantidad. Unos datos que terminan en …0bebc200 significan 200.000.000 unidades en bruto = 200 USDT (6 decimales). Un fee_limit de 100000000 sun limita el coste de energía a 100 TRX, y una expiration 60 segundos después del timestamp es el valor por defecto de tronWeb.
Relacionado: conversor de direcciones Tron, validador de direcciones USDT, transferencia en lote en Nile.