Part 2: 技术概览
共识
概述
- 节点和验证者是共识系统中的行动者。
- 时隙(slots)和时段(epochs)调节共识时间。
- 区块和认证(attestation)是共识的货币。
- 以太坊的共识协议结合了两个独立的共识协议。
- 本质上,“LMD GHOST”提供活性。
- “Casper FFG”提供最终确定性。
- 它们有时被合称为“Gasper”。
引言
上一节描述了区块链共识的大致情况;本节中,我们将聚焦于以太坊的权益证明共识。我试图跟随一条通过提供足够的信息以理解事物的小径,而不深入两侧技术细节的杂草。所有这些细节都将在规范注解和其他章节中被深入探讨。我也加了一些链接,供想要去分支探索的人使用。
首先必须介绍的是我们将在整个过程中使用的、以太坊特有的术语。
节点(Nodes)和验证者(Validators)
以太坊网络的主要参与者是节点(nodes)。节点的角色是验证共识,并与其他节点形成通信的主干。
验证者(validators)形成共识,而“验证者”(符合以太坊一贯作风)是一种可怕的误称,因为它们实际上并不验证任何东西——验证是由节点完成的。每个验证者代表最初质押的 32 个以太币。它有自己的秘钥(secret key),以及作为其在协议中身份的相关公钥。验证者附在节点上,一个节点可以托管从零到成百数千个验证者。附到同一个节点的验证者们不会独立行动,它们共享着对世界的同一视图。1
使权益证明不同于工作量证明的一个有趣特点是,在权益证明中,我们知道验证者集合(validator set)。有一份完整的列表,上面有预计在任意时刻活跃的所有公钥。知道验证者集合使我们能够实现最终确定性,因为可以识别出在何时获得了参与者的多数票。2
时隙(Slots)和时段(Epochs)
在以太坊的权益证明共识中,时间被严格规定,而工作量证明只与时间有着松散的关系——它试图保持区块间隔的平均恒定,但仅此而已。
最重要的两种时间间隔是时隙(slot,12 秒)和时段(epoch,32 个时隙或 6.4 分钟)。无论网络中发生什么,时隙和时段都会规律而持续地推进。
区块和认证(Attestations)
在每个时隙中,系统都会选择出一名验证者去提议区块。区块包含对信标状态(beacon state)的更新,这些更新包括提议者所收集到的认证,以及以太坊用户交易的执行负载(execution payload)。通过广播协议(gossip protocol),提议者与整个网络共享其区块。
时隙可以是空的:区块提议者可能离线,或提出一个无效的区块,或其区块随后被重组出链。在一条运行良好的信标链中,不应经常发生这类事情,但协议有意在出现空时隙时保持稳健。
在每个时段中,每个验证者都会通过认证的形式分享一次它对世界的视图。认证包含对链头(head of the chain)的投票(LMD GHOST 协议将会使用)和对检查点(checkpoints)的投票(Casper FFG 协议将会使用)。认证也会被广播到整个网络。与区块一样,认证也可能因各种原因缺失,协议可以在不同程度上承受这种情况——粗略地说,认证者参与率的降低会让共识质量下降。3
时段的功能是将处理认证的工作量分散开来。通过认证,每个验证者都会将自己对世界的视图告知其他验证者。如果同时进行所有认证,可能会产生巨大的网络流量和处理负载。将某个时段中的认证工作量分散到所有 32 个时隙可以保持低资源使用率。在每个时隙,只由占总量 的验证者们组成委员会(committees)负责认证。
通过验证者的奖惩系统,协议激励区块与认证的生产和准确性。我们当下不需要深入探讨这些;会有单独一章来阐述所有这些问题。
罚没(Slashing)
在工作量证明中,生产一个区块成本很高。这极大地激励了矿工,使他们按照协议的目标正确行事,以确保自己的区块被纳入链。
在权益证明中,创建区块和认证几乎是免费的 4。需要一种方法阻止攻击者利用这一点去破坏网络。这就是罚没的作用。对区块或认证模棱两可的验证者将被罚没,这意味着他们会被移除出验证者集合,部分质押也被用作罚款。简单地说,模棱两可(equivocation)就是说出两件相互矛盾的事情。它可能是在同一个时隙中提议两个不同区块,或者做出两个相互矛盾的认证,而任何遵守协议的诚实验证者都不会如此行事。
机器中的幽灵
了解了一些术语之后,让我们开始概述以太坊实际的共识机制。
以太坊的权益证明共识协议实际上是两个独立共识协议的结合,它们分别被称为 LMD GHOST5 和 Casper FFG6。这两个协议已被“拧和在一起”,形成我们为 Eth2 实现的共识协议——这个组合协议有时被称为 “Gasper”。
将这两者结合为Gasper是为了在活性和安全性两方面都获得最佳效果。本质上,LMD GHOST 依次为每个时隙提供活性(让链保持运行),而 Casper FFG 提供安全性(保护链免受大规模回滚)。LMD GHOST 使我们继续产出区块,但是这种产出是可分叉的,因此从理论上说并不安全。Casper FFG 修改 LMD GHOST 的分叉选择规则,定期为链赋予最终确定性。尽管如此,如前所述,以太坊优先考虑活性。因此,在 Casper FFG 无法赋予最终确定性的情况下,链仍然会通过 LMD GHOST 机制继续增长。
拧和在一起的这个共识机制并不总是好用。有时我们会看到接合处——两种共识机制间的互动导致了一些稍后将讨论的微妙问题。然而,本着以太坊的精神,它是实用的工程解决方案,实践中运行良好。
历史
Gasper 的详细历史与其组件 LMD GHOST 和 Casper FFG 的发展密切相关,我们将在它们各自的部分中分别回顾这两个组件的历史。要在这里指出的是,Casper FFG 从未被设计为一个独立的共识机制。
正如 Casper FFG 论文中所述:
友好的最终确定性小工具 Casper 是建立在提议机制(proposal mechanism,提议区块的机制)之上的覆盖层。
因此,有一个底层的区块提议机制——这意味着有一个提供某种元共识的底层共识机制,为区块链赋予最终确定性——而 Casper FFG 建立于其上。
最初的计划是将 Casper FFG 作为权益证明的覆盖层,叠加在以太坊的工作量证明共识之上。Casper FFG 将为链定期赋予(如,每 100 个区块)最终确定性——这是工作量证明区块链链所缺乏的属性。这被视作是让以太坊摆脱工作量证明的第一步。有了最终确定性的保证,我们可以减少工作量证明的区块奖励,从而减少总的哈希算力,并将此作为未来的一个过渡步骤,以迈向完全的权益证明,替代挖矿。
2017 年底,这个计划已相当成熟。EIP-1011, 混合 Casper FFG (Hybrid Casper FFG),详细描述了该架构,在 2017 年 12 月 31 日甚至有一个测试网上线。
然而,该计划在 2018 年初被取代。以太坊虚拟机的有限带宽限制了EIP-1011 能支持的验证者集合的大小,进而导致最低质押量为 1500 个以太币,这被视作是不可取的。大约在同一时间,通向完整的、更具可扩展性的权益证明协议的路径变得更加清晰,我们开始着手设计,这就是后来的以太坊 2.0。
因其通用性,Casper FFG 在重新设计中幸存下来,并被以太坊 2.0 采用——不是作为工作量证明的覆盖层,而是作为一个新的权益证明协议 LMD GHOST 的覆盖层。
最终确定性小工具(A finality gadget)
当说到 Casper FFG 覆盖现有的区块提议机制时,我们的意思是它采用了一个现有的区块树并以特定方式对其进行了修剪。通过使底层区块树的某些分支无法访问,Casper FFG 修改了这些区块树的分叉选择。
请将这个区块树看作是由某种底层共识机制产生的,无论是工作量证明还是权益证明中的 LMD GHOST。
有三条分叉(分支)的任意区块树。区块 , , 中的任意一个都可能是区块顶端(这些区块标识的选择是为了方便,而非暗示某种特定的排序)。
在上图情形中,有三个候选的头块:, , 。在工作量证明的最长链规则下,头块的选择显而易见:必须选择 ,因为它具有最大的区块高度,也就是(几乎)等同于完成最多的工作量。在 LMD GHOST 下,我们不能仅凭这一信息去选择头块,还需要看到其他验证者的投票才能做出选择。
挑战在于,从区块 到 的链可能来自于攻击者。攻击者可能秘密挖掘了该链,然后在所谓的 51% 攻击中使用它。工作量证明下的节点别无选择,只能进行重组以使 成为头部,从而偏向攻击者的链,并可能受到双花攻击(double-spends)。
Casper FFG 的价值在于它赋予了最终确定性。假设区块 被 Casper FFG 标记为是“最终的”(这会自动最终确定区块 、 和 )。最终确定性会修改底层协议的分叉选择规则,以排除任何与区块 竞争的分支——即任何不是由 派生的区块。换句话说,分支会被修剪,确保已被最终确定的区块前面没有分叉。
这里的区块树和上一幅图片中的一样。但现在区块 已经获得最终确定性。Casper FFG 分叉选择认为任何不包括区块 的链都应该被忽略。毫无疑问,我们的头块现在是 。
当区块 被最终确定,分叉选择必须忽略以区块 和区块 打头的分支。我们最后只保留了一个候选头块:。
从根本上说,Casper FFG 所提供的最终确定性可以防止大规模的重组(回滚)。任何已获得最终确定性的区块或已获得最终确定性的区块的祖先们都永远不会被回滚。在以太坊中实现的 Casper FFG 中,我们必须对“永远”加以限定,即“不会烧掉至少 1/3 的以太币质押总量”的前提下。这就是权益证明区块链提供的经济最终确定性。
结论
回过头来,这是那句话,我们尝试理解它的所有部分。
以太坊的权益证明(PoS)共识协议是通过在分叉选择规则 LMD GHOST 之上应用最终确定性小工具 Casper FFG 来构建的,LMD GHOST 是贪婪、最重的可被观察子树(Greedy Heaviest-Observed Sub-Tree, GHOST)规则的一种变体,它只考虑每个参与者的最近一次投票(最新消息驱动,Latest Message Driven, LMD)。
我们花了一些时间讨论什么是共识协议,以及它做了什么,并简单了解权益证明。我们讨论了最终确定性,在较高层面上说明了 Casper FFG 如何形成一个“最终确定性小工具”,它被应用于作为区块提议机制的 LMD GHOST 之上。
还有很多工作要做。接下来的章节中,我们将更深入探讨 LMD GHOST, Casper FFG,以及它们如何结合而成 Gasper 协议。
另见
关于这一切是如何汇聚在一起的历史,Vitalik 发起过一场精彩的推文风暴。可以在这里和这里找到整理后的版本。他稍微讨论了一下弱主观性,我们后面会处理这个问题。
《权益证明常见问题》(Proof of Stake FAQ)依然是对我们将要讨论的许多话题的极好入门读物。
在 Devconnect 2022 的 ETHconomics 上,Joachim Neu 的演讲《以太坊权益证明的共识问题的缘由与解决方案》(The Why and How of PoS Ethereum's Consensus Problem)对于可用性与最终确定性之间的权衡以及以太坊如何处理这一问题提供了非常易懂的见解。当我们讨论到 Gasper 协议时,我们将再次提到“嵌套账本(nested ledgers)”的概念。
- 谈到以太坊的去中心化时,牢记这一点非常有益。比如说,网络上有 60 万个活跃的验证者,这与有 60 万个独立行动者相比还相去甚远。观察节点的数量以及验证者在节点间的分布,将为以太坊的去中心化提供更有用的衡量指标。↩
- 按照共识术语中的说法,我们能够拥有“可问责的安全性(accountable safety)”。↩
- Beaconcha.in 网站按时段呈现认证参与(也被称为投票参与)。这是衡量网络健康程度的好方法。该比率通常超过 99%.,对于一个大规模分布式共识协议,这是非常出色的水准。↩
- 有时这被称为“无利害关系问题(nothing at stake problem)”。↩
- “最新消息驱动的,贪婪的、最重的可被观察子树(Latest Message Driven, Greedy Heaviest Observed Subtree)”。我将在LMD GHOST 章节中具体解释这个命名。↩
- “友好的最终确定性小工具 Casper(Casper the Friendly Finality Gadget)”。同样,我将在进入特定的 Casper FFG 章节时解释这个略显奇怪的命名。↩