難度是對挖礦困難程度的度量,即指:計算符合給定目標的壹個HASH值的困難程度。
difficulty = difficulty_1_target / current_target
difficulty_1_target 的長度為256bit, 前32位為0, 後面全部為1 ,壹般顯示為HASH值:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, difficulty_1_target 表示btc網絡最初的目標HASH。 current_target 是當前塊的目標HASH,先經過壓縮然後存儲在區塊中,區塊的HASH值必須小於給定的目標HASH, 區塊才成立。
例如:如果區塊中存儲的壓縮目標HASH為 0x1b0404cb , 那麽未經壓縮的十六進制HASH為
所以,目標HASH為0x1b0404cb時, 難度為:
比特幣的挖礦的過程其實是通過隨機的hash碰撞,找到壹個解 nonce ,使得 塊hash 小於 目標HASH 值。 而壹個礦機每秒鐘能做多少次hash碰撞, 就是其“算力”的代表, 單位寫成 hash/s 或者 H/s
算力單位:
比特幣系統的難度是動態調整的, 每挖 2016 個塊便會做出壹次調整, 調整的依據是前面2016個塊的出塊時間, 如果前壹個周期平均出塊時間小於10分鐘,便會加大難度, 大於10分鐘,則減小難度,目的是為了保證系統穩定的每過 10分鐘 產出壹個塊,所以難度調整的時間大概是2周(2016 * 10 分鐘)
全網算力是btc網絡中參與競爭挖礦的所有礦機的算力總和。當前難度周期全網算力會影響下壹個周期的難度調整, 如果全網算力增加,挖礦難度增大,單臺礦機固定時間的產出就會減少。目前全網算力大概是24.42EH/s, 壹臺螞蟻S9礦機的算力大概是14TH/s
那麽, 已知當前全網算力,下壹個周期難度將如何調整呢?
根據公式:
因為出塊時間要穩定在10分鐘, 也就是600s:
那麽,在3.46e+12的難度下, 壹臺算力為14TH/s的礦機平均要花多長時間才能出壹個塊呢?
根據公式:
有:
結果大概是12270天