Part 2: 技术概览

共识

基础知识

  • 共识是一种通过不可靠的组件构建可靠的分布式系统的方法。
  • 基于区块链的分布式系统旨在就单一的交易历史达成一致。
  • 工作量证明和权益证明不是共识协议,而是使共识协议成为可能。
  • 许多区块链共识协议是“可分叉”的。
  • 可分叉的链使用分叉选择规则,有时也会经历重组。
  • 在一个“安全”的协议中,永远不会发生坏事。
  • 在一个“活跃”的协议中,总会发生好事。
  • 现实中不存在始终同时保持安全和活跃的协议。

引言

本节介绍与共识、分叉选择和最终确定性相关的基础知识。其中大部分内容并不特定于以太坊,而是为提供一般背景。

共识协议试图解决的挑战是在不可靠的基础设施之上构建可靠的分布式系统。对共识协议的研究可以追溯到20世纪70年代甚至更早,但在以太坊中,我们所面对的挑战规模要大得多。

以太坊共识层的目标是使全球数万个独立节点能够完全同步运行。每个节点维护一个包含每个账户状态的账本,而每个账本必须与其他所有账本相匹配。不能有任何差异;节点必须达成一致,迅速地达成一致。这就是我所说的“可靠的分布式系统”。

这些节点通常运行在消费级的硬件上。它们通过互联网这样一个可能有着低带宽、高延迟、丢包、或无限期中断的不可靠的异步网络通信。节点运营者有时会错误配置他们的软件,或者更新不及时。而且,更刺激的是,可能有大量的攻击者为获得利益而运行恶意节点或者篡改通信。这就是我所说的“不可靠的基础设施”。

以太坊的一个明确设计目标是,它不仅在每个节点都稳定运行且通信顺畅时表现良好。我们已竭尽全力设计了一个系统,即使其下的世界崩溃,它也能尽力维持运行。

达成共识

以太坊网络由大量的单个节点组成。每个节点独立行动,节点之间通过不可靠的异步网络,即互联网进行通信。任一单个节点可能是诚实的—始终正确行动—或者以各种方式出错。简单的错误如停机或无法通信,或者是遵循了不同版本的协议、主动试图误导其他节点、发布矛盾的消息、以及任何其他形式的故障。

用户提交交易至节点网络后,共识协议确保所有正确节点就交易历史(即交易处理的顺序及结果)达成一致。例如,如果我拥有1个以太币并尝试同时发送给Alice和Bob,我们会预期网络最终确认只有Alice或Bob其中一方收到这个以太币。若两者都收到或均未收到,则交易失败。

共识协议是就交易的排序达成一致的过程。

实际上,以太坊的共识协议“拧和”了LMD GHOSTCasper FFG两种协议,这一组合即Gasper。我们将在后续内容中详细探讨这两种协议。

拜占庭将军

在 1982 年的一篇论文中,Leslie Lamport用相当诙谐的方式描述了共识系统试图解决的基本问题——构建可靠的分布式系统。

让我们想象拜占庭军队的几个军团分别扎营在敌方城市外,每个军团由自己的将军指挥。将军们只能通过信使相互通信。观察敌情后,他们需要制定统一的行动计划。

这一表述说的很清楚没有全局的整体视角,没有上帝模式,我们无法“一览众山小”并做出决定。我们只是将军中的一个,关于其他将军的唯一信息来源是所收到的消息——它们可能是真实的,也可能是虚假的,或者是基于有限信息的误解,又或者是在传递过程中被延误或篡改。我们的视角非常有限,但我们必须尽可能全面理解整个系统的状态。

需要时刻记住这一点。当我们绘制区块链和区块树时,往往假设这就是整个系统的某种“状态(the state)”。但这些图只能代表系统中单个参与者的局部视角。我的节点对系统的理解可能与你的不同,哪怕只是暂时的,因为我们都在不可靠的网络中运行。例如,我俩会在不同的时间,或者以不同的顺序看到同样的区块,更有甚者,我们所见的区块也许彼此大相径庭。

Lamport 用下面的话捕捉到系统的缺陷:

然而,部分将军可能是叛徒,试图阻止忠诚的将军达成协议。

这些变节的将军象征着我们所称的“拜占庭行为”或“拜占庭故障”。他们可以以任意方式行事:拖延消息、对消息重新排序、径直撒谎、向不同收件人发送矛盾的消息、完全不作回应、或任何我们能想到的其他行为。

一个节点接收消息的示意图

