Хеш транзакции: что это и как он устроен
Хеш транзакции — её цифровой отпечаток: строка фиксированной длины, которую вычисляют из содержимого перевода. В кошельках и обозревателях он подписан по-разному — Hash, TxHash, TXID, Transaction ID, по-русски пишут и «хеш», и «хэш», — но это одно и то же. Здесь — как этот отпечаток получается, почему его нельзя подделать и когда у перевода он меняется. Где найти хеш своего перевода и как его проверить, рассказано на странице проверки хеша транзакции.
Что делает хеш-функция
Хеш-функция превращает данные любого размера в строку одной и той же длины. Блокчейны используют криптографические хеш-функции и держатся на трёх их свойствах:
- Детерминированность. Одна и та же транзакция всегда даёт один и тот же хеш. Любой узел сети, посчитав его сам, получит ту же строку, поэтому хеш и служит общим номером операции.
- Лавинный эффект. Стоит изменить во входных данных один знак — сумму, адрес, комиссию, — и хеш меняется целиком, а не в одном символе. Похожие транзакции не дают похожих хешей.
- Необратимость. По хешу нельзя восстановить транзакцию. Обозреватель не «расшифровывает» хеш, а ищет по нему запись в блокчейне — для него хеш только ключ поиска.
В Bitcoin, Ethereum и TRON хеш занимает 256 бит — в шестнадцатеричной записи это 64 символа из цифр 0–9 и букв a–f. Таких строк 2256, это число из 78 цифр, поэтому у двух разных транзакций хеш на практике не совпадает.
Из чего хеш считается в разных сетях
Хеш-функция и набор данных у каждой сети свои:
| Сеть | Функция | Из чего считается |
|---|---|---|
| Bitcoin | SHA-256, применённый дважды | Данные транзакции — входы, выходы, суммы. Подписи SegWit-переводов в расчёт не входят |
| Ethereum, BNB Chain, Polygon и другие EVM-сети | Keccak-256 | Подписанная транзакция целиком, в том виде, в каком она уходит в сеть |
| TRON | SHA-256 | Тело транзакции (raw_data) без подписи |
| Solana | — | Хеша нет: номером транзакции служит её первая подпись в кодировке base58 |
У Bitcoin есть особенность: кошельки и обозреватели показывают хеш в обратном порядке байт — не так, как он лежит внутри блока. Так повелось с первых версий программы, и на поиск это не влияет: все сервисы показывают один и тот же «перевёрнутый» вид.
Keccak-256 в Ethereum — алгоритм, из которого вырос стандарт SHA-3, но не сам стандарт: входные данные в нём дополняются иначе, и результат с SHA3-256 не совпадает.
Почему хеш нельзя подделать
Хеш не присваивают переводу со стороны — он вычисляется из самого перевода. Чтобы выдать другой перевод за этот, нужна транзакция с тем же хешем, то есть коллизия SHA-256 или Keccak-256, а её не нашёл никто. Поэтому хеш однозначно указывает на одну операцию: если по присланному хешу в блокчейне лежит перевод, речь именно о нём, и подменить его сумму или адрес нельзя.
Хеш защищает и историю. В Bitcoin хеши транзакций блока сводятся в одно значение — корень дерева Меркла, — которое записано в заголовке блока, а хеш заголовка входит в следующий блок. Незаметно изменить старый перевод нельзя: поменяются его хеш, корень дерева, хеш блока и хеши всех блоков после него.
Хеш блока при этом — другая строка, её считают от заголовка. В обозревателе она стоит рядом с хешем транзакции и выглядит так же, но по ней найдётся блок целиком, а не ваш перевод.
Когда у перевода меняется хеш
Хеш известен кошельку сразу после подписи — ещё до того, как перевод попадёт в блок. Но это хеш именно подписанной версии. Если отправитель заменяет перевод, у замены будет свой хеш:
- Ускорение в Ethereum и EVM-сетях. Кнопка «ускорить» в кошельке отправляет новую транзакцию с тем же порядковым номером (nonce) и большей комиссией. В блок попадёт только одна из двух, и если это ускоренная, старый хеш так и не подтвердится.
- Replace-by-fee в Bitcoin. Отправитель заменяет висящий в очереди (mempool) перевод таким же, но с большей комиссией — и с новым хешем.
- Отмена. «Отменить» неподтверждённый перевод — значит отправить на его место другую транзакцию, обычно перевод самому себе. У отмены тоже свой хеш.
Ускорить перевод можно и не меняя его хеша. В Bitcoin получатель или отправитель (через сдачу) тратит ещё не подтверждённый выход новой транзакцией с высокой комиссией — это называется CPFP. Майнеру выгодно включить в блок обе, и исходный хеш остаётся прежним.
Отсюда частая путаница: хеш, скопированный сразу после отправки, висит неподтверждённым или не находится вовсе, хотя деньги пришли, — подтвердилась замена. Её видно в истории адреса отправителя.
Подписи и хеш: зачем Bitcoin понадобился SegWit
В ранних версиях Bitcoin подпись входила в данные, из которых считался хеш. А подпись можно было слегка изменить так, что она оставалась верной: перевод уходил тот же, а хеш у него становился другим. Это называли malleability — податливостью транзакций. Деньги от этого не терялись, но программы, которые следили за переводом по хешу, могли решить, что он не прошёл.
Обновление SegWit (BIP141, 2017 год) вынесло подписи в отдельную часть транзакции — witness — и перестало учитывать её при расчёте txid. Хеш вместе с подписями у SegWit-перевода тоже есть, он называется wtxid. Кошельки и обозреватели показывают txid — его и нужно искать; у переводов без SegWit оба хеша совпадают.
Что можно узнать по хешу
Сам хеш — только номер операции: риска у него нет, и о происхождении денег он ничего не говорит. По номеру находят перевод: поиск AMLKYC по хешу показывает сеть, статус, сумму и время перевода, адреса отправителя и получателя. Откуда пришли деньги, показывает AML-проверка этих адресов, а что делать, если перевод уже получен, — страница проверки транзакции.
Частые вопросы
Из содержимого самой транзакции: адресов, сумм, комиссии и других полей. В Bitcoin это SHA-256, применённый дважды, в Ethereum — Keccak-256, в TRON — SHA-256 от тела транзакции без подписи. В Solana отдельного хеша нет: номером служит подпись.
Нет, хеш-функция работает в одну сторону. Обозреватель не вычисляет перевод из хеша, а находит его запись в блокчейне, используя хеш как ключ поиска.
На практике нет. Вариантов 256-битного хеша — число из 78 цифр, и коллизий SHA-256 и Keccak-256 до сих пор не нашёл никто.
Ускорение в кошельке обычно отправляет новую транзакцию с большей комиссией, которая заменяет старую. Комиссия входит в данные, из которых считается хеш, поэтому у замены хеш свой. Подтвердится только одна из двух.
Хеш Bitcoin-транзакции вместе с подписями (witness). Он появился с обновлением SegWit, а у переводов без SegWit совпадает с обычным txid. Для поиска перевода нужен txid.
Хеш транзакции указывает на один перевод, хеш блока — на блок со всеми вошедшими в него переводами. Хеш блока считается от его заголовка, а хеши транзакций попадают туда через корень дерева Меркла.
Проверьте первые 5 адресов бесплатно
Зарегистрируйтесь и получите 5 бесплатных AML-проверок. Полный отчёт с оценкой риска и источниками средств — за несколько секунд.
Приложение AMLKYC — проверки под рукой
Проверяйте адреса и транзакции с телефона: Telegram-бот, RuStore и App Store.
Остались вопросы? Напишите нам
Заполните форму — и вам обязательно ответят.