解碼 Coinbase 交易之外的區塊
我正在嘗試解碼一個塊並設法解碼 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 交易一樣被解碼。