Mining-Pools

為什麼當隨機數溢出時節點不更改塊版本號?

  • March 26, 2019

在計算了 40 億個 nonce 之後,礦工應該更新 merkle 根。

他們為什麼不選擇一個新的隨機數並將其分配給塊版本號並重新開始?

這將節省時間並改進 ASIC。

礦工這樣做,但不是那麼簡單。這實際上是一個最近有爭議的問題,稱為 ASICBoost。作為該算法的一部分,版本號被分配了不同的值。

不過,它比僅使用版本號作為擴展隨機數要復雜一些。請記住,SHA256 實際上是將多個數學運算合併為一個名稱。我相信它的工作方式是由於 SHA256 算法的前幾個操作,其中涉及從塊頭的最右側左移位。如果您可以保持塊頭的右側(merkle 根、nonce 和時間戳的最後 4 個字節)基本不變,那麼它允許您跳過 SHA256 函式的前幾次計算(因為您正在輸入每次從這些位中都是相同的東西)。但是,要更改最終的雜湊值,您必須能夠更改左側位,其中包括版本號。

這顯然節省了大約 20% 的算力。

塊版本作為其他案例的一部分進行修改,例如 BIP 9,它使用塊版本中的特定位來表示對協議的特定建議更新。增加塊版本並將其視為隨機數將阻止這種使用。

此外,使用版本欄位作為隨機源(不是真的,但在談論隨機數時足夠相似)通常是一個壞主意 - 版本欄位在幫助網路上的其他節點確定如何解碼和處理塊方面發揮重要作用,或區塊鏈中的其他實體。為了節省少量週期而將其轉換為有效的隨機數只是一個糟糕的設計選擇。

無論如何,僅通過修改其中的單個 tx 來重新計算 merkle 樹是一個相對較快的操作,因為您只需重新計算受該 tx 影響的節點。

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