比特币中难度调整
由于哈希值的伪随机特性,要寻找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个比特币。