Към съдържанието
ДаретеEN

Трансакции

TXID

Txid в биткойн (bitcoin) е двойният SHA-256 хеш на трансакция, който експлорърите показват в обратен ред. Вижте как се строи и как SegWit го промени.

От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.

TXID е идентификаторът на трансакцията: 32-байтов хеш, който назовава една трансакция. Построява се, като байтовете на трансакцията се хешират два пъти със SHA-256. Входовете го използват, за да посочат по-ранната трансакция, която е създала изхода, който харчат. Експлорърите го използват, за да търсят трансакции. Самите символи не описват трансакцията. Те са уникални, защото идват от данните.

При стара (legacy) трансакция TXID хешира всички байтове. При segwit трансакция той пропуска маркера, флага и witness, така че подписите не променят идентификатора.

За какво се използва TXID?

Три неща разчитат на TXID.

Първо, той назовава трансакцията. Поставете го в експлорър и ще видите входовете, изходите и броя потвърждения. Нашият експлорър показва всяка трансакция така. Можете да попитате и собствения си нод. bitcoin-cli getrawtransaction приема TXID. Ако нодът не пази пълен индекс на трансакциите (txindex=1 в bitcoin.conf), намира само трансакции в мемпула или в портфейла ви.

Второ, вход сочи изход чрез TXID и VOUT. Двойката се нарича outpoint и е това, което прави всеки изход уникален във веригата.

Трето, TXID-ите в един блок се хешират заедно в merkle root в заглавието на блока. Променете една трансакция и TXID ѝ се променя. Тогава се променят merkle root и хешът на блока.

Как се създава TXID?

TXID е HASH256 на байтовете на трансакцията, което значи SHA-256, приложен два пъти. Резултатът е 32 байта. Те са в естествен ред, който е редът, в който се пазят в суровите данни. Експлорърите ги обръщат, преди да ги покажат. Стъпките са:

  1. Сериализирайте трансакцията като сурови байтове.
  2. При стара трансакция вземете всички байтове. При segwit трансакция махнете маркера, флага и witness.
  3. Хеширайте байтовете със SHA-256, после хеширайте резултата отново със SHA-256.
  4. Обърнете 32-те байта. Резултатът е TXID, който показват експлорърите.

Следващата Python функция извършва стъпки 3 и 4. Подайте ѝ байтовете от стъпка 2 като hex низ:

import hashlib

def txid(raw_hex):
    raw = bytes.fromhex(raw_hex)
    once = hashlib.sha256(raw).digest()
    twice = hashlib.sha256(once).digest()
    return twice[::-1].hex()

Редът с bytes.fromhex превръща hex низа в байтове. Ако хешираме текста на hex низа вместо байтовете, резултатът е различен и грешен. Последният ред обръща байтовете във формата на експлорърите.

TXID е двойният SHA-256 на суровата трансакция, обърнат за експлорърите: плащането към Hal Finney дава f4184fc5…831e9e16. Сурови байтове на трансакцията Legacy: всички байтове. Segwit: без маркер, флаг и witness. HASH256: SHA-256 два пъти Резултатът е 32 байта в естествен ред. Естествен ред, в суровите данни 169e1e83e930…c54f18f4 обърнете байтовете TXID за експлорърите f4184fc5…831e9e16
Примерът е плащането към Hal Finney, чийто TXID е f4184fc5…831e9e16.

Защо байтовете са обърнати?

Хешът излиза в естествения ред, а експлорърите и повечето инструменти показват обърнатия по дългогодишна конвенция. Страницата за реда на байтовете описва двете форми. Достатъчно е да запомните това: когато копирате TXID от експлорър в суровите данни, например в полето TXID на вход, първо го обърнете. Когато го копирате от суровите данни в експлорър, обърнете го обратно.

Например плащането от 2009 г. към Hal Finney е f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16 в експлорър. В суровите данни същият хеш е 169e1e83e930853391bc6f35f605c6754cfead57cf8387639d3b4096c54f18f4. Пуснете функцията от по-горе върху пълния суров hex на тази трансакция и получавате формата на експлорърите.

Какво е TXID при segwit?

SegWit е преместил подписите във witness, а TXID, който хешира witness, би се променял всеки път, когато се промени подпис. Подписите могат да се променят, без да се променя какво прави трансакцията, така че TXID, който зависи от тях, би могъл да бъде променен след излъчването. SegWit е решил това, като е оставил witness извън TXID.

Разгледайте segwit трансакцията, която започва с 020000000001013a53de6e…. Нейният TXID, обърнат, е 6cd9ff242a04dbb6b0683c2b8576c397f341b7f0c1747b206f878db597a4cd01. Това е хешът на 82-те байта без witness, а не на всичките 191 байта. wTXID е хешът, който включва witness.

Може ли две трансакции да имат един и същ TXID?

Почти никога, но има два известни случая във веригата. И двата са coinbase трансакции от ноември 2010 г. Входът coinbase има фиксиран TXID и VOUT, а ранните майнъри са могли да използват отново същия заключващ скрипт и същата награда. Дублираните трансакции са e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468 и d5d27987d2a3dfc724e359870c6644b40e497bdc0589a033220fe15429d88599, като всяка е била изкопана в повече от един блок.

Понеже е една и съща трансакция в два блока, дубликатът не е хешова колизия. Все пак той е създал проблем. Изходите се назовават с TXID и VOUT, затова по-късно похарчване не може да различи двете копия. Могат да се харчат само изходите на по-новото копие, а 50-те BTC на всяко по-ранно копие са недостъпни.

BIP 30 е спрял създаването на нови дубликати, а BIP 34 е направил всеки coinbase уникален, като е вписал в него височината на блока. Софтуерът, който пази трансакциите в база данни, трябва да отчита тези два исторически случая.

Следващата страница, VOUT, разглежда другата половина на outpoint: индекса на изхода в трансакцията.

Източници

В този раздел: Трансакции

Целият курс „Биткойн от нулата“

Нещо не изглежда наред? Кажете ни