我收到来自其他节点的大量消息,但我不知道哪些是准确的,也不知道它们的发送顺序,以及是否有任何消息丢失或只是延迟。但无论如何,我们需要达成协议。

忠诚的将军需要一种方法,以能够可靠地产生如下结果:

A. 所有忠诚的将军决定采取相同的行动计划(例如“进攻”或“撤退”),以及

B. 少数叛徒无法致使忠诚的将军们采用错误计划。

在这种拜占庭分布式系统中达成共识并非易事,但多年来已有一些相当成功的方法。

第一种主流的解决方案是 1999 年 Liskov 和 Castro 发表的实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法。 这种算法依赖于相对较小和有限的已知共识参与者(被称为副本,replica)集合。在下面讨论的语境中,PBFT 总是“安全的”,且不会产生分叉。

中本聪共识——由中本聪为比特币发明于 2008 年——采取了截然不同的方法。它不是将参与者限制在某个已知集合中,而是使用工作量证明来无许可地选择临时领导者进行共识。与 PBFT 不同,中本聪共识允许分叉,且在形式上是不“安全的”。

自此以后,这些方法和其他的新颖替代方案(如 Avalanche 系列协议)的许多变体已大量涌现。Avalanche 白皮书的第 7 节“相关工作(Related Work)”对目前在区块链世界中使用的各种共识协议进行了很好的概述。

权益证明和工作量证明

在此,我们不妨指出,工作量证明和权益证明本身都不是共识协议。它们经常被(懒散地)称为共识协议,但都只是共识协议的辅助工具。

大多数情况下,工作量证明和权益证明都是抵抗女巫攻击的机制,它们为参与协议设定一种成本,而这可以防止攻击者以低成本或零成本压垮协议[^fn-types-of-proof]。

[^fn-types-of-proof]:在工作量证明中,你提供的”证明”是一个使区块哈希成为特定值的数字。这证明了你确实做了计算工作。在权益证明中,你的证明则是与区块链上的质押存款相关联的私钥。还有其他可用的证明机制,比如时空证明

尽管如此,通过分叉选择规则,工作量证明和权益证明通常都与它们所支持的共识机制紧密耦合。它们提供了一种有用的方法来为区块链分配权重或分数:在工作量证明中,是已完成的总工作量;在权益证明中,是支持特定区块链的价值量。

除了这些基本因素外,工作量证明和权益证明都支持在其基础上建立多种不同的共识协议,而每种协议都有自己的动态和权衡。同样,Avalanche 白皮书第 7 节“相关工作”中的概述很有启发性。

区块的链

区块链技术背后的基本原语当然是区块。

一个区块由一个领导者(区块提议者)收集的一组交易组成。一个区块的内容(有效载荷,payload)可能因协议而异。

  • 以太坊执行层链上的区块有效载荷是用户交易列表。
  • 合并前的权益证明信标链上的区块有效载荷(大部分)是由其他验证者做出的一系列认证。
  • 合并后的信标链区块也包含了执行层的有效载荷(用户交易)。
  • EIP-4844 在以太坊上实现,区块中将包含对不透明的二进制大对象(Binary Large Object,blob)数据的承诺,以及用户交易的有序列表。

除了特殊的创世区块外,每个区块都建立在父区块之上,并指向父区块。这样,我们就得到了一个由区块组成的链条:区块链。无论区块的内容如何,协议的目标都是让网络上的所有节点对区块链的历史达成一致。

一个线性的区块的链的示意图

一条区块链。时间自左向右流动,除创世区块外,每个区块都指向它的父母区块。

当节点将它们的区块添加到链顶端时,链就会增长。这是通过临时选择一个“领导者”来实现的,“领导者”是有权扩展链的单个节点。在工作量证明中,领导者是首先为其区块解决工作量证明难题的矿工。在以太坊的权益证明中,“领导者”是从活跃的质押者池中随机选出的。

领导者(通常称为区块提议者)向链上添加一个单独的区块,并全权负责选择和排列该区块的内容,但其区块必须符合协议规则,否则网络的其他部分将直接忽略它。

使用区块是一种优化。原则上,我们可以将单个交易逐个添加到链上,但这会增加巨大的共识开销。因此,区块是成批的交易,有时人们会争论这些区块应该有多大。在比特币中,区块大小受区块中数据字节数的限制。在以太坊的执行层链中,区块大小受区块的燃料限制(gas limit,即运行区块中的交易所需的工作量)。信标区块大小由硬编码的常数限制。

区块树

