BCH即将升级的ASERT算法到底是什么?

BCH网络每六个月都会按照计划升级一次。开发者一般在上次升级之后就开始准备下次升级的内容,因此BCH今年11月15日的升级内容已经在上个月确定下来。这次升级中其中一项就是BCH的难度调整算法DAA将会被新算法ASERT(即aserti3-2d)所取代。
关于DAA的更改,BCH的开发团队之间虽然曾经有过一定的讨论和分歧,但是最终各大开发团队在这一点上已经达成一致。目前BCH的主要开发团队Bitcoin ABC、BCHN、BCH Unlimited等发布的BCH最新版本的客户端中都已经加入了此项更改。不过,很多人对于ASERT算法依旧是一无所知,本文将对此进行详细介绍。
难度算法调整
难度算法调整(DAA)是一种用于调整挖矿难度参数的算法,目的是为了保证区块之间的平均时间相同。对于BTC和BCH来说,难度调整算法可以保证出块平均时间在10分钟。如果平均每个块少于十分钟,则增加难度。如果平均值更高,就降低难度。
BTC每2016个区块调整一次挖矿难度参数。当比特币区块链分为BTC和BCH时,事情变得更加复杂。之前,矿工只是简单地挖比特币。在BCH诞生后,矿工就可以选择挖BTC或BCH。为了让BCH能够存活,BCH最初采用了“紧急难度算法”(即EDA)。由于该算法导致难度和哈希率急剧波动,最终在2017年11月,BCH链更改了DAA,它根据上个144个块的平均时间重新计算每个区块的难度,以在每个区块之后调整挖矿难度参数。
为什么要更改DAA?
在过去的一年半中,人们一直在抱怨BCH的链的DAA。这是因为DAA的采用虽然让难度和哈希率的波动降低了一些,但是并没有解决算力在BTC和BCH之间频繁切换的问题,而这一问题也许会让BCH链走向灭亡。
所有DAA的运作方式都是检查找到区块所花费的时间,然后向上或向下调整难度。原始的比特币DAA(BTC)非常简单,仅每2016个区块调整一次。BCH的出现,让矿工的算力可以在多条链之间进行切换。由于BCH是算力较少的SHA-256链,所以采用了能够更快进行调整的DAA也称为cw – 144),它可以计算每个区块的新难度,并且实际上仅使用最后144个区块的平均值。
但是仍然存在问题。例如,BCH / BTC比率将略有上升,而图利的矿工将把算力切换到BCH上,这就加快了BCH的出块速度。DAA将花费许多时间来减慢速度。当最终速度足够慢之后,那些图利的矿工都将离开,创建一个哈希“真空”,然后BCH的出块就会变得非常慢。BCH链就会在出块快和出块慢之间切换,也被称作“振荡”。
随着时间的推移,当前的DAA振荡变得越来越严重,越来越多的矿工根据相对的获利能力切换链。这些振荡除了使确认时间过长而降低用户体验外,还使矿工为了更加有利可图,在高难度时根本不挖BCH。如果有足够多的矿工使用这一策略,BCH链可能会由于停止出块而导致死亡。
我们很幸运有长期对BCH进行足够投资的矿工,以亏损挖矿来保持其功能。但是我们当然不应该依赖矿工的忠诚来维持BCH的运转,因此更改DAA便迫在眉睫。
在这项更改中,有几种非常优越的选择,但最终开发者们选择采用新的难度算法ASERT,该算法最大的优势就是让BCH出块时间稳定在10分钟左右,对机枪池不友好,但可以给诚实的矿工增加6%的收益。
算法ASERT
在设计cw-144时,基本问题是调整得太快和调整得太慢之间的权衡。
调整得太快是不好的,因为出块时间会自然变化。离群块(单个具有特别慢或快的时间的区块)不应太大地影响难度,但是有时会遇到这些异常。因此,如果调整得太快,难度将不准确,并且会产生不必要的波动。
调整得太慢也不是一件好事,因为这还会导致振荡。由于矿工的切换行为,实际上应该更早地调整难度,但事实并非如此。
ASERT背后的主要思想是,我们不使用移动平均值(例如最后的144个块),而是仅查看最近的块。乍一看,这似乎反应太快了。换句话说,它会调整得太快而在不稳定的情况下会“反弹”。
但是有一点不同:ASERT还添加了一个“松弛参数”,以便每个块的调整总是很小的调整。当块太快时,算法将前一个块的目标乘以0.989,这会使目标降低约1%,从而使难度提高约1%。当块变得太慢时,情况恰恰相反:目标增加约1%,难度降低约1%。它基本上只是少量调整每个块。如果前一个块是离群值,则无所谓,因为调整很小。而且,如果矿工的行为发生了真正的变化,该算法将不断进行较小的调整,一次只进行一次调整,以使我们在相对较短的时间内恢复正常状态。振荡是永远无法完全避免的,但是数据似乎表明这种类型DAA可以有效地将其最小化。
总结
此次将BCH的DDA更改为ASERT算法,目的是为了消除难度和哈希率的周期性波动,减少稳定矿工与机枪池矿工之间的利润差异,保持平均区块间隔接近10分钟目标,使平均交易确认时间接近目标时间。从长远来看,这是有益于BCH发展的事情。