Medalla 测试网在 2020 年 10 月 17 号出现了变故(编者注:实际上,自 2020 年 10 月 14 号以来,Medalla 测试网便一直没有敲定区块)。那到底发生了什么事?这里有一份 5 岁小孩也能懂得解释。(可能 5 岁不行,要 10 岁,但反正说是这么说。)
1)一堆验证者停机了(也许是因为参与 zinken 测试网,也许是因为觉得厌烦了,谁知道呢)
2)Medalla 测试网进入了无法敲定区块的状态。
3)Prysm 客户端和 Nimbus 客户端开始浮现一些同步方法上的 bug
4)因为这个 bug,我们失去了更多验证者,有一些从此再无音信
5)网络没有终局性,加大了节点的内存和 CPU 负担,又使我们试去了许多验证者,因为他们的节点没有办法处理那么大的负担
6-1)要么大批验证者重新上线,让网络重新获得终局性;要么
6-2)他们不上线,然后这些离线的验证者一直一直、越来越快地丧失押金,直至我们重新获得终局性。在这个过程中,可能某些验证者还会因为余额太低而被踢出队伍
7)你可以盯着 beaconcha.in 了解最新的网络参与率。其他网站基本上没能追上最新的情况
8)这种情况如果在主网上发生,不会持续那么久,因为如果烧掉的是真正的 ETH,人们不会这样无动于衷
9)整个网络正像它设计的那样,在大规模分裂的场景中自我修复
10)如果是 6-2) 这种情况,我不确定网络多快能恢复正常,最快可能要到 10 月 25 号,最晚可能是(25 号)再晚 5 天
11)如果你已经离线,但不想回去重新运营验证者,这里有个工具可以帮助你有序退出验证者队伍:https://github.com/eth2-educators/medalla-exit
更为技术性的细节:
非激活状态(inactive)的验证者不会被惩罚。一个验证者可能因为还待在待激活队列中,或者其押金还未得到处理,而停留在这种非活跃的状态中 —— 当网络重新获得终局性时,这些验证者就会被激活。另外,如果一个激活状态的验证者发送了主动退出的消息,也会变成非激活状态,也就不会被惩罚。
激活状态且在线的验证者将保持不赚不亏的状态,如果他们的见证消息的打包距离都是完美的 1 的话(即在上一个 slot 发出的见证消息,在这一个 slot 就被打包)。但这是不可能的,所以他们会被轻微地惩罚。以太坊基金会的 djrwto(即 Danny Ryan)已经声明他们正在寻找一种办法来安全地降低对这部分 “尽忠职守” 的验证者的惩罚,因为这种惩罚,总的来说,体验不好。
激活状态且不在线的验证者会被惩罚,而且惩罚会呈平方级上升,也就是说,每个 epoch 处的惩罚都会不断提高。
当一个验证者在一个 epoch 内都没有被打包见证消息,它就会被认定是离线了。当然,如果一个验证者所连接的信标链节点与网络失去同步,或者验证者客户端本身无法工作,也会出现这种无法提交见证消息的情况。可以查找的原因包括客户端的 bug 和 内存/CPU 的资源使用。你也可以乘机学学如果从源代码编译客户端,然后检查一下自己的节点的资源用量。
我们在美国东部时间的 10 月 12 号早上就已经陷入无法敲定区块的状态了。(这种状态的定义是连续 4 个 epoch 无法敲定。)
从那时候开始,“平方型惩罚” 就开始启动。离线的验证者的惩罚力度会随着无终局性状态的持续而不断提高。公式是 惩罚 = 有效余额 * 无终局性持续时间(Epochs-Since-Finality,即当前 epoch 高度减去上一次获得终局性的 epoch 高度)/(2^25)。在数学上可以这么说:单个 epoch 对这些离线验证者的惩罚会随着无终局状态的推移而线性增加,因此总惩罚(惩罚的总和)是平方型上升的(谢谢 torfbolt 指出)。
很难估计网络重新获得终局性的时间,因为验证者参与率会受到客户端故障的影响而不断波动。
如果一个验证者的 “有效余额” 低于 16ETH(超不多是在账户余额还剩 16.75 ETH 的时候),它会被踢出验证者队伍。
即使验证者还未被踢出,不断下降的余额也意味着他们在共识过程中的权重会不断降低。我已经看到一份估计,认为我们会在约 13 天以后重新获得终局性。因此最早就是 10 月 25 号,附近。一些验证者自 8 月份激活以来就没发出过一条见证消息,这些验证者的存在也会加速这个过程。
一个验证者的余额要降到 60.6% 需要大概 18 天,这也就是耗时的上限。
再经过三个连续的时段之后,终局性就将得以重建。离线验证者的惩罚会回复到常规的、不那么严厉的默认值上。
这里有一份很好的 Eth2.0 和信标链介绍材料:https://ethos.dev/beacon-chain/(中文译本)
作者: yorickdowne
翻译: 阿剑