我们最初绘制的整洁线性链条大多数情况下可以反映实践中的情况,但不总是如此。有时,可能由于网络延迟、不诚实的区块提议者或客户端错误,任何特定节点都可能会看到类似下面的情况。

区块树的示意图

一般来说,我们可能最终得到一棵区块树而不是区块链。时间同样是从左向右流动,每个区块都指向它的父母块。

在实际的网络中,我们可能会得到更像区块树而不是区块链的东西。在这个例子中,很少有区块建立在“明显”的父母区块上。

为什么区块 CC 的提议者接在 AA 区块后,而非 BB 的后面?

  • 可能是 CC 的提议者在准备好做出提议时还没有接收到区块 BB
  • 可能是 CC 的提议者特意要将 BB 从自己从自己的链中排除出去,例如为了窃取 BB 中的交易,或审查 BB 中的某些交易。
  • 可能是由于某些原因,CC 的提议者认为 BB 区块无效。

对于更广泛的网络来说,至少前两个原因是无法区分的。我们只知道 C 建立在 A 之上,但永远无法确定为什么。

同样,为什么区块 D 的提议者构建在区块 B 之上,而不是 C?上述的原因仍然适用,而且我们还可以添加另一个:

  • D 的提议者可能基于某些理由,认为更广泛的网络最终纳入 B 的可能性大于纳入 C。因此,在 B 之上构建 D 比在 C 之上构建 D 更有机会进入最终的区块链。

区块树中的各种分支被称为“分叉”。在网络和处理延迟的情况下会自然产生分叉。但也可能是由于客户端故障、客户端恶意行为或协议升级改变了规则,使得旧的区块在新规则下失效。后者通常被称为“硬分叉”。

共识协议中分叉的存在是将活性置于安全性之上的结果,这一点在下文中会讨论:如果你去问那些遵循不同分叉的节点,它们会就系统状态给出不同的答案。存在不产生分叉的共识协议,例如古典共识世界中的 PBFT 和区块链世界的 Tendermint。这些协议总是产生单一的线性链,因此在形式上是“安全的”。不过,在互联网等异步网络上,它们牺牲了活性:与其分叉,它们彻底停止运转。

分叉选择规则

正如我们所见,由于各种原因——网络延迟、网络中断、消息接收顺序错误、对等节点的恶意行为——网络上的节点最终会对网络状态有不同的视图(view)。最终,我们希望网络上的每个正确节点都能对历史达成一致的线性视图,从而对系统状态形成共同的视图。协议的分叉选择规则(fork choice rule)就是为了达成这种一致。

当给定一个区块树,以及一些基于节点对网络的本地视图的决策标准时,分叉选择规则的设计初衷是从所有可用的分支中,选择最有可能成为最终的线性的规范的链的那一个。也就是说,当节点试图向规范视图靠拢时,它将选择最不可能被修剪出区块树的分支。

区块链作为区块树子集的示意图

分叉选择规则从候选者中选择一个头块。头块标识出一条唯一的、可追溯到创世区块的线性区块链。

分叉选择规则通过选择一个分支顶端的区块(被称为头块)来隐含地选择一个分支。

对于任何正确的节点,任何分叉选择规则的第一标准是:它选择的区块必须是有效的,遵守了协议的规则,并且它的所有祖先也必须是有效的。任何无效的区块都会被忽略,而建立在无效区块上的任何区块自身也是无效的。

鉴于此,有许多不同的关于分叉选择规则的例子。

  • 以太坊和比特币中的工作量证明协议使用“最重链规则”1(有时称为“最长链”,尽管这并不完全准确)。头块是在工作量证明下完成最多累积“工作”的链的顶端。
  • 以太坊的权益证明 Casper FFG 协议中的分叉选择规则是“跟随包含最高的合理检查点的链”,并且永远不会回滚一个已经最终确定的区块。
  • 以太坊的权益证明 LMD GHOST 协议中的分叉选择规则在其名称中有所体现:采用“最贪婪、最重的可被观察子树”。它涉及去计算验证者对区块及其后代区块的累积投票。它也适用与 Casper FFG 相同的规则。

我们将在它们各自的章节中详细解释第二和第三个例子。

你可能已经看出来了,这些分叉选择规则都是为一个区块分配分数的方法。获胜的区块——头块——有最高的分数。背后的想法是,当所有正确的节点最终看到某个区块时,将毫不含糊地认同它是头块,并选择跟随其分支,无论自己对网络有什么其它视图。因此,所有正确的节点最终都会就一个被追溯到创世纪的单一规范链的共同视图达成一致。

