由於哈希值的偽隨機特性,要尋找4個前導0的哈希值,預期大概要進行216 次嘗試,這個數學期望的計算次數,就是所要求的“工作量”。要求的前導0的個數越多,代表難度越大。
難度值是比特幣系統中的結點在生成區塊時的重要參考指標,它決定了節點大約需要經過多少次哈希運算才能產生一個合法的區塊。
難度值被設定在無論節點計算能力如何,新區塊產生速率都保持在每10分鍾一個。
難度的調整是在每個完整節點中獨立自動發生的。每2016個區塊,所有節點都會按統一的公式自動調整難度。
根據實際時長與期望時長的比值,進行相應調整。
公式總結如下:
\[新難度值= 舊難度值 \times \frac{過去2016個區塊花費時長}{20160分鍾}\]
其中20160分鍾是兩周的分鍾數,即平均約兩周時間調整一次難度值。
工作量證明需要有一個目標值。比特幣工作量證明的目標值(Target)的計算公式如下:
\[目標值 = \frac{最大目標值}{難度值}\]
其中最大目標值為一個恆定值。目標值的大小與難度值成反比。比特幣工作量證明的達成就是礦工計算出來的區塊哈希值必須小於目標值。
\[一個block產生的產生時間 = 難度值 \times \frac{2^{32}}{hashrate}\]
hashrate是每秒運算的hash值數量。
例如:
今天的難度值 = 19339258
hashrate=1G/s
那么,
\[一個block產生的產生時間(秒為單位) = 19339258 \times \frac{2^{32}}{10^9} = 83061481.8 秒\]
\[一個block產生的時間(小時為單位)= \frac{83061481.8089}{60*60}= 23072.6338358 小時\]
也就是說按照今天的難度值在1G/s的運算能力下,23072.6個小時才能產生一個數據區塊,即12.5個比特幣。