O que é uma transação Tron bruta?
Uma transação Tron bruta é a mensagem Transaction.raw serializada em protobuf, que o TronGrid e o tronWeb expõem como raw_data_hex: bytes e hash do bloco de referência, expiração, timestamp, limite de taxa, dados de memo opcionais e uma lista de contratos tipados como TransferContract ou TriggerSmartContract. O txID é o SHA-256 desses bytes, e a assinatura é uma assinatura secp256k1 de 65 bytes sobre esse mesmo hash.
Campos explicados
- Expiração: a transação é rejeitada depois desse horário (normalmente 60 segundos após a criação). Uma transação expirada é o motivo mais comum de falha na transmissão.
- Limite de taxa: o máximo de TRX que pode ser queimado em energia numa chamada de contrato; ausente em transferências simples.
- Permission ID: 0 para a permissão de owner, 2 ou mais para permissões ativas em configurações multiassinatura.
- Ref block: o bloco ao qual a transação está ancorada; os nós o usam para rejeitar transações obsoletas.
Transferências TRC-20
Um pagamento em USDT na Tron é um TriggerSmartContract cujo contract_address é o token e cujo data é transfer(address,uint256). O decodificador mostra o destinatário tanto como o argumento hex bruto de 20 bytes quanto como o endereço T…, e o valor em unidades brutas (o USDT tem 6 decimais, então divida por 1.000.000).
Tipos de contrato que o decodificador entende
| Tipo de contrato | O que faz | Campos principais |
|---|---|---|
| TransferContract | enviar TRX | owner_address, to_address, amount (sun) |
| TriggerSmartContract | chamar um contrato (transferência TRC-20, approve, swap) | contract_address, data, call_value |
| TransferAssetContract | enviar um token TRC-10 | asset_name, to_address, amount |
| FreezeBalanceV2 / UnfreezeBalanceV2 | fazer ou desfazer stake de TRX para energia ou bandwidth | frozen_balance, resource |
| DelegateResourceContract | emprestar energia ou bandwidth a outra conta | receiver_address, balance, resource |
| VoteWitnessContract | votar em super representantes | votes (address, count) |
Exemplo prático
Um pagamento em USDT decodifica para um TriggerSmartContract cujo contract_address é TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t e cujo data é a9059cbb + o destinatário como palavra de 32 bytes + o valor. Dados terminando em …0bebc200 significam 200.000.000 unidades brutas = 200 USDT (6 decimais). Um fee_limit de 100000000 sun limita o custo de energia a 100 TRX, e uma expiration 60 segundos após o timestamp é o padrão do tronWeb.
Relacionados: conversor de endereços Tron, validador de endereços USDT, transferência em lote na Nile.