Глоссарий / Транзакции и комиссии
Идентификатор транзакции
Другие названия: Transaction ID, Txid, Хеш транзакции.
- Что такое идентификатор транзакции?
- Идентификатор транзакции представляет собой шестнадцатеричный отпечаток транзакции биткоина длиной 64 символа, полученный двойным хешированием по алгоритму SHA-256, и именно так все обозначают этот платеж.
Идентификатор никто не назначает: он вытекает из самого содержимого транзакции, поэтому изменение одного сатоши дает совершенно другой. Значение имеет длину 32 байта, печатается как 64 шестнадцатеричных символа и показывается в обратном порядке байтов любым обозревателем блоков. Это единственная строка, которая позволяет вам и службе поддержки биржи смотреть на один и тот же платеж.
Как это работает
Получение идентификатора транзакции занимает два шага и не требует секретов. Транзакция сериализуется в свою сырую байтовую форму, затем дважды проходит через SHA-256, и полученные 32 байта являются идентификатором. Любой, у кого есть сырые байты, получает тот же результат, поэтому идентификатор нельзя зарезервировать, запросить или подделать.
Порядок отображения первым делом сбивает людей с толку. Биткоин хеширует внутри в одном направлении, а печатает в другом, поэтому байты, которые вы видите в обозревателе, идут в обратном порядке относительно байтов в файле. Ничего не сломано, когда инструмент разработчика показывает вам строку, которая выглядит перевернутой.
SegWit разделил идентификатор на два. С тех пор как BIP141 активировался на блоке 481 824, 24 августа 2017 года, идентификатор транзакции вычисляется по транзакции без ее данных свидетеля, тогда как второй идентификатор, wtxid, охватывает все, включая подписи. Причина в изменяемости: раньше подписи мог перекодировать любой, кто ретранслировал транзакцию, меняя идентификатор, тогда как деньги оставались ровно там, куда шли. Mt. Gox в феврале 2014 года винил изменяемость в пропаже своих монет, но исследование Декера и Ваттенхофера измерило фактические атаки и установило, что изменяемости можно было приписать лишь 386 BTC до того, как биржа остановила вывод средств, против сотен тысяч монет, которые она потеряла.
Идентификатор также является тем, на что фиксируется блок. Каждый идентификатор транзакции в блоке хешируется в корень Меркла, хранящийся в заголовке блока, поэтому майнер не может тихо заменить один платеж другим задним числом.
Почему это важно при покупке биткоина
Идентификатор транзакции является единственным доказательством, которое переживает разрыв между двумя компаниями. Когда вывод с Coinbase или Bitstamp не пришел, обращение в поддержку не сдвинется с места, пока вы его не предоставите, а когда он у вас есть, обращение больше не нужно: вставьте строку в любой обозреватель блоков и сами увидите выходы, комиссию и число подтверждений. Это также самый быстрый способ узнать, задержка вызвана очередью биржи или очередью сети.
Обратный случай опасен. Идентификатор транзакции доказывает, что платеж существует, а не то, что он отправлен вам, не то, что он будет подтвержден, и не то, что отправитель тот, за кого себя выдает. Продавцам на одноранговых площадках обычно показывают скриншот страницы обозревателя, и они передают товар, не проверив, платит ли какой-либо выход в этой транзакции на адрес, который они контролируют. Проверьте адрес, проверьте сумму и проверьте подтверждения, именно в таком порядке.
Неподтвержденные идентификаторы тоже могут исчезнуть. Полный replace-by-fee является политикой ретрансляции по умолчанию в современных версиях Bitcoin Core, поэтому отправитель может распространить конкурирующую версию того же платежа, и у этой версии будет другой идентификатор. Bitcoin Core также отбрасывает транзакции, которые он держал дольше 336 часов, то есть 14 дней. Сообщение обозревателя "transaction not found" (транзакция не найдена) обычно означает, что произошло одно из этих двух событий, а не что ваши биткоины пропали.
Как читать идентификатор транзакции генезис-блока
Самый старый идентификатор транзакции в биткоине является 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b, единственная транзакция в блоке, добытом 3 января 2009 года. Поскольку этот блок содержит одну транзакцию и ничего больше, корень Меркла блока является той же самой строкой, и это самое ясное пояснение того, как работает фиксация.
Эта транзакция платит 50 BTC на публичный ключ, и Bitcoin Core так и не добавил выход в свой набор неизрасходованных выходов, поэтому идентификатор обозначает деньги, которые никогда не смогут двинуться. Она также несет газетный заголовок "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks" внутри своего поля coinbase.
Зависимость работает в одну сторону. Измените одну букву этого заголовка, и и идентификатор транзакции, и корень Меркла станут неузнаваемыми, поэтому идентификатор является отпечатком, а не меткой. Выбрать его нельзя, и отредактировать транзакцию, не получив новый, нельзя.
Идентификатор транзакции vs адрес биткоина
Адрес является местом назначения, а идентификатор транзакции является записью о событии. Адреса можно выдавать заранее и использовать повторно; идентификаторы существуют только после того, как транзакция построена. Отправить биткоины на идентификатор транзакции невозможно, и кошельки отклоняют попытку, потому что строка не проходит проверку контрольной суммы адреса. Мошенники, выдающие себя за поддержку, пользуются путаницей: просят «ваш идентификатор транзакции», а затем дают свой собственный адрес.
Идентификатор транзакции vs outpoint
Идентификатор транзакции обозначает целую транзакцию, которая может заплатить 300 разным людям в одном пакете биржи. Outpoint обозначает один выход внутри нее и записывается как идентификатор, двоеточие и индекс выхода. Экраны управления монетами, подтверждения на аппаратных кошельках и файлы PSBT работают с outpoint, поэтому одного идентификатора недостаточно, чтобы сказать, какой именно биткоин вы имеете в виду.