在每个 epoch 中,验证者被平均分配到 slot 中,然后细分为适当规模的委员会。验证者只能在一个 slot 和一个委员会中。

原文:The Beacon Chain Ethereum 2.0 explainer you need to read firstethos.dev

作者:JosephC

编译:Xiang,W3.Hitchhiker

封面:Photo by Shubham's Web3 on Unsplash

再次感谢 ECN 社区对以太坊的贡献,文章基于 ECN 中文(2020-4-21)版本更新,翻译的(2022-10-01)版本。新版本中删除了分片、交联和 ETH2 等旧术语相关文档,并更新改进部分文档。 有关之前版本,请参考上述中文链接。

引擎在飞行过程中被改变了! 2022 年 9 月 15 日 —— 以太坊切换到 POS 机制的那一天。

那个新引擎就是信标链。

是时候来了解一下它是如何工作的了吗?

以太坊的信标链将通过适当水平的示例进行说明,从而让你熟悉信标链并节省时间。

Slot 和 Epoch

信标链为以太坊的共识提供心跳。每个 Slot 为 12 秒,一个 Epoch 为 32 个 Slot:6.4 分钟。

前 32 个Slot位于 Epoch 0。创世区块位于 Slot 0。

Slot 是将一个区块添加到信标链。当系统处于最佳运行状态时,每 12 秒添加一个区块。验证者需要同步时间

Slot 可以是空区块,信标链创世区块位于 Slot 0。

验证者(Validators)和证明(Attestations)

工作量证明与矿工有关,但以太坊的验证者是权益证明的 “虚拟矿工”。验证者运行以太坊的共识。他们的激励措施将在后面的验证者奖惩机制中讨论。

区块提议者proposer)是被伪随机选择来构建区块的验证者。

大多数时候,验证者是对区块进行投票的证明者(attesters)。并且投票本身也会被记录在信标链中。

某个Slot的第 28 个位置错过的提案

在每一个 epoch 中,一个验证者被(伪)随机分配到一个 slot。

一份证明(attestation)则是验证者的一记投票,投票通过验证者的余额进行加权。除区块之外,证明也会由验证者在系统中进行广播。

验证者之间也会互相监督,通过举报其他验证者自相矛盾的投票或提议多个区块的行为,从而获得奖励。

信标链里主要记录了验证者的地址、每个验证者的状态、证明。验证者需经由信标链激活。

质押验证者:含义(semantics)

验证者是虚拟  的,由质押者激活。在 PoW 中,用户购买硬件成为矿工。在以太坊中,用户质押 ETH 来激活和管理验证者。

为了更清楚地理解质押验证者的含义,我们可以将质押者(stakers)和质押金(stake),验证者(validators)和余额(balance)联系起来。每个验证者拥有的余额最多为 32 个 ETH,不过,质押者可以质押他们所有的 ETH。每质押 32 个 ETH,一个验证者就会被激活。

