關於 Coinbase 交易結構的一些疑問?
我試圖了解 coinbase 交易的結構。我嘗試了一些來源,但我仍然對只有 1 個輸出的結構有一些疑問。這是我所知道的,疑問以**?** :
[PARAMETER] [SIZE] [ENDIANNESS] [ALLOWED VALUES] - version - 4 Bytes - LE - 01000000 - input count - 1 Bytes - xx - 01 - prev tx - 32 Bytes - xx - 0000000000...0000 - prev out n - 4 Bytes - xx - ffffffff (outpoint index or fake index) - coinbase script length (LCS) - <?> Bytes - <?> - <what is value range of LCS i.e. min and max Bytes?> - coinbase script - LCS Bytes : 1 Bytes - xx - 03 (Size of Block Height in next 3 Bytes) 3 Bytes - LE - __ (Valid Block Height in LE for Block being mined) [LCS-4 Bytes] - xx - xx (ANY binary string is Valid. ANY STRING!!!!) - sequence - 4 Bytes - xx - ffffffff - output count - 1 Bytes - xx - 01 - value - <?> Bytes - LE - __ (mining reward + transaction fee of all other included transactions in Satoshi) - script length (SL) - 1 Bytes - xx - (what is value range of SL i.e. min and max bytes, or is it fixed size?) - pubkey script - SL Bytes - <?> - __ (What is this?! Is it the wallet address or the public key or something else - of the person who recieves the funds in 'value'?) - locktime - 4 Bytes - xx - 00000000 Notation: LE - Little Endian. BE - Big Endian. xx - Endianness doesn't matter. __ - User input. <..?> - Unclear.''' Q1: Can someone please address the doubts marked by ? and validate if rest of the structure is correct? Q2: Does coinbase script have any additional structure, rules or constraints that I missed including here (other than above) that can make the transaction invalid?
這些是我目前所知道的對 coinbase 交易的要求。
交易的結構與其他交易一樣,但並非所有欄位都具有相同的含義。
版本:32 位 LE 整數。對於普通事務,版本號只能是 1 或 2(相對時間鎖語義,參見 BIP 68)。對於 coinbase 交易,它沒有任何意義,可以是任何東西。
交易輸入:對於正常交易,指的是一組未花費的先前正在花費的交易輸出。對於 coinbase 交易,它不同,必須恰好有 1 個輸入,並且必須具有特定值。
Prevout 雜湊:必須為 0000…000
Prevout 索引:必須為 0xffffffff
scriptSig:對於正常(非隔離見證,見 BIP141)交易,包含證明該交易是由前一個被花費的代幣持有者授權的證明。對於 coinbase 交易,它具有不同的語義。相反,它必須:
- 從推塊高度開始(在 BIP34 中指定)
- 後跟任意數據(通常稱為 extraNonce)
- 整個 scriptSig 必須正好在 2 到 100 個字節之間(此規則早於 BIP34,因此它的下限 2 現在被塊高度推送已經大於該值的事實所取代)。
nSequence:對於普通交易,此欄位影響 BIP125 RBF 語義和相對鎖定時間語義 (BIP 68),但這些不適用於 coinbase 交易。可以是任何東西。
交易輸出:確定該交易創建了哪些 UTXO。普通交易和 coinbase 交易的語義相同。特別是,它可以包含任意數量的輸出。通常,它將包含一個或多個輸出,將開采的硬幣(補貼+區塊中其他交易的 tx 費用)提供給礦工,以及一些用於各種目的的虛擬 0 值輸出(其中之一是隔離見證承諾,如果這是segwit 塊,參見 BIP141)。
nLockTime:這具有絕對鎖定時間語義(說明交易何時生效),適用於普通交易和 coinbase 交易。
所以直接回答你的問題:
- version - 4 Bytes - LE - 01000000
事實上,它可以是任何 4 字節的值。
- input count - 1 Bytes - xx - 01 - prev tx - 32 Bytes - xx - 0000000000...0000 - prev out n - 4 Bytes - xx - ffffffff (outpoint index or fake index)
正確的。
- coinbase script length (LCS) - <?> Bytes - <?> - <what is value range of LCS i.e. min and max Bytes?> - coinbase script - LCS Bytes : 1 Bytes - xx - 03 (Size of Block Height in next 3 Bytes) 3 Bytes - LE - __ (Valid Block Height in LE for Block being mined) [LCS-4 Bytes] - xx - xx (ANY binary string is Valid. ANY STRING!!!!)
coinbase scriptSig 被編碼為 1 字節編碼腳本的長度,加上腳本本身。該腳本必須在 2 到 100 個字節之間。由於 BIP34,腳本必須以推動塊高度開始。對於目前的高度範圍(65536 到 16777215),這是一個 0x03 表示一個 3 字節的推送,後跟 3 個字節編碼 LE 中的塊高度。之後,最多可以有 96 個其他字節,它們的內容確實無關緊要。
- sequence - 4 Bytes - xx - ffffffff
這可以是任何東西。
- output count - 1 Bytes - xx - 01 - value - <?> Bytes - LE - __ (mining reward + transaction fee of all other included transactions in Satoshi)
正確的。實際上,您可以有多個輸出(並且它們的值總和必須與補貼 + tx 費用相匹配),但是 1 可以正常工作。如果要創建隔離見證塊(參見 BIP141),還需要有另一個具有特定結構的零值輸出;有關詳細資訊,請參閱 BIP。
- script length (SL) - 1 Bytes - xx - (what is value range of SL i.e. min and max bytes, or is it fixed size?) - pubkey script - SL Bytes - <?> - __ (What is this?! Is it the wallet address or the public key or something else - of the person who recieves the funds in 'value'?)
這是你想獲得挖礦獎勵的地址對應的scriptPubKey。有許多軟體庫可以為您將地址解碼為腳本,並在此站點上提供解釋它的答案。
- locktime - 4 Bytes - xx - 00000000
不是嚴格要求的,因為還有其他允許的值,但它們必須導致“最終”交易,這取決於區塊的高度和時間戳。在此處選擇 00000000 將始終有效。