Block

塊 566687 nonce 和 extranonce,如何解釋?

  • March 12, 2019

這可能適用於任何塊,但我正在檢查 Slushpool 發現的這個塊。

我已經在 Mastering Bitcoin 和 StackExchange 上查看了這一點,但到目前為止我能得到的最好的結果是:coinbase tx 是一個腳本,其中第一個字節表示“將三個字節推入堆棧”,結果是9fa508 十六進制。將字節順序反轉為 08a59f 給出塊編號(十進制 566687)。

這就是我卡住的地方。這本書說接下來的幾個字節用於編碼額外的隨機數。

然後它變得更詳細一點:“8 個字節的額外隨機數,加上 4 個字節的“標準”隨機數允許礦工每秒探索總共 2^96(8 個後跟 28 個零)的可能性,而無需修改時間戳。 " 頁。266 最新版《掌握比特幣》第 10 章。

我找不到任何程式碼範例來嘗試使用額外的隨機數找到塊的隨機數,而不是使用最大 32 位無符號整數作為隨機數的常見範例。

它是nonce + extranonce的串聯,只是41678782744206783853?(使用 4167878274 隨機數,那麼額外的 8 個字節被解釋為一個大的小端整數?)

我還看到它顯然是一個時間戳的推動,然後是另一個 N 個字節的額外推動,但是很難找到任何要實際測試的東西。

我不能只用 Python 寫這樣的東西:

header = ( struct.pack("<L", version_) + prev_block.decode('hex')[::-1] +
     merkle_root.decode('hex')[::-1] + struct.pack("<LLQ", timetamp_, bits, nonce))

在這種情況下,nonce 太大了,當然不能用 Q 打包。

驗證解釋隨機數和額外隨機數的最近塊的正確方法是什麼?從給定的隨機數中減去一點,所以一個循環只進行幾千次,將隨機數加 +1,然後找到一個低於目標的塊雜湊似乎不適用於額外的隨機數,儘管它對具有適合無符號 32 位整數的 nonce 的舊塊執行此操作。

真正的隨機數要大得多,不是嗎?如果是,它在哪裡,它是如何與區塊鏈瀏覽器上給出的明顯隨機數組合在一起的,以便一個簡單的腳本可以驗證最近的比特幣區塊?

謝謝!

我找不到任何程式碼範例來嘗試使用額外的隨機數找到塊的隨機數,而不是使用最大 32 位無符號整數作為隨機數的常見範例。

該塊的隨機數保持不變。由於額外的 nonce 是 coinbase 交易的一部分,它會修改 merkle 根,它是塊頭的一部分。因此,對於每個額外的隨機數,您都會獲得一個唯一的 merkle 根,然後您可以使用該 merkle 根嘗試所有正常隨機數。

您不需要以任何形式連接或以其他方式混合這兩個 nonce - 額外的 nonce 的目的只是改變 merkle 根。

要使用額外的 nonce 驗證塊,您不需要做任何特別的事情。只需建構交易 merkle 樹,驗證 merkle 根與塊頭中的根匹配,然後對頭進行雜湊處理並再次檢查目標。對於有和沒有額外隨機數的塊來說,這是相同的過程。

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