nTime 滾動只是對大型/快速池的優化,對嗎?
需要確認我對nTime滾動的理解……
它用於通過增加時間戳為礦工提供更多選項來探勘,而無需從池中請求更多工作。但是,給定一個足夠小的池,其中任何給定塊的 nonce 空間甚至都沒有被覆蓋,nTime rolling 沒有顯著優勢。您可以擴展礦工 nonce 範圍,以便每個礦工有效地使用頻寬和時間。而且因為無論如何你都沒有覆蓋整個 nonce 空間,所以礦工 nonce 範圍的擴展是優化效率所必需的。
作為後續行動,我想整個隨機數空間完全有可能產生零個有效隨機數,因此您必須增加時間戳以確保您有機會,但就像以前一樣 - 對於足夠小的池,這不會出現玩。
這種理解正確嗎?
這種理解正確嗎?
基本上,但是您沒有考慮到標頭隨機數空間的小尺寸(32 位)和現代硬體的速度(每個礦工每秒 10 個 terrahashes 的數量級)。
32 位隨機數只能提供
2 ** 32 = ~4 billion
組合。這對應於 4 gigahashes。一個現代礦工可以在半秒內做一千多次,所以隨機數空間幾乎總是在沒有找到塊的情況下被耗盡。當比特幣雜湊率在 FPGA 和早期 ASIC 時代首次增加時,實施了 nTime 滾動,因此礦工不必對其硬體和軟體進行重大更改來處理隨機數空間耗盡的問題。然而,隨著硬體越來越快,解決方案的破解越來越沒用,因為一個典型的塊只能在大約兩個小時的範圍內移動時間(3,600 個一秒增量),有時遠少於這個時間(尤其是其他礦工使用 nRollTime 的情況,因為他們可以用完後續礦工可用的可接受時間值)。
正確的解決方案是在生成交易的 coinbase 欄位中添加一個額外的隨機數 [1],這實際上是在原始比特幣 0.1 軟體中實現的。更改塊中的任何交易也會更改塊頭中的 256 位默克爾根,從而消除隨機數空間耗盡的風險。這種技術現在被比特幣礦工普遍使用,並且通常直接在硬體中實現(我認為通常使用小型 FPGA 來進行額外的隨機數更新和 merkle 根再生)。
[1] coinbase 欄位目前允許礦工添加最多 96 個任意字節,而不會影響任何協議功能。Coinbase 公司以該領域命名,但與該領域沒有其他關係。