Nonce

確定塊的 Extranonce 值

  • March 16, 2015

如何確定塊的額外值?我知道他們在 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 中,它僅在客戶端重置時重置,但在以後的版本中,它會在每個新塊上重置。

當然,這只是核心客戶端所做的。其他礦工或礦池可能會做其他事情。

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