版权归原作者所有,如有侵权,请联系我们

[科普中国]-难度调整

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

比特币网络每产生 2016 个区块(两周)后,会根据之前 2016 个区块的计算时间以及算力进行数学难题的难度调整,通过将数学解的阈值提高或降低来减少或增加难度,使每个区块的计算时间维持在大约10分钟的范围。

简介难度调整的英文名为Difficulty Retargeting。挖掘是找到新的比特币区块的随机过程,从而确认用户的交易。这必然是具有竞争性和能源密集型的过程。为了确保网络顺利可靠,每隔两周,挖矿难度会根据期间开采的区块数量而进行调整。区块之间的平均目标间隔为10分钟。

每两个星期的周期被分为2016个10分钟的时段。

如果在两个星期的周期内有超过2016个区块被挖掘,挖矿则变得更困难,因此如果哈希值保持不变,预计在接下来的两周内将每10分钟发现一次区块。

如果在两个星期的时间内少于2016个区块被挖掘,挖矿就变得不那么困难了,因此如果哈希值保持不变,预计在接下来的两周内将每10分钟会发现一次区块。

任何一个周期的最大调整是4的基数(即旧有难度的25%至400%的范围)。

从区块头中了解难度值由下图可以看到区块头主要包含以下几部分:

版本号(Version)

标记着当前区块是在什么版本的bitcoincore系统版本下产生的;比特币主链(main)上有两种版本号的区块,分别为1和2(此处以比特币举例说明)

时间戳(Time)

记录这个区块生成的时间,精确到秒。每诞生一个新的区块,就会被盖上相应的时间戳,这样就保证整条链上的区块都按照时间顺序进行排列。

难度值(Target_bits)

大小4字节,该字段标记着当前区块被“挖”出来的难度,即挖出该区块的难度系数。对比特币而言,每产生2016个区块,数据区块运算难度会调整一次。(比特币区块链网络能够自动调整挖矿的难度,让矿工每10分钟才挖出一个区块)

随机数(Nonce)

大小4字节,当前区块工作量证明的参数。当“矿机”节点经过Hash计算(哈希碰撞)出的值为该随机数时,即为“挖矿”初步成果(经过后续六个区块的认证之后,才是真正的成果,终态)

前一区块哈希值

也称“父区块哈希值”,大小32字节,为当前区块前一个区块的区块头的Hash值,这个哈希值通过对前一个区块的区块头数据进行哈希计算(SHA256算法)得出。

默克尔根(Merkle Root)

所有交易信息先进行两个一组的哈希计算。Hash 1 和 Hash 2 合并成一个新字符串,然后算出这个字符串的哈希值,我们记做Hash(1&2);Hash 3 和 Hash 4 同上办法处理,得到 Hash( 3&4),再往上算,Hash(1&2)、Hash(3&4)这两个字符串又合并,接着进行哈希运算,这个最后的哈希值就是区块头的Merkle树根。

算力在通过“挖矿”得到比特币的过程中,我们需要找到其相应的解,而要找到其解,并没有固定算法,只能靠计算机随机的哈希碰撞。一台矿机每秒钟能做多少次哈希碰撞,就是其“算力”的代表,单位写成hash/s。算力可以简单的理解为计算能力。主流的矿机为14T左右的计算量级,即一台矿机就能每秒做至少1.4*10的13次方次哈希碰撞,我们可以说,这一台14T规格的矿机就有14T的算力。矿工所掌握的所有矿机占比特币全网总算力的百分比是多少,就代表TA在这10分钟竞争中能够获胜的概率就是多少。举个例子,如果比特币全网的算力是100,而某个矿工拥有10的算力,那么TA每次竞争记账成功的概率就是1/10。

难度调整的过程比特币的区块平均每10分钟生成一个。这就是比特币的心跳,是货币发行速率和交易达成速度的基础。不仅是在短期 内,而是在几十年内它都必须要保持恒定。在此期间,计算机性能将飞速提升。此外,参与挖矿的人和计算机也会不断 变化。为了能让新区块的保持10分钟一个的产生速率,挖矿的难度必须根据这些变化进行调整。事实上,难度是一个动 态的参数,会定期调整以达到每10分钟一个新区块的目标。简单地说,难度被设定在,无论挖矿能力如何,新区块产生 速率都保持在10分钟一个。
那么,在一个完全去中心化的网络中,难度的调整是在每个完整节点中独立自动发生的。 每2,016个区块中的所有节点都会调整难度。难度的调整公式是由最新2,016个区块的花费时长与20,160分钟(即 这些区块以10分钟一个速率所期望花费的时长)比较得出的。难度是根据实际时长与期望时长的比值进行相应调整的 (或变难或变易)。简单来说,如果网络发现区块产生速率比10分钟要快时会增加难度。如果发现比10分钟慢时则降低难度。
总结一下,公式如下:
New Difficulty = Old Difficulty \* \(Actual Time of Last 2016 Blocks / 20160 minutes\)
虽然目标校准每2,016个块发生,但是由于Bitcoin Core客户端的一个错误,它是基于之前的2,015个块的总时间(不应该是2,016个),导致重定向偏差向较高难度提高0.05%。1

本词条内容贡献者为:

方正 - 副教授 - 江南大学