Blockchain

為什麼要更改 nonce 而不是重新散列?

  • February 21, 2016

為什麼礦工增加隨機數來計算區塊雜湊,而不是僅僅生成隨機區塊雜湊?在我看來,這兩種方法都有相同的可能性找到低於目標的結果。

如果答案是增加隨機數而不是僅僅生成隨機散列來找到有效結果更快,你能用數學/統計的方式展示嗎?

比特幣中使用的散列函式是確定性的,即散列相同的輸入,即塊頭,總是會產生相同的輸出。這是必要的,以便其他人也可以檢查工作證明是否有效。

這意味著為了計算新的散列,散列函式的輸入需要改變。更改輸入的最簡單方法是更改​​ nonce,因為這是一個可以取任何值的自由格式欄位。修改輸入的其他方法是例如交換交易或修改 coinbase 交易,這將需要在標頭中重新計算 merkle 根。時間戳也是一種流行的選擇,但它的值受到可接受時間範圍的限制。

如果您想知道為什麼我們不簡單地重新散列前一個散列函式的輸出以獲得下一個值:這會破壞工作量證明機制,這需要一個易於驗證的證明,證明發行人已經完成了一些工作. 這裡的關鍵很簡單:如果我們迭代地散列前一個解決方案的結果,那麼驗證方也必須執行這項工作來檢查發行者是否已經完成了這項工作。當改變輸入時,這不會發生,因為給定輸入,驗證者可以執行單個雜湊運算並檢查結果。

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