重组(Reorgs)和回滚(reversions)

当一个节点接收到新的区块(和在权益证明中对区块的新投票)时,它将根据新信息重新评估分叉选择规则。最常见的情况是,新区块将是节点当前视为头块的区块的子区块,并将成为头块。

然而,有时新区块可能是区块树中某个其他区块的后代。(请注意,如果节点还没有新区块的父区块,它需要询问其对等节点以获得父区块,对于它知道自己所缺失的任何其它区块也是如此。)

无论在何种情况下,在更新的区块树上运行分叉选择规则可能会指向一个与先前头块不同分支上的头块。当这种情况发生时,节点必须执行重组(reorg,是 reorganisation 的简写),这也被称为回滚。它将踢出(回滚)之前已经包含在其链中的区块,并将采用新的头块分支上的区块。

在以下图表中,节点评估区块 F 为头块,因此其链由区块 A, B, D, E, F 组成。节点知道区块 C,但它不在节点的链的视图中;区块 C 在一个侧分支上。

在回滚之前的区块链示意图

此时,节点认为区块 FF 最可能是头块,因此其链是区块 [ABDEF][A \leftarrow B \leftarrow D \leftarrow E \leftarrow F].

一段时间后,节点接收到区块 G,它不是建立在节点当前的头块 F 上 ,而是建立在区块 C 的分支上。根据分叉选择规则的细节,节点可能仍然评估 F 为比 G 更好的头块,因此忽略 G。但在当前情形中,我们将假设分叉选择规则表明 G 是更好的头块。

区块 D, E, 和 F 不是区块 G 的祖先,所以它们需要从节点的规范链中移除。这些区块包含的任何交易或信息都将被回滚,就好像它们从未被接收过一样。节点必须完全倒回处理区块 B 之后的状态。

倒回区块 B 后,节点可以将区块 C 和 G 和添加到其链中并相应地处理它们。一旦结束,节点就完成了其链的重组。

在回滚之后的区块链示意图

现在节点认为区块 GG 是头块的最佳选择,因此其链必须更改为区块 [ABCG][A \leftarrow B \leftarrow C \leftarrow G].

稍后,可能会出现一个建立在区块 F 之上的区块 H。如果分叉选择规则表明新的头块应当是 H,那么节点将再次执行重组,回滚区块到 B,并重新建立分支 H 上的区块。

在工作量证明和以太坊的权益证明协议中,由于区块传播的网络延迟,短暂的一两个区块的重组并不罕见。除非链遭到攻击、分叉选择规则的制定或分叉选择规则客户端的实现存在漏洞,否则非常长的重组应该极为罕见。

安全性与活性

在讨论共识机制时,经常蹦出来两个重要概念:安全性(safety)和活性(liveness)。

安全性

非正式地说,如果“没有坏事发生”2,某算法就被认为安全。

在区块链环境中可能发生的坏事情的例子包括加密货币的双花(double-spend),或者两个彼此冲突的检查点的最终确定。

分布式系统中安全性的一个重要方面是“一致性”。也就是说,如果我们询问不同的(诚实的)节点在链的某个进展点上的状态,例如在特定区块高度时某个账户的余额,那么无论我们询问哪个节点,我们应该总是得到相同的答案。在一个安全的系统中,每个节点对链的历史都有着永不改变的相同视图。

实际上,安全性意味着我们的分布式系统“表现得像一个中心化实例,一次只执行一个原子化的操作。”(引用 Castro 和 Liskov)。在 Vitalik 的去中心化分类中,一个安全的系统是在逻辑上是中心化的。

活性

再次非正式地说,如果“最终会发生一些好事”,那么某种算法就被认为具有活性。

在区块链环境中,我们通常认为这意味着链总是可以添加一个新区块;它永远不会陷入无法产生包含交易的新区块的僵局。

“可用性(Availability)”是看待这个问题的另一种方式。我希望链是可用的,这意味着如果我向一个诚实的节点发送一个有效的交易,它最终会被包含在一个扩展了这条链的区块中。

二者不可兼得!

CAP 定理是分布式系统理论中的一个著名结果,它指出没有分布式系统可以同时提供(1)一致性(consistency),(2)可用性,和(3)分区容错性(partition tolerance)。分区容错性是指节点之间的通信不可靠时仍能正常运行的能力。例如,网络故障可能将节点分成两个或多个无法相互通信的群组。

