[60]比特币系统的自我调节机制

据Bitcoinist 10月2日报道,比特币网络挖出了一个出块时间异常缓慢的区块,挖出该区块总共耗费了119分钟。尽管比特币网络的挖矿算力在近期创下了新高,但这种反常的现象还是发生了。
--http://baijiahao.baidu.com/s?id=1646337991829881707&wfr=spider&for=pc

比特币系统的运转是由连续的挖矿活动推进的。每一次成功的挖矿意味着1批交易得到确认,所有比特币节点共同维护的区块链账本得到更新。

根据比特币协议的设定,挖矿时间在10分钟附近变动。
出块时间∝(1/挖矿难度)(1/全网算力)(公式1)
如上图公式所示,出块时间(即成功挖矿的时间间隔)与挖矿难度成反比,与全网算力成反比。由于全网算力是动态变化的,为了维持10分钟的出块时间,比特币协议中设计了难度调整公式:
New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes)(公式2)
如公式所示,比特币系统中每隔2016个区块(约14天),各个节点将自行计算新的难度值。计算时先计算最近2016个区块的出块时间(实际总时间)与20160分钟(2016个区块都按照预期10分钟的总时间)的比值,然后将比值与旧难度Old Difficulty相乘。
很明显,当近期平均出块时间大于10分钟时,新难度New Difficulty将增加,根据公式1可知,出块时间将减少;当近期平均出块时间小于10分钟时,新难度New Difficulty将减少,根据公式1可知,出块时间将减少;

容易出现的误区:
比特币中的难度与出块时间反比,难度值越大,出块时间越短。这是由比特币挖矿算法决定的。例如:
在区块277,316中,难度值target为
系数/指数格式:
target =0x1903a30c。(区块数据中难度的存储方式)
16机制格式:
target = 0x0000000000000003A30C00000000000000000000000000000000000000000000
挖矿算法的实质是要求挖矿节点提供一个散列值小于target的字符串。由于散列算法是无法预测结果的,因此只能采用穷举的方式寻找符合条件的字符串。显然,target的值越大,符合条件的字符串数量越多,穷举成功的时间就越短。

难度值、出块时间、平均算力的关系还没有想清楚,改天思考。
参考资料:
https://blog.csdn.net/wowotuo/article/details/77842724

根据上述背景资料,可以分析出以下几点:
(1)比特币的出块时间是围绕预期时间(由算力和难度确定)随机变化的。
(2)当算力出现巨幅调整时,由于难度不能及时调整(调整间隔约14天),所以在调整间隔期间,出块时间将与预期值(10分钟)产生明显偏差。
(3)调整间隔过后,由于难度将对应调整,出块时间将回归到预期值(10分钟)附近。

通过查询比特币浏览器(https://btc.com/block?date=2019-09-30),异常数据出现在[597,273]区块。
597,273出块时间:2019-09-30 10:07:42
597,272出块时间:2019-09-30 08:08:45
此区块的挖矿过程长达约119分钟。