风险提示:请广大读者树立正确的货币观念和投资理念,理性看待区块链,切实提高风险意识。
2022-05-30 17:16

图解以太坊信标链发生的 7 区块重组事件

13.2万

注:原文作者是以太坊基金会研究科学家 Barnabé Monnot

2022 年 5 月 25 日 UTC 时间 8:55,以太坊信标链发生了 7 个区块的重组。我们的目标是提供一个视觉指南,以帮助大家了解以太坊权益证明(PoS)协议以及这次重组发生的原因。

简而言之,这次重组不是信标链的预期行为,它的发生是由三个不同原因的组合造成的:

  1. 由于最近一个名为 「proposer boost」 的分叉选择更新,一个延迟的区块提议分裂了验证者的视图;
  2. proposer boost」 更新作为一个软分叉发布,这造成了一种情况,即一些验证器使用了「proposer boost」更新,而另一些则没有,从而造成了分裂;
  3. 一些客户端中普遍存在一个对预期何时运行分叉选择的已知错误实现,从而导致故障持续存在;

重要的是,重组并没有导致最终性(finality)的丧失。最终性(finality)甚至没有推迟,所以,当我们在谈论这里到底发生了什么时,需要更加精确。

在下文中,我们回顾了以太坊权益证明(PoS)的基础知识,并探讨了这次重组最终是如何发生的。


以太坊权益证明(PoS)基础知识 (101)


权益证明(PoS)以太坊具有两种并行运行的共识机制‌:

  1. 第一个是 FFG Casper,它负责为链提供经济最终性(finality)。每个 epoch 时期(32 个slot ),来自证明者(attester)的“source”和“target”投票都会被统计。当一个检查点区块(一个 epoch 的开始)积累了足够多的目标投票时,它就变得合理了。当最近正确的源投票用于证明目标检查点时,目标检查点就是正确的,而源投票就变得最终确定了。要点是,如果没有至少 1/3 的活跃质押遭到罚没,也无法最终确定冲突的检查点区块。因此,如果某一方没有大规模损失 ETH,就不可能对最终链进行重组。但目前的重组与这部分共识无关。
  2. 第二个组件是 LMD GHOST,它旨在提供一个动态可用的账本,即在最终确定过程中增长链。链上的区块积累了证明者的投票权重,这个权重用于在分叉的情况下确定验证者应该遵循哪个分叉。由于预计在一个区块被释放后,权重会迅速累积,所以分叉预计会很少见,及时的区块不应该被重组。

在 PoS 以太坊中,时间是按 slot 划分的,每个 slot 的时间长度是 12 秒。每个 slot 都会选择一个提议者(proposer),其根据 LMD-GHOST 分叉选择规则(以下简称为分叉选择规则)在他们认为的规范链上构建区块。提议者(proposer)应在 slot 开始时释放其区块,而证明者(attester)应在 slot 开始后 4 秒或接受到区块后释放他们的源/目标/head投票,从而留出一个缓冲时间。

但最近发现,一个迟到的提议者(proposer)可以恶意“事前”重组下一个 slot 中的提议者(proposer)‌。同时,「proposer boost」 被建议通过平衡攻击来解决分裂视图的可能性‌,并将其应用于事前重组。通过使用 「proposer boost」,证明者(attester)会给他们正在认证的当前 slot 的提议者(proposer)增加权重,本质上更喜欢及时的区块提议。我们将在下面的实践中看到这是如何实现的。


所以分叉是如何发生的?


在我们逐步分解之前,让我们先看看分叉是如何发生的。我们将区块表示为矩形,而证明(投票)表示为圆圈(圆圈越大,则为特定区块投票的证明就越多)。随着区块收到越来越多的证明,你可以看到投票权重随着时间的推移而累积。

大致上,区块 74 和区块 75 同时出现了,这形成了一个分叉。一连串的提议者在第 75 号区块上构建了区块,而区块 74 的分叉比竞争分支积累了更多的权重。最终,区块 82 的提议者在区块 74 的基础上构建,以重组 75-81 号区块为代价结束了分叉。现在我们来仔细分析每个步骤,以了解这是如何发生的。


逐步分解分叉过程


在 slot 73,slot 73 的证明者投票支持准时到达的区块 73,这一步时,一切都是正常的。

在 slot 74 时,没有出现任何区块,所以 slot 74 的证明者正在投票支持 slot 73 处的区块,从而增加了其权重。

区块 74 和区块 75 几乎同时出现在 slot 75 的开头,因为区块 74 晚了。「Proposer boost」旨在赋予区块 75 更多的权重,因此 slot 75 的证明者更喜欢区块 75,而不是区块 74,因为在他们看来,区块 75 是及时的。然而,并不是所有的证明者都在使用 「Proposer boost 」方案,所以投票几乎被分成了 50:50。

  1. 在未激活 「proposer boost」 的情况下运行客户端的证明者更喜欢区块 74。
  2. 在激活 「proposer boost 」的情况下运行客户端的证明者更喜欢区块 75。

