Nonce
確定塊的 Extranonce 值
如何確定塊的額外值?我知道他們在 coinbase 交易中,但在哪裡?我如何解碼extranonce的部分?
在比特幣 v0.1.5 到 v0.3.24 中,coinbase scriptSig 包含:
txNew.vin[0].scriptSig << nBits << ++bnExtraNonce;
在比特幣 v0.4.0 到 v0.5.3 中,它改為:
pblock->vtx[0].vin[0].scriptSig = CScript() << pblock->nTime << CBigNum(nExtraNonce);
比特幣 v0.6.0 到 v0.6.3:
pblock->vtx[0].vin[0].scriptSig = (CScript() << pblock->nTime << CBigNum(nExtraNonce)) + COINBASE_FLAGS;
比特幣 v0.7.0 到目前:
txCoinbase.vin[0].scriptSig = (CScript() << nHeight << CScriptNum(nExtraNonce)) + COINBASE_FLAGS;
所以 coinbase scriptSig 欄位隨著時間的推移發生了變化,但它始終將 extranonce 作為第二項。
在比特幣 v0.1.5 中,大小是無限的,而在更新的版本中,它是 4 字節或更少。(這是由從 切換
bnExtraNonce
到引起的nExtraNonce
。)還有一些其他奇怪的細節 - 在 v0.1.5 中,它僅在客戶端重置時重置,但在以後的版本中,它會在每個新塊上重置。
當然,這只是核心客戶端所做的。其他礦工或礦池可能會做其他事情。