在v1.6版本的Java内核中,我们将发布一些针对网络中矿工的大调整,以解决过去几个月我们在Aion网络上看到的一些问题。让我们来深入了解一下具体存在哪些问题,以及即将发布的版本中的修复措施如何解决这些问题。

 

注意: 本文只说明针对Aion网络上的矿工而进行的修改,本次硬分叉中还包含其他修改。

 

您也可以直接跳到本文底部,了解矿工和挖矿池需要采取的行动。



关于难度的波动


敏锐的Aion网络观察者会发现,从今年5月开始,Aion历史难度计算记录中的难度出现了波动。我们已经追踪到这些波动的来源,其原因是某个地址通过网络上的一个挖矿池,周期性地贡献了大量的算力。对难度做一些简单的平滑处理,我们得到了这张图,这张图表示的在几小时时间中出现的波动情况:


6.3m-6.4m区块之间的平滑(WMA)难度图,正如我们所指出的那样,显示了难度的振荡模式。


我们怀疑这是该矿工的某种形式的跳币行为( Coin-hopping),这样的波动在算力较小的网络上并不罕见。我们还有理由相信这样做是为了经济利益,因为AION频繁地从矿工账户转移到币安。这是一个会对我们的解决方案产生影响的假设(我们稍后会看到),我们觉得这个假设成立的可能性很大,因为到目前为止,我们所看到的任何迹象都没有表明这个人的行为是拜占庭机制的行为。 


此外,不管这种攻击的目的是什么,其执行都是有缺陷的,导致了类似于劝阻攻击(Discouragement Attack)的情况,整个网络(包括该矿工)都会因为他们的行为而损失。我们来解释一下原因。


关于PoW(工作证明)出块时间戳

在网络上可以观察到的另一个问题是,系统没有正确地设定出块时间戳目标。出现一些时间段,平均时间戳(如果我们通过一览面板查看,它是一个窗口化的移动平均值)在15-20秒左右。在本文撰稿之时,笔者快速浏览了一下,显示为14.6秒。很明显,哪里出了问题!从区块链上抓取5月以来的历史数据,进行类似的平滑操作,我们可以看到,出块时间也在以与难度相同的方式波动:


6.3m-6.4m区块之间的平滑(WMA)难度图,同样也显示了振荡模式。


但这种情况不应该发生,如果难度调整机制正确地以某一出块时间为目标,那么它应该不断地尝试朝着这个出块时间调整,即便网络有波动。此外,我们知道Unity难度调整机制在调整上是相当积极的,这意味着即便是矿力的波动也应该很快能被解决(在区块内)。


我们发现根本原因在时间戳本身。回想一下,难度调整机制是(从挖矿PoV开始的每个区块,或每隔一个区块)对目标出块时间T进行优化,根据一个公式向上或向下调整难度,该公式以最后一个已知的区块的delta作为输入值。当大量产生的区块的时间戳不正确时,问题就会出现,这意味着难度调整算法是根据矿工提供的错误信息进行调整的。在这种情况下,很大一部分正在提交的区块(同样是由这一个矿工提交的),是以一秒钟的出块时间来提交的,导致难度调整方案错误地认为网络的算力比实际情况要高。这就导致了难度是基于人为抬高的算力基础上的,因此随着时间的推移,出块时间会增加。通过检查攻击池出块时间分布,可以明确地看到这种情况的发生。


攻击池的出块时间(Delta)分布,注意其明显偏离指数分布的概率密度函数。


为什么不对时间戳实施限制呢?因为:


● PoW(工作证明)时间戳不能被强制执行,没有任何协议级检查(只有简单的边界检查)可以强制矿工在这些边界内诚实地进行时间戳。

● 试探性检查法过于僵化,无法应对网络中的大波动,往往会得出极端情况。

还有其他与此相关的问题,我们在最初的Unity交叉出块共识算法文件中提到过,不在本文的讨论范围内。


劝阻攻击

这一切导致的是我们前面提到的劝阻攻击:由于我们的出块奖励是恒定的4.5 AION,而现在网络上的每个矿工的出块量在减少,因此平均赚取的AION较少(按每秒赚取的AION数考量)。如果矿工在经济上是理性的,那么与正确的时间戳相比,这对他们来说也是一种净损失,因为他们挖出的区块正在越来越少。


修复措施

我们已经排除了协议执行策略,因此我们的修复措施主要基于经济激励。我们发现,一个可行的激励改变的方法是通过经济激励来惩罚这种时间戳行为(我们内部将其称为+1时间戳)。


修复措施的核心是对出块奖励公式的更新,历史上(在项目存在以来的全部时间中)矿工和质押者的出块奖励公式都是静态的。之后的出块奖励发放会基于当前出块时间,并且会根据挖矿所需时间动态调整。

 

新旧奖励函数,这里用k=0(常数)表示旧函数,新函数是根据当前区块的出块时间选择的奖励调整线性函数。

我们选择的函数是(其中Δ代表出块时间), 


f(Δ) = (b/T)•k•Δ+b•(1-k)

● b = 4.5 AION (静态区块发行量)

● T = 目标出块时间 (10秒)

● k = 曲线的斜率,我们得出k=0.4。


其影响是:

● 攻击者会受到相应的惩罚,采用+1时间戳意味着人为地减少出块奖励,赚取的奖励只有之前的60%。

● 在存在+1时间戳行为的情况下,网络中的其他人会因其正确的时间戳而被奖励。如在存在较高的出块时间的情况下,每个区块的报酬比静态的4.5 AION要多。

● 在较长的时间内(假设我们达到目标出块时间),净发行量不变。


我们将在更新后监测网络,以确定这些更新是否按照我们的意图生效,并相应地做出进一步的更改。我们期望的结果是,这将激励正确的时间戳,从而达到理想的10秒出块时间。


我们的矿工和挖矿池该采取的行动

 

我们试图从开发角度将影响降到最低,并将该修复措施本地化。希望本文能让您对这些变化在未来可能对您的影响有一个很好的了解。为了确保平稳过渡,

 

● 由于这是一个硬分叉改变(否则出块奖励不能改变),所有挖矿池和矿工都应该更新到最新的Aion Java内核(v1.6)。

● 挖矿池应将Aion挖矿池软件Aion Pool 3更新到最新版本(v0.1.2),以便在奖励分红中纳入动态的出块奖励。

 

希望本文提供的信息对您能有所帮助,感谢阅读!