新人科普丨什麼是比特幣的“挖礦難度”?

比特幣系統中的「挖礦難度」是透過區塊頭中的「目標位」(Bits)來決定,其計算公式為「難度值(target)= 係數 * 2^(8 * (指數-3))」,數值越小代表挖礦難度越高。系統會動態調整難度值,目的是維持平均每10分鐘產生一個區塊的節奏。調整周期為每2016個區塊(約2週),根據最近2016個區塊的實際出塊時間與預期時間(20160分鐘)的比例來計算新難度值,並設有4倍幅度限制以防變動過大。這種機制確保了系統安全性,避免因算力提升導致出塊時間縮短或分叉風險增加。

總結

作者:Zarten

本文首發於區塊鏈技術詳解知乎專欄,題目:比特幣工作量證明難度值及難度調整詳解

【作者按】在比特幣系統中工作量證明是有一定難度的,難度保持在整個系統中平均10分鐘才能增加一個區塊,那是如何維持這樣的一個水平的呢?是通過區塊頭中的一個難度目標值(target)來決定的。

下面講解比特幣系統中的這個難度值和如何調整難度值。

難度值

在每個區塊頭中都有一個“Bits”字段,被稱為“目標位”,也就是所謂的難度值。如下所示:

新人科普丨什麼是比特幣的“挖礦難度”?

我們知道,在比特幣系統中滿足下面公式即為挖礦成功:

H(block header) <= target

那麼這個target是通過Bits得來的。

難度目標值(target)計算公式

target以指數形式存在,以十六進製表示,總共有8位,前2位為指數,後6位為係數。

所以上圖中,指數為0x17,係數為0x1320bc

計算公式為:

難度值(target) = 係數* 2^(8 * (指數- 3))

因此上圖中的難度值為:

難度值(target) = 0x1320bc * 2^(8 * (0x17 - 3))

這個算出來是個很大的數,結果為:

十進制為:1832085838499075985755083973639154607251969422303166464

十六進制為:0x1320bc0000000000000000000000000000000000000000

在比特幣系統中,難度值越小,挖礦難度就越大,因為哈希值可落的範圍會越小;反之難度值越大,挖礦難度就越小。

難度值調整

比特幣系統中,難度值是系統動態調整的,目的是使整個系統平均10分鐘出一個塊。

為什麼調整難度值

隨著挖礦設備的進化升級,系統的總算力會越來越強,如果難度值保持不變的話,出塊時間會越來越短,一方面是提高了對系統的響應時間和效率的考驗,另一個方面是出塊時間縮短後在同一時間將會產生多個區塊,必然會導致區塊鏈形成多分叉,這樣就導致系統的總算力分散到各個分叉鏈中了,這時系統的安全性大幅度降低,黑客可以集中算力進行分叉攻擊等攻擊行為。

因此,比特幣系統需要調整難度值。

難度值調整規則

目標是:系統平均每10分鐘產生一個區塊。

調整的周期是:每2016個區塊產生後會調整一次(大約2週14天)

調整的計算公式是:

新難度值= 舊難度值* (最近2016個區塊的真正時間/ 最近2016個區塊的預期時間)

最近2016個區塊的預期時間,當然是:2016 * 10min。

從上面公式可以得出,最近2016個區塊的真正時間越小,說明系統中出塊時間更短了(算力更強了),新難度值也就越小,所以挖礦難度就動態的提升了。

但是為了防止難度變化的過快,調整的時候有個4倍的幅度限制,也就是若調整的幅度大於4倍了,就按4倍調整。

分享至:

作者:Eason

本文為PANews入駐專欄作者的觀點,不代表PANews立場,不承擔法律責任。

文章及觀點也不構成投資意見

圖片來源:Eason如有侵權,請聯絡作者刪除。

關注PANews官方賬號,一起穿越牛熊
推薦閱讀
14分鐘前
31分鐘前
1小時前
3小時前
5小時前
6小時前
相關專題
20篇文章

熱門文章

行業要聞
市場熱點
精選讀物

精選專題

App内阅读