Хеш транзакции: что это и как он устроен

Хеш транзакции — её цифровой отпечаток: строка фиксированной длины, которую вычисляют из содержимого перевода. В кошельках и обозревателях он подписан по-разному — Hash, TxHash, TXID, Transaction ID, по-русски пишут и «хеш», и «хэш», — но это одно и то же. Здесь — как этот отпечаток получается, почему его нельзя подделать и когда у перевода он меняется. Где найти хеш своего перевода и как его проверить, рассказано на странице проверки хеша транзакции.

Что делает хеш-функция

Хеш-функция превращает данные любого размера в строку одной и той же длины. Блокчейны используют криптографические хеш-функции и держатся на трёх их свойствах:

  • Детерминированность. Одна и та же транзакция всегда даёт один и тот же хеш. Любой узел сети, посчитав его сам, получит ту же строку, поэтому хеш и служит общим номером операции.
  • Лавинный эффект. Стоит изменить во входных данных один знак — сумму, адрес, комиссию, — и хеш меняется целиком, а не в одном символе. Похожие транзакции не дают похожих хешей.
  • Необратимость. По хешу нельзя восстановить транзакцию. Обозреватель не «расшифровывает» хеш, а ищет по нему запись в блокчейне — для него хеш только ключ поиска.

В Bitcoin, Ethereum и TRON хеш занимает 256 бит — в шестнадцатеричной записи это 64 символа из цифр 0–9 и букв a–f. Таких строк 2256, это число из 78 цифр, поэтому у двух разных транзакций хеш на практике не совпадает.

Из чего хеш считается в разных сетях

Хеш-функция и набор данных у каждой сети свои:

СетьФункцияИз чего считается
BitcoinSHA-256, применённый дваждыДанные транзакции — входы, выходы, суммы. Подписи SegWit-переводов в расчёт не входят
Ethereum, BNB Chain, Polygon и другие EVM-сетиKeccak-256Подписанная транзакция целиком, в том виде, в каком она уходит в сеть
TRONSHA-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.

ОБРАТНАЯ СВЯЗЬ

Остались вопросы? Напишите нам

Заполните форму — и вам обязательно ответят.

ОБРАТНАЯ СВЯЗЬ

Остались вопросы? Напишите нам

Заполните форму — и вам обязательно ответят.