新人科普丨什么是比特币的“挖矿难度”?

  • 比特币的“挖矿难度”通过区块头中的目标值(target)动态调整,确保系统平均每10分钟产生一个区块。难度值越小,挖矿难度越大。

  • 难度值计算:目标值由区块头中的“Bits”字段(指数+系数)通过公式 target = 系数 * 2^(8 * (指数 - 3)) 计算得出,结果以十六进制表示。

  • 难度调整原因:随着算力提升,若难度不变会导致出块时间缩短,可能引发分叉和安全风险,因此需动态调整难度以维持稳定性。

  • 调整规则

    • 每2016个区块(约2周)调整一次。
    • 新难度值 = 旧难度值 ×(实际2016区块耗时 / 预期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官方账号,一起穿越牛熊
推荐阅读
12分钟前
30分钟前
1小时前
3小时前
5小时前
6小时前
相关专题
20篇文章

热门文章

行业要闻
市场热点
精选读物

精选专题

App内阅读