Block

解碼 Coinbase 交易之外的區塊

  • February 23, 2018

我正在嘗試解碼一個塊並設法解碼 Coinbase 交易,但在交易之後,它們之間存在我不理解的巨大差距。

以此Block為例:0000000000000000002e5b55bf93c89cc3a41de24d762fa4f68e725da3b089ba

這是我嘗試解碼這個塊:

===== 塊開始 =====

00000020 - 交易版本

15F11A82BE84CCCAF4E59CFC0C89EF01CAD854DC15F33D000000000000000000 - 塊雜湊

CC2DCEAF96439181993C564CBE889F60FDB98E8EFD4E524D9EEA3C54CF400504 - 默克爾根

2BDF8F5A - 時間戳

DC975D17 - 位

3E2A4065 - 隨機數

FD8704 - 總交易

01000000 - 交易版本

01 - Coinbase 有 1 筆交易

===== Coinbase 開始 =====

0000000000000000000000000000000000000000000000000000000000000000000 - 幣基雜湊

FFFFFFFF - 索引

45 - 下巴腳本長度 (69)

-> 03 - 字節高度

-> 43CA07FA - 高度

-> BE6D6DCAEEFE495F6BCA08E10FF6D24555166C2456D8129213354E32FD73EB1B141AB00100000000000000036507000F312D7B080100275C012F736C7573682F - 下巴

00000000 - 序列

03 - 3 coinbase 輸出

AA5CB94C00000000 - 從 coinbase 輸出 satoshis

19 - Coinbase 輸出腳本長度 (25)

76 - OP_DUP

A9 - OP_HASH160

14 - 20 字節

7C154ED1DC59609E3D26ABB2DF2EA3D587CD8C41 - 雜湊數據

88 - OP_EQUALVERIFY

AC - OP_CHECKSIG

00000000 - 鎖定時間

===== Coinbase 結束 =====

000000002C6A4C2952534B424C4F434B3AA5BA6C5D1EFFA2034E994BEEE65C619DE2D2A1 - 出點?

B91892F193C170CAB74F152EAE0000000000000000266A24AA21A9ED85F7D06CCF8014D990E0242ACC0433EAF134732094E9A083A45AC3799259C9170000000001000000014FFBE86D2805AF78459BBF5FA3432A5E9C84D408F7921BF2095488B9DDC39D33 - ?

02000000 - Tx 版本

6B - 中文 SigScript 長度 (107)

48 - 中文 SigScript 長度 (72)

3045022100FAD6F0A91A89A90D17800B55B1B1E424338BFB5D72D3970ED95310AFEB4734A50220120B24AF1444E520EB77ECE73DB6D9775159220B089D284948BC9DBC15F6C

21 - 中文 SigScript 長度 (33)

02227CEDFAB55D1B7642D47A5AC92638ED8822A23C3DDADF88DEFEA45A37F5935E - TxIn SigScript

FFFFFFFF - TxIn 序列

02 - TxOut 計數

F0874B0000000000 - Satoshis (BTC 0.0495)

17 - 長度 (23)

A9 - OP_HASH160

14 - 20 字節

98808E526D3737F044F2DD5445A27DB39BAD821D - 雜湊數據

87 - OP_EQUAL

92F6E73600000000 - Satoshis (BTC 9.21171602)

19 - 長度 (25)

76 - OP_DUP

A9 - OP_HASH160

14 - 20 字節

B08F46E4D21CD0547A8A1E2E43E5440284F710A4

88 - OP_EQUALVERIFY

AC - OP_CHECKSIG

00000000 - 鎖定時間

=====================

01000000 - ?

01 - ?

DE74875C17CE6730AF727B52913FAB9FF7922BBA806932785A824A8CAA649E8D0100000000FFFFFFFF02D5C267130000000017A91433A9DB4ED408225EFE4B00DC55F962B52E8769B987A7C6D10200000000220020701A8D401C84FB13E6BAF169D59684E1 …更多數據…

似乎在我解碼了 Coinbase 交易(Coinbase 之後的第一個正確交易)之後,我遇到了一個試圖解決的問題:

