Die falsche txid für Coinbase-Transaktionen erhalten

Ich versuche, Transaktionen zu hashen, um die txid zu erhalten. Ich bekomme die Hex-Werte von blockchain.info. Ich bekomme den richtigen Hash für alle Transaktionen außer für die Coinbase, wenn ich sie zweimal hash. Gibt es etwas anderes daran, wie die Coinbase-Transaktion gehasht werden soll?

Der Block, den ich ausprobiert habe, ist: https://blockchain.info/no/block/0000000000000000000870497004514bd3807cdc98b9f3a57038faf5df04144f .


Die txid der Coinbase soll lauten:
44763fed906f1a0e8b82e7497ac83856baa4b1c5621affdce04108a212018c4e

Aber ich bekomme:
6e129e567970540b2812ec58388d131c3b8fdbf4e4c992d140e255895df2992e

Antworten (3)

Die txid ist der Hash der Transaktion ohne Segwit-Daten. Die vollständige Coinbase-Transaktion enthält die Segwit-Daten, die zu dem Hash führen, den Sie erhalten haben. Das ist aber nicht die txid.

Danke, würden Sie mir bitte sagen, was Segwit-Daten sind?
Siehe BIP 144: github.com/bitcoin/bips/blob/master/bip-0144.mediawiki . Der Hash, den Sie haben, ist die Zeugen-ID.

Der von Ihnen erstellte Hash ist der wtxid(Hash der Zeugen-ID), nicht der txid(Hash der Transaktions-ID):

Transaktions-ID vs. Zeugen-ID

Für den Unterschied zwischen txidund wtxidsiehe Mastering Bitcoin ch. 7 § „Transaktionskennungen“ .

Sie scheinen eine fehlerhafte Kopie der Rohtransaktion zu haben.

Wenn ich mir die Raw-Transaktion für txid in der Blockchain anschaue (Coinbase-Transaktion für Blockhöhe 486.273, Block-Hash 00000000000000000083cbfd33b63c2ac10e703266c5749bf3ce2fbff88f5791), erhalte ich Folgendes:

Code:

01000000 01000000 00000000 00000000

00000000 00000000 00000000 00000000

00000000 00ffffff ff310381 6b07244d

696e6564 20627920 416e7450 6f6f6c6b

2f454231 2f414436 2f4e5941 2f332059

c36d7be1 550000df 320000ff ffffff02

38252e4d 00000000 1976a914 66037132

6d3a2e06 4c278b20 107a65da d847e8a9

88ac0000 00000000 0000266a 24aa21a9

edc11e8c dbd8d442 b27bf8f2 73395baa

83b5da4c 9c3d87fb c539dad7 42480437

10000000 00

Wenn ich hashlib.sha256(hashlib.sha256(data).digest()).digest() für diese Daten berechne, erhalte ich das richtige Ergebnis.