Mining

為什麼我們在一個塊中需要 nonce 和 mixhash 值?

  • October 22, 2019

查看範例genesis blocks,我注意到 nonce 和 mixhash 值都可以分配獨立的值。閱讀黃皮書時提到:

  • mixhash : 是一個 256 位的散列,它與 nonce 相結合證明已經在這個塊上執行了足夠的計算量
  • nonce : 是一個 64 位散列,證明與混合散列帽子相結合,已經在這個塊上執行了足夠的計算量

這意味著這些值與難度一起用於採礦。但為什麼它們都被使用?

在使用 Hashimoto 算法驗證 PoW 時, mixhash實際上是從nonce作為中間值計算出來的。但是這個計算仍然非常繁重,一個節點可能會被具有不正確隨機數的塊 DDoSed。mixhash包含在塊中以執行輕量級 PoW “預驗證”以避免此類攻擊,因為生成正確的mixhash仍然需要攻擊者至少做一些工作

我不確定我是否能夠正確解釋這一點。但是 mixhash 是在探勘過程中從 DAG 數據文件中提取的一種簡化形式,是 Hashimoto 算法的一部分。為礦工在搜尋正確的隨機數時執行的每個雜湊操作重新確定應用的混合雜湊(參見 ASIC 阻力,高 IO)。最終的 mixhash 是通向有效塊的值。這個值之所以成為 Block 描述符的一部分,是因為它成為了下一個 Block 的 //parentHash// 的一部分。這樣,潛在的攻擊者將需要正確的 DAG 數據文件來創建非法塊。

nonce 和mixhash的組合必須滿足黃皮書中描述的數學條件,如下面的快照所示。它驗證該塊確實已被加密探勘,因此,從這個方面來看,它是有效的。

取自黃紙

引用自:https://ethereum.stackexchange.com/questions/5833