在区块链的语境中很容易证明 CAP 定理。假如亚马逊网络服务(AWS)下线,使得所有由 AWS 托管的节点可以相互通信,但没有一个节点可以与外界通信;或者一个国家阻止所有进出的连接,使得没有任何广播(gossip)流量可以通过。这两种情况都将节点分成两个不相干的组,如 AABB

网络分区示意图

网络被分区:AA 中的节点可以彼此沟通,但它们不能与 BB 中的任何节点对话,反之亦然。

假设连接到AA组网络的某账户发送了一个交易。如果AA组中的节点处理了该交易,那么他们最终的状态就与BB组中的没有看到该交易的节点们不同。因此,总的来说,我们失去了所有节点之间的一致性,因此失去了安全性。避免这种情况的唯一方法是AA组中的节点拒绝处理交易,在这种情况下我们失去了可用性,以及活性。

总之,CAP 定理意味着,我们无法指望设计出一个在任何情况下都既安全又具有活性的共识协议,因为我们别无选择,只能在一个不可靠的网络上运行,即互联网。3

以太坊优先考虑活性

在网络状况良好的情况下,以太坊共识协议可同时提供安全性和活性,但在网络运行不太顺畅时,则优先考虑活性。在网络分区的情况下,分区两侧的节点将继续产生区块。不过,最终确定性(finality,安全性的一种属性)将不再在分区两侧一起发生。根据两侧管理的质押比例,要么一侧继续获得最终确定性,要么两侧都不会继续获得最终确定性。

最终,除非分区得到解决,否则双方都会因新颖的怠惰惩罚(inactivity leak)机制而重新获得最终确定性。但这也最终会导致安全故障。每条链将最终确定不同的历史,两条链将永远变得不可调和与独立。

最终确定性(Finality)

我们将在接下来的章节中大量讨论最终确定性,这是链的安全性的属性。

最终确定性是指有些区块永远不会被回滚。当一个区块被最终确定时,网络上的所有诚实节点都同意该区块将永远保留在链的历史中,因此它的所有祖先也将保留在链的历史中。最终确定性让你对比萨饼的支付不可撤销,就像用现金一样。这是对双花的终极保护。4

一些共识协议,如经典的 PBFT 或 Tendermint,每轮(每个区块)都会最终确定。一旦一轮交易被包含在链上,所有节点都同意它将永远存在。一方面,这些协议非常“安全”:一旦交易被包含在链上,它将永远不会被回滚。另一方面,它们容易发生活性故障:如果节点无法达成一致——例如,如果超过三分之一的节点关闭或不可用——那么就没有交易可以被添加到链上,链将停止运行。

其他共识协议,如比特币的中本聪共识,根本没有任何最终确定性机制。总是存在有人呈现出一个更重的替代链的可能性。当这种情况发生时,所有诚实的节点必须相应地重组他们的链,回滚他们之前处理的任何交易。诸如你的区块有多少确认之类的启发式方法只是对最终确定性的近似值,而无法保证。5

以太坊的共识层优先考虑活性,但也努力在有利的情况下以最终确定性的方式提供安全保证。这是试图两全其美的尝试。Vitalik 这样辩护6

一般原则是你想给予用户“尽可能多的共识”:如果达成共识的节点 >2/3>2/3 那么我们就会得到常规的共识。但如果 <2/3<2/3,那也不需要停下来什么也不做,显然,尽管新区块的安全性暂时降低,链仍然可能继续增长。如果个别应用不满意较低的安全级别,它可以自由地忽略那些区块,直到它们被最终确定。

在以太坊的共识层中,最终确定性是由 Casper FFG 机制提供的,我们很快就会探讨这一机制。其原理是,所有诚实的验证者定期就最近的检查点区块达成一致,他们永远不会撤销这些区块。然后,该区块及其所有祖先区块就是“最终确定的”区块——它们永远不会改变,如果你向网络中的任何诚实节点询问它们或其祖先区块的情况,你总会得到相同的答案。

一个图表,显示一条链已被最终确定的部分和分叉部分。

诚实的节点已经同意检查点及其所有祖先区块是“最终确定的”且永远不会被回滚。因此,在检查点之前没有分叉。检查点之后的链仍然可能发生分叉。

以太坊的最终确定性是“经济最终确定性”。理论上,协议可能会最终确定两个相冲突的检查点,即对链的历史的两个矛盾视图。然而,这只有在巨大且可量化的成本下才可能出现。除了最极端的攻击或失败情景外,最终确定就是最终确定。

Casper FFG 部分深入探讨了这种最终确定性机制的工作原理。

另见