我们可以清楚地看到分裂,因为投票在分叉的两侧累积,非 boost 的证明者更喜欢 slot 74,而 boost 的证明者更喜欢 slot 75。事实证明,稍微多一点的证明者没有激活「 proposer boost 」方案,所以上面的分叉权重要比下面的分叉权重略高。

现在的问题是:鉴于区块 74 要比区块 75 的权重更高,为什么 proposer 76 是在区块 75 的基础上构建的区块?

原因很微妙,这与当时更新的客户端行为‌有关。提议者应在提出区块提议之前运行分叉选择,并在其 slot 时间段设置。然而,区块 76 的提议者使用的是他们在上一个 slot 设置的分叉选择计算。「Proposer boost」 适用于当前分叉选择 slot 的提议者。因此,提议者 76 在其当前 head 视图中错误地提升了提议者 75,并选择了区块 75 作为其区块的父区块。从提议者 76 的角度来看:

区块 75 上的证明者 + 区块 75 上的 Proposer boost > 区块 74 上的证明者

同时,slot 76 的证明者不断在没有 boost(head 为区块 74)和有 boost 的最重链(head 为区块 76)之间进行投票。

该场景一直重复到 slot 81。请注意,从 slot 75 到 slot 81 的所有没有使用 「proposer boost」的证明者都会继续投票支持区块 74,从而增加其权重。

最终,一个提议者进来了,他没有在前一个 slot 上应用 「proposer boost」 来决定在哪里构建自己的区块。提议者 82 认为区块 74 的权重要比区块 81 更高。虽然区块 81 继承了其之前所有区块的权重,但请记住,投票给区块 74 的证明权重,总是略多于区块 75 到区块 81 中的任何一个……

这里,slot 82 的证明者不会感到困惑:

  1. 那些不使用 「proposer boost」 更新的人显然认为区块 82 会获胜,这与为什么区块 82 建立在区块 74 的基础上的原因相同:区块 74 的权重比区块 81 更重。
  2. 那些使用 「proposer boost 」更新的人也开始认为区块 82 会获胜,投票不再分裂。

最后,信标链继续运行,提议者 83 在区块 82 上构建区块,至此,很明显,区块 75 - 区块 81 已被有效重组了。


总结


重组突出了动态可用链的一个失败案例,这在理论上是可能的,但在实际情况下可能很少会发生,就像工作量证明(PoW)中的长期重组是可能发生的,但在实践中是很少见的(除非发生对抗性行为)。因此,重要的是要认识到,促成这次区块重组的因素纯属是偶然的:

  1. 迟到的区块总是会发生,这个问题没有办法去解决。动态可用链原则上旨在公平地处理这种可能性,以便更及时的提议者看到他们的区块在规范链中被接受。
  2. 但很明显,即使是看起来“local only”的更改(如分叉选择计算)也需要在更大的共识图中加以考虑。以太坊协议研究人员已经熟悉了验证者之间的“分裂视图”的概念,其中一组验证者在本地看到一些东西,而另一组验证者则看到的是其他东西,以及这些分裂视图如何有助于延迟区块链活性(liveness)。我们应该意识到,「proposer boost 」方案的不均匀推出,有可能会产生这样的“分裂视图”,而一个已知的实施错误使得情况变得更糟了。‌‌
  3. 如果所有验证器都运行相同的配置,那么问题就不会发生!特别是,合并后就不会发生这种情况,因为所有验证器都必须在合并之前硬分叉到合并更新配置,否则会被完全排除在共识之外。

PoS 以太坊是一种混合共识,它是专为对抗环境中的鲁棒性而设计的。Sreeram Kannan 最近撰写的一个帖子‌很好地突出了随之而来的挑战:

共识的已知限制,在 Sreeram Kannan 的研究中也有被提到,这正在推动协议的变化。虽然当这种失败发生时,确实是令人失望的,但在我看来,它们并没有使以太坊正在采取的方法无效。

此外,这些故障确实也提醒了我们要谨慎行事,并创建一个不仅在理论上,而且在实践中都稳健的协议。

非常感谢所有帮助我们理解这个问题的研究人员和开发人员。具体来说,Paul Hauner 在分叉发生几分钟内就检测到了重组,然后他在接下来的一个小时内与其他共识客户端开发人员进行了群聊,以对问题的原因进行分类和诊断。感谢 Martin Köppelmann 公开提出这个问题,Jacek Sieka 为我提供了支持当前分析的数据,Potuz 提供了他自己的分析,Terence Tsao 的帖子迅速为社区提供了见解,Michael Sproul 提供了更多数据,以及 Caspar 和 Francesco 提供的帮助。

本文链接:https://www.defidaonews.com/article/6754136
转载请注明文章出处

下载
分享
收藏
阅读
上一篇
下一篇