Bitcoin-Core-Development
為什麼在創世塊中 scriptSig 是這樣格式化的(函式 CreateGenesisBlock 內部)
我正在探索
static CBlock CreateGenesisBlock
里面的函式src/chainparams.cpp
,我正在研究 Satoshi 創建它的 scriptSig 的方式:txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << std::vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
CScript
正在使用以下輸入構造 CScript 類的對象:
486604799
Nonce
CScriptNum(4)
是否是 extraNonce
pszTimestamp
只是一個字元串“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”;為什麼
scriptSig
格式是這樣的,不應該scriptSig
包含整個交易的簽名(不僅僅是它的一小部分)和簽署交易的人的公鑰?
coinbase 交易的
scriptSig
領域是特殊的。它根本不需要任何簽名,因為沒有花費任何硬幣。該輸入所代表的產生新硬幣的能力是協議所固有的——每個區塊都被允許產生一定數量的固定數量的硬幣。要求在其上簽名將是浪費且毫無意義的。我們應該期望使用哪個密鑰進行簽名?礦工在設計上沒有身份,因為它是未經許可的。相反,該欄位僅包含礦工選擇的任意數據。當標頭中的隨機數溢出時,它可以用作“額外隨機數”。BIP34 使用它來儲存塊高度。它可以進一步用於儲存消息——這就是這裡發生的事情。
至於為什麼中本聰選擇了那個特定的結構,恐怕你得問他了。
另請注意,創世塊是由協議硬編碼的,因此沒有適用於它的真正規則。它可以被宣佈為任何東西。