Leslie Lamport 参与的内容总是值得一读,他与 Shostak 和 Pease 合著的 1982 年原始论文《拜占庭将军问题》(The Byzantine Generals Problem)包含了许多洞见。虽然他们提出的算法在当今条件下已经效率极低,但该论文对推理一般共识协议是很好的引入。Castro 和 Liskov 在1999 年发表的开创性论文《实用拜占庭容错》(Practical Byzantine Fault Tolerance)也是如此,它对以太坊的 Casper FFG 协议的设计产生了重大影响。但是,你可能会想将这些“经典”方法与中本聪在 2008 年比特币白皮书中描述的工作证明优雅的简洁性相对比。如果说工作量证明有什么优点的话,那就是它的简洁。

上文中我们提到了 Gilbert 和 Lynch 在 2012 年的论文《CAP 定理的视角》(Perspectives on the CAP Theorem)。这篇论文对一致性和可用性(或我们语境中的安全性和有效性)概念进行了深入探讨,有很强的可读性。

由于分叉选择规则的客户端实现之间存在差异,以太坊信标链在 2022 年 5 月经历了七个区块的重组。这些差异在当时是众所周知的,并且被认为是无害的。事实证明并非如此。巴纳贝-蒙诺(Barnabé Monnot)对这一事件的描述非常有启发性。

Vitalik 的博客文章《关于结算的最终确定性》(On Settlement Finality)提供了对最终确定性概念更深入、更细致的探索。

对于我们正在构建的系统,我们的理想是它们是政治去中心化的(以实现无许可和抗审查),架构去中心化的(以实现无单点故障的抗逆力),但在逻辑上是中心化的(以实现一致的结果)。这些标准对我们如何设计共识协议有很大影响。Vitalik 在《去中心化的意义》(The Meaning of Decentralization)一文中探讨了这些问题。


  1. 与流行的看法相反,以太坊的工作量证明协议并没有在其分叉选择中使用任何形式的 GHOST。这是个非常顽固的误解,可能是因为以太坊白皮书的缘故。我最终询问了 Vitalik,他向我确认,尽管曾计划在 PoW 中使用 GHOST,但由于担心一些未被指明的攻击,它从未被实施。最重链规则更简单,也经过良好测试。它干的很棒。
  2. 那个我所引用的关于安全性和活性的有用且直观的定义,最早以简短的形式出现在 Lamport 1977年的论文《多进程程序正确性的证明》(Proving the Correctness of Multiprocess Programs)中,Gilbert 和 Lynch 在 2012 年的论文《关于 CAP 定理的观点》(Perspectives on the CAP Theorem)中也这样定义它们。
  3. CAP 定理与 Fisher, Lynch 和 Paterson 在 1985 年的论文《故障进程中分布式共识的不可能性》(Impossibility of Distributed Consensus with One Faulty Process)中描述的另一个著名结果有关,通常称为 FLP 定理。这证明了,即使在一个可靠的异步网络中(即,消息传递所需时间没有限制),只要有一个故障节点,就可以阻止系统达成共识。也就是说,即使这个未分区的系统也不能同时具备活性和安全性。Gilbert 和 Lynch 在一篇论文的第 3.2 节讨论了 FLP 定理。
  4. 值得注意的是,最终确定性从来都不是绝对的。无论任何协议怎样声称,如果绝对多数节点同意(例如通过软件升级)回滚一堆已经最终确定的区块,那么这就会发生。归根结底,就像所有事物一样,最终确定性的概念服从于社会共识。有关进一步讨论,请参见《关于结算的最终确定性》(On Settlement Finality)。
  5. 在撰写本文时,至少有一个交易所要求从以太坊经典网络的存款中获得 40000 个确认。这意味着在包含存款交易的区块之上必须建立四万个区块,交易所才会处理它,这大约需要六天时间。这一要求反映了对 ETC低哈希率工作量证明链易受 51% 攻击的脆弱性的担忧——对于攻击者来说,随意回滚区块相对容易。事实上,面对一个精心设计的 51% 攻击,无论多少确认次数都无法达到真正安全。
  6. 这一点的价值在 2023 年 5 月 12 日信标链在大约一个小时中停止最终确定(stopped finalising)时显现。在此期间,参与共识的验证者从超过99% 下降到大约 40%。然而,普通的以太坊用户和应用程序几乎没有察觉。区块继续被生产(尽管少于正常情况),交易继续被执行。

Created by Ben Edgington. Licensed under CC BY-SA 4.0. Published 2025-05-07 16:06 UTC. Commit 556c0ca.