验证者由使用信标(链)节点的验证者客户端(validator clients执行。信标链节点(beacon node)具有跟踪和读取信标链的功能。验证者客户端可以实现信标节点功能或调用信标链节点。一个验证者客户端可以执行多个验证者。

委员会(committees)

一个委员会由一组验证者组成。为加强安全保障,每个 slot 的委员会至少由 128 位验证者组成。一个攻击者能够控制 2/3 委 员会成员的可能性低于万亿分之一

以太坊信标链这一名词,来源于随机信标(randomness beacon, 向公众提供随机数字)这一概念。信标链在一个伪随机的过程(RANDAO)中达成共识。

在每个epoch中,RANDAO为每个slot挑选区块提议者,并将验证者打乱,分配至委员会中

RANDAO 根据验证者余额的权重,选择出区块提议者。在同一个 slot 中,一个验证者可以同时是区块提议者和委员会成员,但这并不是常态。出现这种情况的概率为 1/32,因此我们大概会在每个 epoch 碰到一次。上图情景中的验证者不到 8192 个,不然每个 slot 就得至少包含两个委员会。

上图综合描述了三个 Slot 中发生的情况。在 Slot 1 中,有验证者提议出一个区块,该区块得到两个验证者的证明;而委员会 A 里的一个验证者离线了。Slot 1 中的证明和区块被广播到网络上,许多验证者也收到了该信息。在 Slot 2 中,又一个区块被提议出来,而委员会 B 的一个验证者错过了该信息,于是该验证者认为信标链头是 Slot 1 中的区块。请注意,这个验证者跟 Slot 1 的离线验证者有所不同。投票证明信标链头的这个过程被称为 “LMD GHOST 投票”。在 Slot 3 中,委员会 C 上所有的验证者都遵循 LMD GHOST 分叉选择规则,并独立地投票选出同一个信标头。

一名验证者在每个 epoch 中只参与一个委员会。一般来说,系统中的验证者会超过 8192 个,所以每个 slot 中会有一个以上委员会。所有委员会的规模都一样大,至少由 128 个验证者组成。当系统中的验证者少于 4096 个时,安全性就会打折扣,因为这意味着单个委员会的验证者将少于 128 个。

在每个 epoch 中,验证者们被均匀地分配到各个 slot 中,然后进一步分配到规模相当的各委员会中。所有验证者都要在自己所在的 slot 中投票选出信标链头。混洗(shuffling)算法会适时调整每个 slot 中委员会的数量,以保证每个委员会都至少有 128 名验证者。

信标链检查点(Beacon Chain Checkpoints)

检查点(checkpoints)就是位于 epoch 第一个 slot 里的区块,如果这个 slot 内没有产生区块,则最近的前一个区块即为检查点。每个 epoch 都会有一个检查点区块;一个区块可能同时是多个 epoch 的检查点。

包含64个slots的epoch检查点

值得注意的是,从 slot 65 到 slot 128 之间是没有区块的。Epoch 2 的检查点本来应该是位于 slot 128 处产生的区块,但因为该 slot 丢失了,所以 epoch 2 的检查点还是 slot 64 处产生的区块。Epoch 3 同理,slot 192 处是空块,因此 epoch 3 的检查点为 slot 180 处产生的区块。

时段边界区块(epoch boundary block,EBB)是一些文献 (比如 Gasper 论文,也是上图的来源) 中用到的术语,可以理解为 “检查点”(checkpoint)的同义词。

在发起一次 LMD GHOST 投票时,验证者也要为最近一个 epoch 的检查点投票,该检查点叫做 “目标检查点”(target)。该投票叫做 Casper FFG 投票,而且还包括对前一个检查点的投票,叫做 “来源检查点”(source)。

上图中,epoch 1 中的一个验证者进行投票,将创世区块选为来源检查点,然后推举 slot 64 处产生的区块为目标检查点。在 epoch 2 中,同一个验证者又为相同的检查点投票了。验证者只需为自己所分配到的 slot 发起 LMD GHOST 投票,但是每一个 epoch 上的所有验证者都要为 epoch 的检查点发起 FFG 投票。

绝对多数(supermajority)

绝对多数是指某个投票获得了所有活跃验证者总余额 2/3 的支持。 简单来说,假设有 3 个活跃验证者,其中两个的余额是 8 ETH,另一个验证者的余额为 32 ETH。那么,那个拥有最多余额的验证者所进行的投票才是绝对多数;尽管另外两个验证者的投票可能不一样,但是他们的余额不足以形成绝对多数。

最终确定性(Finality)

当一个 epoch 结束之后,如果其检查点得到了 2/3 余额票数,也就是形成了绝对多数,那么该检查点就被证明(justified)了。

如果检查点 B 已经被证明,且其下一个 epoch 的检查点也被证明了,那么 B 就被最终确定了(finalized)。一般来说,一个检查点会在两个 epoch 内得以最终确定,即 12.8 分钟。

通常来说,用户交易发生在一个 epoch 的中间部分;那么距下一个检查点就还有半个 epoch 的时间,也就是说,一笔交易经过 2.5 个 epoch(16 分钟)便可得以最终确定(finality)。在理想情况下,超过 2/3 的证明(attestations)将会被打包进某个 epoch 的第 22 个 slot 中。因此,交易得以最终确定的平均时长为 14 分钟(16+32+22 个 slot)。区块确认过程则经由区块证明(attestations),到被证明(justification),再到最终确定(finality)。用户可以自己决定是否等到交易最终确定,还是说稍低一点的安全性也足够了。

Slot 64处的检查点被证明,slot 32处产生的一个区块得以最终确定

为简要叙述,下文将假设所有验证者的余额相同。

信标链头发生了什么

在 slot 96 处,一个时段边界区块(EBB)被提议,且该区块还包含了对 Epoch 2 中检查点的证明。Epoch 2 检查点的证明投票现达到了 2/3 的绝对多数,意味着 Epoch 2 的检查点被证明了。因此,上一个被证明的检查点,即 Epoch 1 检查点,也获得了最终确定性。Slot 32 处的区块一旦被最终确定,此前所有区块都会被最终确定。

在对检查点进行最终确定时,对同时可以得到最终确定的区块在数量上并没有限制。所以,虽然最终确定性仅在 epoch 边界的时候产生,但证明(attestations)是逐块累加的,下文的 “从创世区块到区块链头会发生什么” 提供了另一种解释。

从创世区块到区块链头会发生什么

采取同样的办法,我们可以观察到从创世区块开始的一条故事线:

从 slot 1 到 slot 63,所有的提议者都提议了一个区块,且所有区块都被添加到链上。对于 epoch 1 的所有区块来说,其检查点(slot 32 处的区块)累积了 55% 的验证者证明。验证者在 slot 64 处提议区块时,同时也对 epoch 1 处的检查点发起投票。现在,有 70% 的验证者都证明了 epoch 1 的检查点,因此 epoch 1 检查点被证明(justified)。Epoch 2 结束后,epoch 2 的检查点(slot 64 处的区块)累积了投票证明但还达不到 2/3 的多数要求。验证者在 Slot 96 处提议区块时,同时也对 epoch 2 处的检查点发起投票,所以这时候,epoch 2 检查点的投票达到了 2/3 的多数要求,也就是被证明了(justification)。Epoch 2 的检查点被证明的同时,epoch 1 的检查点以及所有此前的区块被最终确定了。

还有一种可能性,我们只考虑到 epoch1。Epoch 2 的检查点被提议出来之前,epoch 1 的检查点可能已经获得了绝对多数投票。

譬如说,当 slot 32 和 slot 54 的区块被提议出来时,slot 32 的检查点的证明投票可能已经达到多数要求了。因而在这种情况下,检查点可能在 epoch 2 之前就已经被证明了。最后一点,检查点可以在离其最近的 epoch 中被证明,但是至少隔一个 epoch 才能被最终确认。

有时,一个区块被证明意味着两个甚至多个 epoch 以前的区块被最终确定。Gasper 论文里讨论了这种情况,只有在网络高延迟、网络隔离或遭遇强大攻击等个别情况下,才会出现这种状况。

更加深入地了解证明(attestations)

一则证明包含一个 LMD GHOST 投票和一个 FFG 投票。理想情况下,每个 epoch 中所有验证者提交一份证明。每一个证明有 32 个 slot 的机会被打包进链,这意味着在单个 epoch,一名验证者可能有两份证明被打包上链。

如果验证者在其所分配的 slot 里发送证明,且该证明被打包上链,那么验证者获得的奖励为最大值;随后打包上链所获得的奖励就会不断减少。为了留给验证者准备的时间,他们被提前一个 epoch 分配到委员会中。只有在 epoch 开始后,才会将提议者分配给 slot 中。尽管如此,秘密领导人选举旨在降低攻击和贿赂提议者的风险。

委员会使得联合签名的技术达到最优化状态,将每个证明者的签名聚合成一个签名。当验证者在同一个委员会中,并做出了同样的 LMD GHOST 和 FFG 投票时,他们的签名就可以被聚合。

验证者奖惩机制

  1. 证明者奖励(attester rewards)
  2. 证明者惩罚(attester penalties)
  3. 质押者特有风险(typical downside risk for stakers)
  4. 罚没和吹哨者奖励(slashings and whistleblower rewards)
  5. 提议者奖励(proposer rewards)
  6. “不作为” 惩罚(inactivity penalty)
  1. 当验证者所给出的证明(LMD GHOST 或 FFG 投票)为其他大部分验证者所同意时,会获得奖励。当区块被最终确定,奖励也随之确定。
  2. 相反,如果验证者没有提交证明,或者其投票选出的区块最终没有被确定,那么验证者就会受到惩罚。
  3. 在描述相对来说不那么常见的奖惩制度之前,你可能想知道成为一名质押者所面临的风险。作为一名质押者,损失 ETH 的风险与回报并存。如果一名验证者在一年中能赚取 10% 的报酬,那么一名工作表现差强人意的(诚实)验证者则面临 7.5% 的损失。比如说,一名验证者总是不在线,或者其投票的区块总是无法被最终确定,他将会受到惩罚,而罚款数额等于一名验证者投出有效区块所获得的奖励 3/4 数额。以 365 天为例,离线几天或几周的惩罚要小很多:离线 36 天会损失大约 0.75%(除非还发生了下面 #6 中描述的惩罚)。
  4. 罚没(slashing)的数额将超过 0.5 个 ETH,最多则是一名验证者的所有质押金额。一名验证者如果受到了罚没惩罚,其将至少损失余额的 1/32,且会被停止继续参与工作("强制退出")。该名验证者所受惩罚的程度,与连续 8192 个 epoch 都离线的验证者所受的惩罚相当。基于同时受到罚没惩罚的验证者的数量,协议还会对验证者做出额外的惩罚。施以额外惩罚的基本公式是:validator_balance3fraction_of_validators_slashed。也就是说,如果 1/3 的验证者同时受到了罚没,他们会损失所有余额。而对罚没行为举报成功的验证者,则可以获取吹哨者奖励。
  5. 区块一旦得以最终确定,区块提议者便可以获得相当可观的奖励。一直在线且妥善完成工作的验证者,他们提议区块所能获得的奖励将提高约 1/8。如果发生罚没行为,提议者还可以将罚没证据打包进区块,从而获得少量报酬。目前,所有吹哨者的奖励实际上都归于提议者。
  6. 以太坊这个系统里有许多机制,通过了解其作用,便可以更好地了解这些机制。这套奖惩制度里,最后一项便是 “不作为泄露(inactivity leak penalty)” 惩罚。与 #3 中的典型风险不同,这是严重且罕见的。简单来说,如果有超过 4 个 epoch 没有获得最终确定性那么所有验证者都要受到以二次方增加的 “不作为” 惩罚,直到下一个检查点被最终确定。“不作为” 惩罚(或 “二次泄漏” quadratic leak)的作用在于:如果 50% 的验证者掉线了,在 18 天后会再次重新对区块进行最终确定。二次泄漏将有问题的验证者强制退出,这样其他验证者将成为可以恢复最终确定性 2/3 中的多数。不作为泄漏不会耗尽以最佳方式运行的验证者。在不活动泄漏期间,证明者奖励为零;验证者像往常一样获得提议者和吹哨者奖励。

可罚没的罪行(Slashable Offences)

如果出现以下这三种情况,要对验证者进行罚没惩罚:双重提议、FFG 双重投票和 FFG 环绕投票。LMD GHOST 投票不会受到罚没惩罚。

双重提议(double proposal)指一名区块提议者在他所分配到的 slot 里提议一个以上的区块。

环绕投票(surround vote)指一名验证者发起的 FFG 投票环绕之前的 FFG 投票,以下是两个示例,基于验证者在 Epoch 5 中以 Slot 32 为来源检查点,Slot 128 为目标检查点的场景进行 FFG 投票:

  • 在 Epoch 6 中以 Slot 64 为来源检查点和 Slot 96 为目标检查点的 FFG 投票将被他们在 Epoch 5 的投票环绕。
  • 在 Epoch 6 中以 Slot 0 为来源检查点和 Slot 160 为目标目标检查点的 FFG 投票将环绕他们在 Epoch 5 的投票。

双重投票(double vote)指一名验证者针对同一个目标检查点(target),不同的来源检查点(source)发起的两次 FFG 投票。这个可能发生在分叉期间。

蓝色箭头是两个 FFG 投票,一个投票给左分叉上 Slot 128 的目标区块,另一个投票给右分叉上 Slot 128 的目标区块。一个验证者同时投两票,就会犯下被称为双重投票的可罚没罪行。以上是来源检查点不同的双重投票示例。

接下来是双重投票具有相同来源(Epoch 0 检查点)且目标不同的场景。

上分叉具有 “block 64” 的 Epoch 1 检查点。下分叉具有 “block 63” 的 Epoch 1 检查点。(因为在下分叉的 Slot 64 没有提出区块;回想一下信标链检查点部分。)投票给 “block 64” 的 Epoch 1 目标检查点和投票给 “block 63” 的 Epoch 1 目标检查点,是双重的投票。双重投票是指验证者在同一时期对两个目标进行 FFG 投票。

削减双重投票背后的原因是让验证者投票给一个链,而不是两个或多个分叉。

一名吹哨验证者提出举报时,需要打包冲突投票的相关信息来证明该验证者应受到罚没。要在一个庞大的记录系统里,有效地找出冲突投票,是对算法和数据结构的一项巨大挑战。参考链接:“罚没检测工程挑战”

验证者完全有能力使自己避免被罚没:只需要记住其已经签名的内容。一名诚实的验证者不会因为其他验证者的行为而受到罚没。只要验证者不签名有冲突的证明或提议,就不会受到罚没。

一个验证者客户端可以运行多个信标节点,从而延长系统的正常运行时间、增强信任和 DoS 攻击抵御。在运行节点或是运行备份验证者客户端时,用户需要注意,验证者有无对冲突的信息进行签名。

信标链验证者激活和生命周期

每一位验证者需要 32 个 ETH 才能激活。一个用户在以太坊主网的存款合约(deposit contract(里质押 32 个 ETH,就会激活一位验证者。

当验证者的余额低于 16 个 ETH 时,信标链就会停止这些验证者的工作。质押者能够在 2023 年将剩余的验证者余额提出来。

验证者也可以在服务 2048 个 epoch,将近 9 天时间的工作之后,验证者还可以自愿选择退出。

在任何自愿或强制退出中,质押者需要等待 4 个 epoch 才能撤出其质押金。在这 4 个 epoch 之 内,验证者仍然有可能面临举报和罚没。一名诚实验证者大概 27 小时(2^8 个 epoch)左右便可以提出其余额。然而,如果一名验证者受到了罚没惩罚,则必须等 8192 个 epoch(大约 36 天)之后才能够提出余额。

“以太坊 2.0 阶段 0 验证者生命周期”中有更详细的技术说明,内含以下示意图:

为了避免短时间内对验证者造成巨大的变动,存在一些机制对单位 epoch 上验证者激活和退出的数量进行限制。其作用之一在于使得很难在短时间内激活大量验证者对系统进行攻击。

信标链深度应用了有效余额(effective balances)的概念,这就使得验证者的余额变动范围更加小,以达到技术的最优化。

总结

在每个 epoch 中,验证者被平均分配到 slot 中,然后细分为适当规模的委员会。验证者只能在一个 slot 和一个委员会中。总体:

  • 一个 epoch 中的所有验证者都尝试确定同一个检查点:FFG 投票
  • 分配给一个 slot 的所有验证者都尝试对同一个信标链头进行投票:LMD GHOST 投票

最佳行为对验证者的回报最大。

信标链起源于 2020 年 12 月 1 日,有 21,063 个验证者。验证者的数量可以通过罚没或自愿退出来减少,或者通过质押可以激活更多验证者。信标链运行近 2 年,目前有超过 400,000 个验证者。

世界上从未有过用于去中心化系统和应用程序的可扩展平台。如果你受到启发想深入研究,可以参考资料 “以太坊 POS 共识规范”。它包括了信标链规范、其他关键资源的链接以及赏金问题。为挑战ethresear.ch  或以太坊魔术师论坛贡献或推荐他人参与,并成为创造历史的一部分!

免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。