2020年3月12日晚上区块高度为621343的区块,历时1小时才出块。有不少网友认为这是币价大跌,矿工恐慌关机,导致算力瞬间下跌造成的。真的是这样吗?
01、还原事实
我们来还原一下当时的情况,当时出块时间情况:
(图一)来源:https://btc.com
从上图可知,当时出块时间长的有1小时(621343#区块),时间短的有1分钟(621349#区块)。
当时全网算力的情况:
(图二)来源:http://tinyurl.com/td3fjrk
当时比特币全网算力并没有因为币价快速下跌而剧烈波动,所以,621343#区块出块时间长达1小时的原因,并不是矿工关机导致算力骤降造成的。
而且紧接着的几个区块出块时间都只有几分钟,按照上面的说法,这个原因是算力暴涨了,这显然与实际不符,出块时间的波动是正常情况!
02 、比特币出块时间的波动
比特币挖矿是独立随机事件,通过哈希运算找到符合要求的结果不仅取决于全网算力的大小,还与运气(概率)有关。好运气和坏运气都对应着小概率事件。比如(图一)中621349#区块,一分钟就找到了,这就是运气比较好的小概率事件,而621343#区块,历时一个小时才被挖出,这就是运气差的小概率事件。
有个网页能查询出块时间最长的记录,截取两页如下:
(图三)网址:http://blockchainsql.io/wkeno3
上图可见,出块时间超过一小时有不少,还有些出块时间超过了1天。在算力没有大幅波动的情况下,出块时间超过1小时,确实算小概率事件,但小概率并不代表不合理。这种一小时不出来情况以后还会发生,可能是真的是算力下降了,也可能只是运气不好的小概率事件的发生。以后发生类似事情,不要盲目恐慌,可以先查看全网即时算力和对应时间段内的平均出块时间,尽早获悉事情的真相。
03、比特币的难度调整机制
我们不妨再了解一下比特币的难度调整机制。
比特币平均出块时间确实和比特币算力有关,比特币设计了挖矿难度调整机制。比特币系统规定:
平均每个区块的出块目标时间为10分钟;
比特币的难度调整周期是2016个区块,所以也常说比特币难度调整周期是14天;
每次难度调整上、下限制分别为前一个周期难度的4倍和0.25倍;
比特币网络会根据上一个难度调整周期平均出块时间来调整下一个区块的,但是调整的范围是有限的,举例说明:
比如上一个难度调整周期,系统给定的难度为D,该周期内平均出块时间是8分钟,说明在该周期内,算力增加了,使得平均出块时间比10分钟更快,那么下一个难度周期,比特币系统会把挖矿难度调整为1.25D,以期将下一个难度调整周期内的平均出块时间维持在10分钟,反之,如果平均出块时间大于10分钟,那么系统在下一个难度调整周期内,会将挖矿难度下降。
难度调整公式 D1=D*目标出块时间/前一个区块实际出块时间
其中:D1为下一个难度周期难度,D为上一个难度周期难度。
可见,比特币挖矿难度调整是滞后于实际算力变化的。
比特币每次难度的可调范围都是有上下限的,分别为前一个周期难度的4倍和0.25倍。同样举例说明:
假设在某个难度调整周期内,挖矿难度为D,算力暴涨,平均出块时间缩短到了1分钟,下一个周期的难度最高也只能调到4D,如果算力不变的情况下,下一个周期内的平均出块时间将是2.5分钟,下下个难度调整周期,难度才能调到10D,这时平均出块时间才能恢复到10分钟左右。
当然,现有算力规模的情况下,发生这种情况的概率是极低的,即使真的发生了,经过多次调整也是能应付的过来的。
反过来,如果因为种种原因,比特币算力暴跌,导致全网算力下降,比特币每2016个区块才进行难度调整的规则,将使得比特币出块时间大幅延长,链上交易的拥堵会显著增加,这种难度调整机制的缺陷江卓尔在《从挖矿难度调整算法,谈比特币的进化之路》一文详细阐述过。
相对来说,BCH难度调整算法在应对算力大幅下降等问题上的适应性更强大。
04、BCH的难度调整算法
BCH的难度调整算法产生是有历史背景的。因为对比特币发展路线持不同看法,大区块支持者们分叉出区块上限更大的BCH,BCH继承了原链上的挖矿难度,而当时支持BCH的算力规模较小,在既有难度下,平均出块时间会远超过10分钟,为了应对这种不利局面,BCH难度调整算法在BTC的难度调整算法上附加了一条规则,修改后的难度算法叫EDA(紧急难度调整算法),附加的规则如下:
如果BCH连续六个块出块时间差超过12个小时,则难度系数下降20%,激活条件是6个块都挖出后,而不是12小时后。
这个算法让BCH在不利的局面下活了下来,但是这个算法也存在比较明显的缺陷,给机枪矿池套利提供了便利,BCH难度下降,挖BCH的收益更高,机枪池算力涌入套利,出块时间将缩短,套利空间被逐渐抹平,且在区块高度为2016整数倍时,难度将上升,套利的算力将切走,导致出块时间延长,难度下降,机枪池算力再次切回来套利,如此往复,陷入以下循环:
难度下降→套利算力涌入→出块时间缩短→难度上升→套利算力切走→出块时间增加→难度下降……
难度上调最多需要2016个区块,而难度下调20%可能只需要6个区块,这种难度调整的不对称性,导致了BCH的出块速度大幅超前于BTC:
(图四)BCH的出块速度显著高于BTC
3月多月的时间,BCH的出块,超前了BTC近1万个,于是BCH难度调整算法在EDA的基础进行了优化,经过改良难度调整算法称为DAA算法,在#504031区块生效,简单来说,它有如下特点:
1、逐块调整挖矿难度;
2、每个块的挖矿难度基于它前面的144个块的算力调整;
3、算力按指数规律变化时,网络将快速调整难度,保证公平性
4、避免当前算力与目标难度的不匹配导致的反馈振荡。
……
DAA算法的上述特征,保证了即使算力瞬间下降50%,对BCH出块速度也只有短时间的影响,DAA算法可以根据实际算力情况,快速调整难度,让出块时间恢复到正常水平。
对比两种算法下的平均出块时间,就能看出两者算法化解算力波动的优劣了:
(图五)数据来源:http://tinyurl.com/s3cd5q7
BCH的DDA难度调整算法,是在不利环境中优化迭代出来的难度调整算法,在算力规模明显劣势的环境下,经受住了算力大幅波动冲击与考验,相比比特币现有的算法,在应对算力大幅波动的情况下,DDA难度调整算法具有更强的适应性和生命力。