Декодер транзакций Tron

Вставьте raw_data_hex, полную подписанную транзакцию или JSON из TronGrid или tronWeb. Protobuf декодируется локально, вычисляется txID, подписант восстанавливается из подписи, а вызовы TRC-20 превращаются в получателя и сумму.

Подписанная или неподписанная. Декодирование выполняется в вашем браузере; никуда ничего не отправляется, поэтому это безопасно для неподписанных транзакций, которые вы собираетесь подписать.
Примеры:

Декодируется в вашем браузере на JavaScript. Адреса никогда не загружаются на сервер и не сохраняются.

Что такое сырая транзакция Tron?

Сырая транзакция Tron — это protobuf-сериализованное сообщение Transaction.raw, которое TronGrid и tronWeb предоставляют как raw_data_hex: байты и хеш опорного блока, expiration, timestamp, лимит комиссии, необязательные данные memo и список типизированных контрактов, таких как TransferContract или TriggerSmartContract. TxID — это SHA-256 этих байт, а подпись — 65-байтная подпись secp256k1 над тем же хешем.

Пояснение полей

Переводы TRC-20

Платёж USDT в Tron — это TriggerSmartContract, у которого contract_address — это токен, а data — transfer(address,uint256). Декодер показывает получателя и как сырой 20-байтный hex-аргумент, и как адрес T…, а сумму — в сырых единицах (у USDT 6 знаков, поэтому делите на 1 000 000).

Типы контрактов, которые понимает декодер

Тип контрактаЧто делаетКлючевые поля
TransferContractотправка TRXowner_address, to_address, amount (sun)
TriggerSmartContractвызов контракта (перевод TRC-20, approve, своп)contract_address, data, call_value
TransferAssetContractотправка токена TRC-10asset_name, to_address, amount
FreezeBalanceV2 / UnfreezeBalanceV2стейкинг или анстейкинг TRX ради energy или bandwidthfrozen_balance, resource
DelegateResourceContractпередача energy или bandwidth другому аккаунтуreceiver_address, balance, resource
VoteWitnessContractголосование за суперпредставителейvotes (address, count)

Наглядный пример

Платёж USDT декодируется в TriggerSmartContract, у которого contract_address — TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t, а data — a9059cbb + получатель как 32-байтное слово + сумма. Данные, заканчивающиеся на …0bebc200, означают 200 000 000 сырых единиц = 200 USDT (6 знаков). fee_limit в 100000000 sun ограничивает стоимость energy 100 TRX, а expiration через 60 секунд после timestamp — значение tronWeb по умолчанию.

См. также: конвертер Tron-адресов, валидатор USDT-адресов, пакетный перевод в Nile.

Часто задаваемые вопросы

Что такое raw_data_hex?

Protobuf-сериализация Transaction.raw: опорный блок, expiration, timestamp, лимит комиссии и список контрактов. Её SHA-256 — это txID, и именно её подписывает приватный ключ. transactionBuilder в tronWeb возвращает её вместе с JSON-представлением.

Как восстанавливается подписант?

Tron использует secp256k1, как и Ethereum. Декодер хеширует raw_data через SHA-256 и восстанавливает публичный ключ из 65-байтной подписи, затем выводит адрес T…. Если он совпадает с owner_address, транзакция подписана ключом владельца; если нет — она подписана ключом активного разрешения (мультиподпись) или недействительна.

Какие типы контрактов декодируются?

TransferContract (TRX), TriggerSmartContract (переводы TRC-20 и другие вызовы, с аргументами calldata), TransferAssetContract (TRC-10), CreateSmartContract, FreezeBalanceV2 / UnfreezeBalanceV2, DelegateResource / UnDelegateResource, WithdrawExpireUnfreeze, VoteWitness, AccountCreate и AccountUpdate. Остальные типы показывают свои сырые поля protobuf.

Почему txID из JSON отличается от вычисленного?

Он никогда не должен отличаться. Если это происходит, raw_data_hex и txID в JSON относятся к разным транзакциям, что указывает на подмену или ошибку при копировании. Декодер это отмечает.

Почему подпись занимает 65 байт?

Это r (32 байта), s (32 байта) и recovery id v (1 байт) — та же раскладка, что в Ethereum. Именно recovery id позволяет декодеру вывести публичный ключ подписанта, а значит и адрес T…, хотя сам адрес в транзакции не хранится.

Можно ли декодировать транзакцию до того, как её подпишет TronLink?

Да. Объект, передаваемый в tronWeb.trx.sign, содержит raw_data_hex; вставьте объект целиком. Результат покажет, какой именно вызов контракта вы собираетесь авторизовать.