Decodificador de Transação Tron

Cole raw_data_hex, uma transação assinada completa, ou o JSON do TronGrid ou do tronWeb. O protobuf é decodificado localmente, o txID é calculado, o signatário é recuperado da assinatura, e chamadas TRC-20 são convertidas em destinatário e valor.

Assinada ou não. A decodificação roda no seu navegador; nada é enviado a lugar nenhum, então é seguro para transações não assinadas que você está prestes a assinar.
Exemplos:

Decodificado no seu navegador com JavaScript. Os endereços nunca são enviados nem armazenados.

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

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 contratoO que fazCampos principais
TransferContractenviar TRXowner_address, to_address, amount (sun)
TriggerSmartContractchamar um contrato (transferência TRC-20, approve, swap)contract_address, data, call_value
TransferAssetContractenviar um token TRC-10asset_name, to_address, amount
FreezeBalanceV2 / UnfreezeBalanceV2fazer ou desfazer stake de TRX para energia ou bandwidthfrozen_balance, resource
DelegateResourceContractemprestar energia ou bandwidth a outra contareceiver_address, balance, resource
VoteWitnessContractvotar em super representantesvotes (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.

Perguntas frequentes

O que é raw_data_hex?

A serialização em protobuf de Transaction.raw: bloco de referência, expiração, timestamp, limite de taxa e a lista de contratos. Seu SHA-256 é o txID, e é o que a chave privada assina. O transactionBuilder do tronWeb o retorna junto com uma visão em JSON.

Como o signatário é recuperado?

A Tron usa secp256k1 como o Ethereum. O decodificador faz o hash de raw_data com SHA-256 e recupera a chave pública da assinatura de 65 bytes, depois deriva o endereço T…. Se ele bate com o owner_address, a transação foi assinada pela chave do owner; se não, foi assinada por uma chave de permissão ativa (multisig) ou é inválida.

Quais tipos de contrato são decodificados?

TransferContract (TRX), TriggerSmartContract (transferências TRC-20 e outras chamadas, com argumentos do calldata), TransferAssetContract (TRC-10), CreateSmartContract, FreezeBalanceV2 / UnfreezeBalanceV2, DelegateResource / UnDelegateResource, WithdrawExpireUnfreeze, VoteWitness, AccountCreate e AccountUpdate. Outros tipos mostram seus campos protobuf brutos.

Por que o txID do JSON difere do calculado?

Nunca deveria diferir. Se difere, o raw_data_hex e o txID do JSON não pertencem à mesma transação, o que é sinal de adulteração ou de um erro de copiar e colar. O decodificador sinaliza isso.

Por que a assinatura tem 65 bytes?

São r (32 bytes), s (32 bytes) e um recovery id v (1 byte), o mesmo layout que o Ethereum usa. O recovery id é o que permite ao decodificador derivar a chave pública do signatário, e portanto o endereço T…, sem que o endereço esteja armazenado na transação.

Posso decodificar uma transação antes de a TronLink assiná-la?

Sim. O objeto passado para tronWeb.trx.sign contém raw_data_hex; cole o objeto inteiro. O resultado mostra exatamente qual chamada de contrato você está prestes a autorizar.