000000002C6A4C2952534B424C4F434B3AA5BA6C5D1EFFA2034E994BEEE65C619DE2D2A1B91892F193C170CAB74F152EAE0000000000000000266A24AA21A9ED85F7D06CCF8014D990E0242ACC0433EAF134732094E9A083A45AC3799259C9170000000001000000014FFBE86D2805AF78459BBF5FA3432A5E9C84D408F7921BF2095488B9DDC39D33

只有在那之後,數據看起來是否更熟悉 02000000,我猜是 Tx 版本,然後是 TxIn 腳本數據等等。

我想要一些幫助來了解如何解碼 Block,因為在閱讀了線上發現的比特幣文件後,我只能猜到這些,這些文件沒有以統一且易於準備的方式記錄。

我在這裡先向您的幫助表示感謝。

此處描述了塊的格式:https ://bitcoin.org/en/developer-reference#serialized-blocks

交易的格式主要在這裡描述:https ://bitcoin.org/en/developer-reference#raw-transaction-format

然而,有些交易是隔離見證交易,所以它們有一些額外的欄位在上述文件中沒有描述。這些欄位在這裡描述:https ://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki


您的解碼有點錯誤:

00000020 - 交易版本

那是塊版本,而不是交易版本。

01000000 - 交易版本

01 - Coinbase 有 1 筆交易

您實際上在這裡錯過了兩個欄位。交易的前 7 個字節是01000000000101. 這些如下:

01000000 - Transaction version
00 - Segwit marker byte
01 - Segwit flag byte
01 - Number of inputs

請注意,隔離見證標記和標誌字節僅存在於隔離見證交易中,並指示給定交易是隔離見證交易。

===== Coinbase 開始 =====

交易版本和之後的計數都屬於 coinbase 交易的一部分。計數不是交易數量,而是輸入數量。交易由輸入和輸出組成,而不是其他交易。

-> BE6D6DCAEEFE495F6BCA08E10FF6D24555166C2456D8129213354E32FD73EB1B141AB00100000000000000036507000F312D7B080100275C012F736C7573682F - 下巴

不,這仍然是 scriptSig 的一部分。它本身不是交易輸入。這只是礦工放在那裡的 coinbase 交易的 scriptSig 中的任意數據。

00000000 - 鎖定時間

===== Coinbase 結束 =====

000000002C6A4C2952534B424C4F434B3AA5BA6C5D1EFFA2034E994BEEE65C619DE2D2A1 - 出點?

B91892F193C170CAB74F152EAE0000000000000000266A24AA21A9ED85F7D06CCF8014D990E0242ACC0433EAF134732094E9A083A45AC3799259C9170000000001000000014FFBE86D2805AF78459BBF5FA3432A5E9C84D408F7921BF2095488B9DDC39D33 - ?

不,有三個輸出,但您只解碼了其中一個。

正確的解碼如下:

0000000000000000 - Amount in satoshis
2c - scriptPubKey is 44 bytes
6a - OP_RETURN
4c - OP_PUSHDATA1
29 - Push 41 bytes to stack
52534b424c4f434b3aa5ba6c5d1effa2034e994beee65c619de2d2a1b91892f193c170cab74f152eae - 41 bytes of data
0000000000000000 - Amount in satoshis
26 - scriptPubKey is 38 bytes
6a - OP_RETURN
24 - Push 36 bytes to stack
aa21a9ed85f7d06ccf8014d990e0242acc0433eaf134732094e9a083a45ac3799259c917 - 36 bytes of data. This data is the witness commitment as described in [BIP 141](https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#Commitment_structure)

實際上,您的細分中沒有交易的下一部分。它是見證數據和鎖定時間。

01 - 一個見證堆棧項 20 - 堆棧項長度為 32 個字節 0000000000000000000000000000000000000000000000000000000000000000 - 堆棧項 00000000 - 鎖定時間

然後下一個交易開始01000000014FFBE86D2805AF78459BBF5FA3432A5E9C84D408F7921BF2095488B9DDC39D33...並像上面的 coinbase 交易一樣被解碼。

引用自:https://bitcoin.stackexchange.com/questions/71329