什么是难度调整算法?我们为什么需要一种新的算法?
在此视频中,我将介绍Jonathan Toomim的提议,即为2020年11月进行的BCH升级中采用新的难度调整算法。在此之前,最好先回答一个问题: 什么是难度调整算法?为什么我们需要一个新的算法呢?
首先,请记住,比特币将交易分组。仅当矿工解决“猜谜游戏”时,才会将这些区块添加到“区块链”中。请在Bitcoin.com频道上观看有关比特币的工作原理视频。
为了保持区块之间的平均时间相同,并以可预测的速率产出新币,我们需要一种系统的方法(也称为“算法”),以调整“猜谜游戏”的难度。
最初,“ DAA”非常简单。每两周或2016个区块,检查一次这2016个区块的平均时间。如果平均每个块少于十分钟,则增加难度。如果平均值更高,请降低难度。尽管此算法在大多数情况下都可以正常工作,至少在比特币拆分为BTC和BCH之前,它确实也产生你一开始不会想到的后果。
由于比特币网络上的哈希率增加的幅度远大于减少的幅度,并且难度仅每两周调整一次,因此,比特币的平均出块时间实际上一直低于10分钟。
当比特币区块链分为BTC和BCH时,事情变得更加复杂。之前,矿工只是简单地挖比特币。在分叉后,矿工就可以选择挖BTC或BCH。
因此,BCH在诞生之初几乎肯定需要一种新算法。等待2016个区块来调整难度可能会导致链死亡。如果哈希率显着下降,通常要花2周才能挖出的2016个区块可能要花两个月或更长时间。而且,如果在矿工眼中,该链变得无利可图,那么就可能因为没有人继续挖而暂停。对于多比特币生态系统而言,2016个块存在的潜在延迟太慢了。
因此,BCH采用了一种新算法,但它远非完美。这种“紧急难度算法”(或“ EDA”)的工作原理与原始算法类似,但可以检测到最近区块中哈希率较低的极端情况,这些情况会显着降低了下一个区块的难度。该算法导致难度和哈希率急剧波动。当EDA“加入”时,矿工将利用低难度的优势,在短时间内挖出许多区块,然后当难度回升而利润率回落时,他们只需离开BCH去挖BTC直到EDA再次启动。这需要很长时间,因为至少有一些矿工在这段难度高的时期以亏损的方式挖BCH。
高哈希率和低哈希率之间的这些“振荡”导致平均确认时间更长。这是因为交易更可能在区块间隔时间长时间的块中发送,而非其间发生的短时持续出块中。它们还导致平均每十分钟要挖出更多的区块,这就是BCH目前在区块和币总数方面比BTC提前一个月的原因。
不过,值得注意的是,这个问题并不是矿工的错。他们甚至不必“提前计划”或“滥用”这一问题。他们只是自然而然地根据当前哪条链更有利可图来切换他们当前的挖矿方式。我们需要构建一种逐利行为会能造福整个生态,而不会破坏它的系统。
EDA很快被另一种新算法取代,该算法是从头开始构建的,而不是修改旧的DAA,它的性能要好得多,但是仍然容易出现“振荡”。
BCH已经使用这种新的难度调整算法两年半了,它根据上个144个块的平均时间重新计算每个区块的难度。Toomim深入解释了这些振荡产生的原因,以下是精简版:
由于当前算法使用最新144个区块的简单移动平均线(SMA)来估计哈希。在一个高哈希的块离开SMA窗口后,挖矿难度降低的幅度与新区块进入该窗口增加的幅度相同。因此,离开窗口的区块会剧烈地改变挖矿难度,激励矿工重复这一离开区块的哈希。我称这种效果为“哈希回声”。值得注意的是,这些回声并不是恶意的矿工行为,而仅仅是矿工在遵循DAA给他们的直接短期激励。
这些振荡除了使确认时间过长而降低用户体验外,还使矿工在高难度时根本不挖BCH更加有利可图。如果有足够多的矿工使用这一策略,可能会由于区块完全停止而导致BCH链死亡。我们很幸运有长期对BCH进行足够投资的矿工,以亏损挖矿来保持其功能。但是我们当然不应该依赖矿工的忠诚来维持BCH的运转。
当涉及替代方案时,有几种选择。例如,实时定位算法(或称为“ RTT”)会根据上个区块以确定当前的难度。尽管这是个好主意,但对比特币的工作方式而言是一个相对较大的变化,要求矿工保持同步,这为各种潜在的问题和留下了漏洞。
当前算法的问题是数据点突然离开集合。之所以突然,是因为该算法是“简单移动平均”(SMA),其中,窗口中的每个块都具有相同的权重。
为了从根本上解决问题,我们可以减少任何给定块随着时间的增长而对当前难度产生的影响。如果我们“线性地”进行此操作,并且影响力不断减小,则会得到诸如lwma之类的算法,它代表线性加权的移动平均值,以及wt(或“加权时间”)算法家族。
另一种选择是随着区块的老化而以指数方式减小其影响,这就是EMA或“指数移动平均”算法。此类中的算法包括Jacob Eliosoff的ema-1d和simpexpt-1d,Tom Harding的wtema和Mark Lunderberg的asert。在计算当前难度时,EMA具有一些独特的优势。
我们应该怎么做才能找出最佳选择?实际上有很多。Toomim从kyuupichan的难度调整模拟中分叉出了开源软件,该软件使将不同算法的行为与其图形用户界面以及充满用户图形的界面进行比较变得更加容易。
尽管我不是这方面的专家,但模拟程序是在考虑许多重要事项的情况下制作的,例如可以选择设置“稳定”矿工的百分比,“可变矿工”的百分比(将根据获利能力来回切换部分哈希率),以及“贪婪”矿工的百分比,并根据哪条链更有利可图(假设一条链超过另一条链的3%)来切换其算力的100%。
虽然模型不完美,但仍可以帮助我们做出尽可能明智的决定。实际上,早在2017年就可以使用这些工具预测当前算法存在的潜在振荡问题。
随着时间的推移,当前的DAA振荡变得越来越严重,越来越多的矿工根据相对的获利能力切链。这些模拟的结果以及当前DAA问题的紧急性质,使我清楚地知道,在即将到来的升级中,我们绝对应该更改DAA。有几种非常优越的选择,我们只需要决定实施其中的一种。
该表显示了三种不同块窗口大小下5种算法的模拟结果。虽然所有算法的平均出块时间都非常接近600秒,但实际上其中一些具有更长的平均确认时间。这些都是SMA(或“简单移动平均”)算法。
尽管asert始终具有优势,但所有其他算法都表现良好。
该图表还显示了采用一种挖矿策略要比其他策略获利更多。再一次,其他三种算法比SMA算法好很多,他们之间三种类型挖矿的获利能力非常接近。
由于非SMA算法性能类似,因此根据其作为DAA的模拟性能以外的考虑因素在它们之间进行选择可能更为重要,诸如它们将要执行的工作量以及如何实现这些事情。它们的运行成本很高(就处理资源而言)。 Toomim将lwma和wt排除在外是因为他们“需要对窗口中的每个块标题(例如288个块)进行采样,以便计算下一个块的难度...”,剩下的wtema和asert分别需要对两个区块头进行采样。
如果你想了解这两种算法的工作原理的详细信息,请一定要阅读Toomim在read.cash上的原始文章。他认为在两者之间进行选择时最重要的有两点:首先,使用asert会导致整数近似很难。你不能使用浮点运算,因为不同的处理器在处理方式上会略有不同。其次,wtema存在奇异性问题,给定某些输入,该算法会完全失败,并且时间戳记为负,这是指某个块的时间戳早于上个块。
两种算法都需要更加复杂的方案才能解决各自的问题,但是Toomim认为,Asert问题较少,因为它不需要弄乱其他共识规则,而wtema则需要很大的负求解时间。
然后,Toomim介绍了选择整数近似方法,确定指数函数的半衰期,在“过去的中间时间”激活,测试网详细信息,潜在攻击以及如何减轻这些攻击的过程中选择基于块高度的激活。他自己的链接以获取更多信息,你应该检查所有这些链接是否感兴趣,但是为了简洁起见,在这里我将不做任何介绍。
在他的结论中,Toomim先生列出了DAA的12个理想属性,我将逐字阅读它们。
1,它应该是稳定的,并且不易产生振荡;
2,它应保持较低的确认时间;
3,降低矿工来回切算力的动机;
4,降低矿工操纵时间戳的动机。
5,降低矿工自私挖矿的动机。
6,由于#3,#4和#5,具有忠诚的矿工应该获得最大的收入;
7,在算力和/或汇率突然变化后,链应能迅速恢复;
8,平均出块间隔应接近目标(如600秒);
9,该算法在数学上应该简单而优雅;
10,该算法应易于理解和分析;
11,该算法应易于部署;
12,该算法应几乎没有边缘情况。
由开发社区的其他成员来决定是否接受这些优先级,以及是否同意asert最符合以上特征。
在结束之前,我强烈支持Jonathan Toomim能提出升级提案并将其付诸实践。正如他提到的那样,他也会对许多其他选择感到满意。与其尝试寻找“最佳”算法,不如尝试寻找一种社区大部分人认同的一种算法。
我希望关于比特币现金DAA的讨论能保持合理,列出证据,一旦需要做出决定,我希望决策过程也可以保持合理,每个人都至少愿意做出让步。
Goodmorning