難度
難度是對挖礦困難程度的度量,即指:計算符合給定目標的一個HASH值的困難程度。
difficulty = difficulty_1_target / current_target
difficulty_1_target的長度為256bit, 前32位為0, 后面全部為1 ,一般顯示為HASH值:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, difficulty_1_target表示btc網(wǎng)絡最初的目標HASH。current_target是當前塊的目標HASH,先經(jīng)過壓縮然后存儲在區(qū)塊中,區(qū)塊的HASH值必須小于給定的目標HASH, 區(qū)塊才成立。
例如:如果區(qū)塊中存儲的壓縮目標HASH為 0x1b0404cb , 那么未經(jīng)壓縮的十六進制HASH為
0x0404cb * 2 ^ (8 * (0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000
所以,目標HASH為0x1b0404cb時, 難度為:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF / 0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.67 pdiff
算力
比特幣的挖礦的過程其實是通過隨機的hash碰撞,找到一個解nonce,使得塊hash小于目標HASH值。 而一個礦機每秒鐘能做多少次hash碰撞, 就是其“算力”的代表, 單位寫成 hash/s或者H/s
算力單位:
1 KH/s = 1000 H/s
1 MH/s = 1000 KH/s
1 GH/s = 1000 MH/s
1 TH/s = 1000 GH/s
1 PH/s = 1000 TH/s
1 EH/s = 1000 PH/s
難度調(diào)整
比特幣系統(tǒng)的難度是動態(tài)調(diào)整的, 每挖2016個塊便會做出一次調(diào)整, 調(diào)整的依據(jù)是前面2016個塊的出塊時間, 如果前一個周期平均出塊時間小于10分鐘,便會加大難度, 大于10分鐘,則減小難度,目的是為了保證系統(tǒng)穩(wěn)定的每過10分鐘產(chǎn)出一個塊,所以難度調(diào)整的時間大概是2周(2016 * 10 分鐘)
全網(wǎng)算力
全網(wǎng)算力是btc網(wǎng)絡中參與競爭挖礦的所有礦機的算力總和。當前難度周期全網(wǎng)算力會影響下一個周期的難度調(diào)整, 如果全網(wǎng)算力增加,挖礦難度增大,單臺礦機固定時間的產(chǎn)出就會減少。目前全網(wǎng)算力大概是24.42EH/s, 一臺螞蟻S9礦機的算力大概是14TH/s
那么, 已知當前全網(wǎng)算力,下一個周期難度將如何調(diào)整呢?
根據(jù)公式:
難度 * 2^32 / 全網(wǎng)算力 = 出塊時間
因為出塊時間要穩(wěn)定在10分鐘, 也就是600s:
難度 = 600 * 24.42 * 10^18 / 2^32 = 3.46e+12
那么,在3.46e+12的難度下, 一臺算力為14TH/s的礦機平均要花多長時間才能出一個塊呢?
根據(jù)公式:
難度 * 2^32 / 算力 = 出塊時間
有:
3.46 * 10^12 * 2^32 / 14 * 10^12 = 1.06e+9 s
結(jié)果大概是12270天
當前難度和全網(wǎng)算力可以到https://btc.com/stats/diff查詢