详解以太坊 2.0 信标链

原文标题:《详解以太坊 2.0 信标链》
撰文:JosephC

诸位看官翘盼已久的 eth2.0 即将到来,大家是否想要一探究竟却又无从下手呢?Eth2.0 引入了信标链和分片等众多新概念,其相关报道和阐释不胜枚举,能同时顾及到广度和深度的文章却无一二。为了让大家对此等看似深奥的名词不再望而却步,本文系统地讲解了何为信标链、分片链及该系统上的其他机制,如验证者角色、验证者奖惩制度和共识机制等基本概念。


详解以太坊 2.0 信标链

还记得你刚窥探到区块链奥秘时的那份喜悦吗?你对信标链有同样的求知欲吗?

信标链是以太坊 2.0 系统的核心,然而针对该系统的大部分描述都过于技术化、针对性过强或者不够深入。

但是从这篇文章中,读者可以充分了解到信标链中的各个元素和运行机制。为了使读者在理解信标链时事半功倍,文章将通过一些例子,用通俗的语言解释其中的关键细节。

阅读本文之前,我们假设读者对以太坊和比特币有不错的基础知识,并对权益证明 (Proof of Stake) 这一共识机制有一定了解。

现在进入正题,让我们一起深入探讨信标链的各个部分,诸如分片 (shards)、质押验证者 (staking validators) 、证明 (attestations)、委员会 (committees)、检验点 (checkpoints) 和最终确定性 (finality)。

分片:未来蓝图

要想进入信标链的世界,首先我们需要打开分片的大门。在扩容性方面,包括以太坊在内的区块链现在面临的主要问题是:每个节点必须验证和执行每一笔交易。

在计算机科学中,主要有两种扩容方式:

  • 纵向扩容:即增强节点能力
  • 横向扩容:即增加节点数量

为了保证去中心化,区块链需要采取横向扩容方式。以太坊 2.0 (也即 Eth2 或 Serenity) 其中一个目标就是让节点可以在消费级硬件中运行。总体来说,Eth2 采用的分片机制指的就是对数据库进行横向分割。

总的来说,每条分片链都拥有一个节点子集,在该链上进行工作。虚拟矿工和验证者被分配到不同的分片中,并且只处理和验证自己所在分片链上的交易。

以太坊分片上的节点子集是动态的,按照区块顺序处理分片。

区块链实行分片机制的主要挑战在于如何确保分片安全性。由于验证者分散在不同的分片中,有的节点可能会恶意控制某个分片。

解决该问题的关键在于:

随机分配 (shuffling) 验证者,每个分片区块都有一个委员会,其中的验证者都经由随机挑选。这种做法的目的是,经数学计算,如果攻击者控制的验证者少于总数的三分之一,其想要攻击单个分片是难以实现的。

此外,错误性证明(fraud proofs)、数据托管证明 (custody proofs) 和数据可用性检查 (data availability checks) 都是确保安全的重要因素,不过需要单独的讲解才能说清楚。

Eth2 目前的计划是启用64 个分片。尽管分片和信标链是独立运作的,我们还是会针对整个系统的关键部分进行阐述。

分片向我们揭示了以太坊信标链能做什么,需要什么。我们也能从中了解到为什么在传统的区块链基础上需要增添这些新元素。分片式区块链作为一片新大陆,始终等待着创新者的开垦。

以太坊 2.0 的各个阶段

简单来说,以太坊 2.0 有三个阶段:

  • Phase 0 – 信标链
  • Phase 1 – 分片
  • Phase 2 – 执行

可以和人体进行类比:

  • Phase 0 – 心脏
  • Phase 1 – 四肢
  • Phase 2 – 大脑

也可以和一支强大的管弦乐队进行类比:

  • Phase 0 – 指挥
  • Phase 1 – 乐器
  • Phase 2 – 乐手

每个阶段都是系统里的重要组成部分,有着不同的特性。阶段 0 是以太坊 2020 年的目标之一。与其他阶段相比,阶段 1 要更加稳定,而阶段 2 侧重于执行与代理。

时隙 (slots) 和时段 (epochs)

信标链是以太坊 2.0 的心脏,它令以太坊系统在和谐与共识中有序运行。每个 slot 为 12 秒,每个 epoch 由 32 个 slots 组成,即 6.4 分钟。

详解以太坊 2.0 信标链

Epoch 0 中的前 32 个 slots,创世区块在 slot 0 中产生,本文参考了信标链规范 v0.10.1 相关内容

在每个 slot 中,在信标链和分片中都可能新增一个区块。我们可以想象,信标链和分片链有序且紧密地排列在一起,当系统在理想情况下运转时,每 12 秒就有一个信标(链)区块和 64 个分片区块产生。验证者大致按照这个时间同步。

我们可以将一个 slot 看作是区块生成时间,不同的是 slots 内可以没有区块。

信标链和分片的创世区块都在 slot 0 中产生。分片将在信标链 epoch 0 的下一个 epoch 中开始运作,但无论是分片链还是信标链,都有自己的 epoch 0,且包含其创世区块。

验证者、证明和信标链

工作量证明(PoW)与矿工密不可分,而在以太坊 2.0 中,验证者 (validators) 便是权益证明 (PoS) 共识机制中的「虚拟矿工」。

验证者这一概念在 Eth2 共识协议中应用率极高。相关激励机制稍后将在「信标链验证者奖惩制度」这一部分加以讨论。

区块提议者(block proposer)是被(伪)随机挑选出来生产区块的验证者。

大多数时候,验证者则充当证明人(attesters)的角色,对信标区块和分片区块进行投票。这些投票会记录在信标链上,用以决定信标链和分片链的头部 (heads)。

(图中文字:随机验证者在每个 slot 中提议一个区块,如果其他验证者投票赞成该区块,那么提议验证者将会获得奖励)

详解以太坊 2.0 信标链

某 epoch 中第 28 个 slot 无区块提议 (图中文字:slots 可能会丢失区块,当被选中的验证者因为掉线、同步失败等原因而没有提议区块时,就会丢失区块,那么验证者也无法得到奖励)

在每一个 epoch 中,一个验证者被(伪)随机分配到一个 slot 和分片中。该验证者参与到他所被分配的分片的共识中,从而他可以对该分片的分片头进行投票。然后验证者将该 slot 上的分片头和信标区块连接起来。

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

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

信标链里主要记录了验证者的地址、每个验证者的状态、证明和分片的链接。验证者需经由信标链激活,也可以转变在线状态,稍后在「信标链验证者激活和生命周期」中有简单的介绍。

质押验证者:含义

验证者是虚拟的,并由质押者激活。在工作量证明 (PoW) 共识机制中,成为矿工需要购买挖矿硬件。而在以太坊 2.0 阶段,用户通过质押 ETH 来激活和管理验证者。

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

验证者通过验证者客户端进行工作,而客户端借助信标(链)节点来运行。每个信标节点都有跟踪和读取信标链的功能。而每个验证客户端都可以执行信标节点的功能,或者调用信标节点。一个客户端允许一个或以上验证者执行验证职能。

交联:分片扎根信标链

交联 (crosslinks) 是指将一个信标区块和一个分片区块连接起来,在一个交联中,信标链紧跟分片链头。由于一个信标区块中有 64 个分片,因此至多可以容纳 64 个交联。如果在某个 slot 中,没有验证者为其他 63 个分片提议区块的话,在这个信标区块上可能只有一个交联。

交联计划于 eth2 的阶段 1 实现,为的是将分片扎根在信标链中,为分片分叉选择、分片链最终确定性和跨分片通信打好基础。所有分片链全程都与信标链紧密相连。

委员会 (committees):介绍

一个委员会由一组验证者组成。为加强安全保障,每个 slot (在信标链和每个分片里)的委员会至少由 128 位验证者组成。而一个恶意攻击者能够控制 2/3 委员会成员的可能性低于万亿分之一。

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

详解以太坊 2.0 信标链

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

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

关于委员会,本文重点讲解信标链委员会:为信标链服务的验证者。一个(信标链)委员会将会被伪随机分配到一个分片上,将其交联到信标区块中。委员会成员不是固定不变的,负责交联的委员会都是逐块更替的。

分片委员会仅进行生产分片区块的工作,此话题留待日后讨论。

许多分片区块由分片链验证者生产,且不需要与信标链联系。然而,如果某个分片想要和其他分片通信,则需要借助信标委员会将其与信标区块进行交联。

详解以太坊 2.0 信标链

委员会里的验证者应该要投票选出区块链头

上图综合描述了三个 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 个。

委员会 (committees):关键

在每个 epoch 中,验证者们被均匀地分配到各个 slot 中,然后进一步分配到规模相当的各委员会中。所有验证者都要在自己所在的 slot 中投票选出信标链头。每个委员会都要在自己所在的 slot 中尝试交联某个特定的分片。

混洗 (shuffling) 算法会适时调整每个 slot 中委员会的数量,以保证每个委员会都至少有 128 名验证者。

举个例子,假定有 16384 名验证者,其中 512 名验证者被伪随机分配到 slot 1 中,另外 512 名被分配到 slot 2 中,以此类推。slot 1 中的 512 名验证者被进一步分成 4 个委员会,并被伪随机分配到分片中。

假设分片 33、55、22、11 是这四个委员会所分配到的分片。所有 512 名验证者都要在 slot 1 中发起 LMD GHOST 投票;其中一个委员会的 128 名验证者试图和分片 33 产生交联;另一个委员会的 128 名验证者试图与分片 55 产生交联;剩余两个委员会则试图与分片 22 和分片 11 产生交联。

在 slot 2 中,这个过程会重复一遍,512 名验证者同样分成 4 个委员会,然后被伪随机分配到分片中。假定他们被分配到分片 41、20、17、15 中。所有的 512 名验证者都要在 slot 2 中投票选出信标链头;同时这几个委员会也试图与分片 41、20、17、15 产生交联。

这个过程也会在该 epoch 剩下的 slot 中再三重复。每个验证者在自己所处的 slot 中,可以进行投票、证明以及交联。在该 epoch 结束之后,所有 16384 名验证者都已发出过投票并且和分片进行过交联。

但是,前面所提到的验证者投票都是针对 slot 的,而并非针对 epoch。打个比方,其区别类似在地方选举和全国大选中进行投票。到目前为止,全体验证者还并未就同一个事物进行投票。

以下部分将进一步阐释检查点 (checkpoints) 和最终确定性 (finality),描述了各验证者处于分配的 slot 时,针对 epoch 发起的投票。也就是说,全体验证者在自己所处的 slot 中,还要为 epoch 的检查点投票。

信标链检查点(Beacon Chain Checkpoints)

检查点 (checkpoints) 是位于 epoch 第一个 slot 里的区块。

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

详解以太坊 2.0 信标链

包含 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)

绝对多数(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)。用户可以自己决定是否等到交易最终确定,还是说稍低一点的安全性也足够了。

详解以太坊 2.0 信标链

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

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

信标链头发生了什么

在 slot 96 处,一个时段边界区块 (EBB) 被提议,且该区块还包含了对 epoch 2 中检查点的证明。

Epoch 2 检查点的证明投票现达到了 2/3 的绝对多数,意味着 epoch 2 的检查点被证明了。因此,上一个被证明的检查点,即 epoch 1 检查点,也获得了最终确定性。slot 32 处的区块一旦被最终确定,此前所有区块都会被最终确定。

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

从 slot 1 到 slot 32 的信标链区块所包含的所有交联,也会使分片链获得最终确定性。换句话说,当一个信标区块被最终确定时,与该块所交联的分片区块也能被最终确定。

交联本身不足以使一个分片区块被最终确定,但是对分片链的分叉选择有所帮助。

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

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

从 slot 1 到 slot 36,所有的提议者都提议了一个区块,且所有区块都被添加到链上。

对于 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 投票时,他们的签名就可以被聚合。

信标链验证者奖惩机制

  • 证明者奖励(attester rewards)
  • 证明者惩罚(attester penalties)
  • 质押者特有风险(typical downside risk for stakers)
  • 罚没和吹哨者奖励(slashings and whistleblower rewards)
  • 提议者奖励(proposer rewards)
  • 「不作为」惩罚(inactivity penalty)

当验证者所给出的证明 (LMD GHOST 或 FFG 投票) 为其他大部分验证者所同意时,会获得奖励。在 eth2 的阶段 1 中,验证者也可以通过与分片产生交联而获取奖励。当区块被最终确定,奖励也随之确定。

相反,如果验证者没有提交证明,或者其投票选出的区块最终没有被确定,那么验证者就会受到惩罚。

在描述相对来说不那么常见的奖惩制度之前,你可能想知道成为一名质押者所面临的风险

作为一名质押者,损失 ETH 的风险与回报并存。如果一名验证者在一年中能赚取 10% 的报酬,那么一名工作表现差强人意的 (诚实) 验证者则面临 10% 的损失。

比如说,一名验证者总是不在线,或者其投票的区块总是无法被最终确定,他将会受到惩罚,而罚款数额等于一名验证者投出有效区块所获得的奖励数额。

罚没的数额最少为 0.5 个 ETH,最多则是一名验证者的所有质押金额。

一名验证者如果受到了罚没 (slashing) 惩罚,其将至少损失余额的 1/32,且会被停止继续参与工作。该名验证者所受惩罚的程度,与连续 8192 个 epoch 都离线的验证者所受的惩罚相当。

基于同时受到罚没惩罚的验证者的数量,协议还会对验证者做出额外的惩罚。施以额外惩罚的基本公式是:「validator_balance3fraction_of_validators_slashed」。

也就是说,如果 1/3 的验证者同时受到了罚没,他们会损失所有余额。而对罚没行为举报成功的验证者,则可以获取吹哨者奖励。

区块一旦得以最终确定,区块提议者便可以获得相当可观的奖励。一直在线且妥善完成工作的验证者,他们提议区块所能获得的奖励将提高 1/8。如果发生罚没行为,提议者还可以将罚没证据打包进区块,从而获得少量报酬。在 eth2 阶段 0,所有吹哨者的奖励实际上都归于提议者。

以太坊 2.0 这个系统里有许多机制,通过了解其作用,便可以更好地了解这些机制。这套奖惩制度里,最后一项便是「不作为」惩罚。

简单来说,如果有超过 4 个 epoch 没有获得最终确定性,那么所有验证者都要受到翻倍的「不作为」惩罚,直到下一个检查点被最终确定。

「不作为」惩罚的作用在于:如果 50% 的验证者掉线了,在 21 天后会再次重新对区块进行最终确定。

罚没 Slashing

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

双重提议 (double proposal)

指一名区块提议者在他所分配到的 slot 里提议一个以上的区块。

双重投票 (double vote)

指一名验证者针对同一个目标检查点 (target),不同的源检查点 (source) 发起的两次 FFG 投票。

环绕投票 (surround vote)

指一名验证者发起的 FFG 投票环绕之前的 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 中的 FFG 投票。

在 epoch 6 内,针对 slot 128 目标检查点的 FFG 投票是双重投票,除非 slot 32 为源检查点,否则要受到罚没。相同的 FFG 投票不会遭到罚没。

针对同一个源检查点的两次 FFG 投票,不用受到罚没。这对系统的活性很重要。

比如说,如果有两个分叉,每个分叉占有验证者 50% 的余额,那么协议需要鼓励 (而非惩罚) 验证者通过对同一个源检查点和一个不同的目标检查点发起投票,从而在分叉间转换。验证者可以在分叉之间安全地来回转换,并尝试达到 2/3 的绝对多数,以避免陷入僵局。

一名吹哨验证者提出举报时,需要打包冲突投票的相关信息来证明该验证者应受到罚没。

要在一个庞大的记录系统里,有效地找出冲突投票,是对算法和数据结构的一项巨大挑战。目前「罚没检测工程挑战」正在寻求参与者。

验证者完全有能力使自己避免被罚没:只需要记住其对哪些证明和提议进行了签名。一名诚实的验证者不会因为其他验证者的行为而受到罚没。只要验证者没有对冲突的证明或提议进行投票,就不会受到罚没。

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

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

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

当验证者的余额低于 16 个 ETH 时,信标链就会停止这些验证者的工作。质押者可以将剩余的验证者余额提出来,但目前无法在 eth2 的阶段中实现。

在 2048 个 epoch,将近 9 天时间的工作之后,验证者还可以自愿选择退出。退出时,质押者需要等待 4 个 epoch 才能撤出其质押金在这 4 个 epoch 之内,验证者仍然有可能面临举报和罚没。

一名诚实验证者大概 27 小时之后便可以提出其余额。然而,如果一名验证者受到了罚没惩罚,则必须等 8192 个 epoch (大约 36 天) 之后才能够提出余额。

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

详解以太坊 2.0 信标链

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

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

总结

在每个 epoch,验证者们被均匀地分配到各个 slot 中,然后进一步分配到规模相当的各委员会中。各个验证者同时只能位于一个 slot 和一个委员会中。

下面总结几点:

  1. 同一个 epoch 里的所有验证者尝试最终确定同一个检查点:这是 FFG 投票
  2. 所有验证者被分配到一个 slot 中,尝试投票选出同一个信标链头:这是 LMD GHOST 投票
  3. 所有验证者被分配到一个委员会中,尝试交联某个分片;
  4. 采取最优行为的验证者获得的奖励最多。

激活信标链至少需要 16,384 个创世验证者。验证者的数量可能会因为罚没或者自动退出而减少,也会随质押者的激活而增加。

当系统升级到 eth2 阶段 1 或以上时,将需要更多的验证者工作。信标链需要至少 262,144 个验证者 (质押金额将超过 800 万 ETH) 来生产区块,每个区块包含 64 条交联。

历史上从来没有过为去中心化系统和应用搭建的扩容平台。如果你受到了启发,想要更深入地参与,「ETH2.0 规范」里有权威的参考,其中包含信标链规范,还有其他关键资源以及赏金的相关问题。

目前来说,点对点网络层最亟待完善。来和我们一起参与这项挑战吧!更多技术细节请访问 ethresear.ch 或者 Ethereum Magician’s forum,和我们一起创造历史吧!

感谢 Danny Ryan 对多个部分的审校和反馈,感谢 Momo Araki 的图表以及提供咨询的各位。标题图由 Hsiao-Wei Wang 的原作修改而来。如果读者朋友觉得本文对你有所帮助,请不吝分享!

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2020年4月23日 下午2:08
下一篇 2020年4月23日 下午4:06

相关推荐

详解以太坊 2.0 信标链

星期四 2020-04-23 15:07:27

原文标题:《详解以太坊 2.0 信标链》
撰文:JosephC

诸位看官翘盼已久的 eth2.0 即将到来,大家是否想要一探究竟却又无从下手呢?Eth2.0 引入了信标链和分片等众多新概念,其相关报道和阐释不胜枚举,能同时顾及到广度和深度的文章却无一二。为了让大家对此等看似深奥的名词不再望而却步,本文系统地讲解了何为信标链、分片链及该系统上的其他机制,如验证者角色、验证者奖惩制度和共识机制等基本概念。


详解以太坊 2.0 信标链

还记得你刚窥探到区块链奥秘时的那份喜悦吗?你对信标链有同样的求知欲吗?

信标链是以太坊 2.0 系统的核心,然而针对该系统的大部分描述都过于技术化、针对性过强或者不够深入。

但是从这篇文章中,读者可以充分了解到信标链中的各个元素和运行机制。为了使读者在理解信标链时事半功倍,文章将通过一些例子,用通俗的语言解释其中的关键细节。

阅读本文之前,我们假设读者对以太坊和比特币有不错的基础知识,并对权益证明 (Proof of Stake) 这一共识机制有一定了解。

现在进入正题,让我们一起深入探讨信标链的各个部分,诸如分片 (shards)、质押验证者 (staking validators) 、证明 (attestations)、委员会 (committees)、检验点 (checkpoints) 和最终确定性 (finality)。

分片:未来蓝图

要想进入信标链的世界,首先我们需要打开分片的大门。在扩容性方面,包括以太坊在内的区块链现在面临的主要问题是:每个节点必须验证和执行每一笔交易。

在计算机科学中,主要有两种扩容方式:

  • 纵向扩容:即增强节点能力
  • 横向扩容:即增加节点数量

为了保证去中心化,区块链需要采取横向扩容方式。以太坊 2.0 (也即 Eth2 或 Serenity) 其中一个目标就是让节点可以在消费级硬件中运行。总体来说,Eth2 采用的分片机制指的就是对数据库进行横向分割。

总的来说,每条分片链都拥有一个节点子集,在该链上进行工作。虚拟矿工和验证者被分配到不同的分片中,并且只处理和验证自己所在分片链上的交易。

以太坊分片上的节点子集是动态的,按照区块顺序处理分片。

区块链实行分片机制的主要挑战在于如何确保分片安全性。由于验证者分散在不同的分片中,有的节点可能会恶意控制某个分片。

解决该问题的关键在于:

随机分配 (shuffling) 验证者,每个分片区块都有一个委员会,其中的验证者都经由随机挑选。这种做法的目的是,经数学计算,如果攻击者控制的验证者少于总数的三分之一,其想要攻击单个分片是难以实现的。

此外,错误性证明(fraud proofs)、数据托管证明 (custody proofs) 和数据可用性检查 (data availability checks) 都是确保安全的重要因素,不过需要单独的讲解才能说清楚。

Eth2 目前的计划是启用64 个分片。尽管分片和信标链是独立运作的,我们还是会针对整个系统的关键部分进行阐述。

分片向我们揭示了以太坊信标链能做什么,需要什么。我们也能从中了解到为什么在传统的区块链基础上需要增添这些新元素。分片式区块链作为一片新大陆,始终等待着创新者的开垦。

以太坊 2.0 的各个阶段

简单来说,以太坊 2.0 有三个阶段:

  • Phase 0 – 信标链
  • Phase 1 – 分片
  • Phase 2 – 执行

可以和人体进行类比:

  • Phase 0 – 心脏
  • Phase 1 – 四肢
  • Phase 2 – 大脑

也可以和一支强大的管弦乐队进行类比:

  • Phase 0 – 指挥
  • Phase 1 – 乐器
  • Phase 2 – 乐手

每个阶段都是系统里的重要组成部分,有着不同的特性。阶段 0 是以太坊 2020 年的目标之一。与其他阶段相比,阶段 1 要更加稳定,而阶段 2 侧重于执行与代理。

时隙 (slots) 和时段 (epochs)

信标链是以太坊 2.0 的心脏,它令以太坊系统在和谐与共识中有序运行。每个 slot 为 12 秒,每个 epoch 由 32 个 slots 组成,即 6.4 分钟。

详解以太坊 2.0 信标链

Epoch 0 中的前 32 个 slots,创世区块在 slot 0 中产生,本文参考了信标链规范 v0.10.1 相关内容

在每个 slot 中,在信标链和分片中都可能新增一个区块。我们可以想象,信标链和分片链有序且紧密地排列在一起,当系统在理想情况下运转时,每 12 秒就有一个信标(链)区块和 64 个分片区块产生。验证者大致按照这个时间同步。

我们可以将一个 slot 看作是区块生成时间,不同的是 slots 内可以没有区块。

信标链和分片的创世区块都在 slot 0 中产生。分片将在信标链 epoch 0 的下一个 epoch 中开始运作,但无论是分片链还是信标链,都有自己的 epoch 0,且包含其创世区块。

验证者、证明和信标链

工作量证明(PoW)与矿工密不可分,而在以太坊 2.0 中,验证者 (validators) 便是权益证明 (PoS) 共识机制中的「虚拟矿工」。

验证者这一概念在 Eth2 共识协议中应用率极高。相关激励机制稍后将在「信标链验证者奖惩制度」这一部分加以讨论。

区块提议者(block proposer)是被(伪)随机挑选出来生产区块的验证者。

大多数时候,验证者则充当证明人(attesters)的角色,对信标区块和分片区块进行投票。这些投票会记录在信标链上,用以决定信标链和分片链的头部 (heads)。

(图中文字:随机验证者在每个 slot 中提议一个区块,如果其他验证者投票赞成该区块,那么提议验证者将会获得奖励)

详解以太坊 2.0 信标链

某 epoch 中第 28 个 slot 无区块提议 (图中文字:slots 可能会丢失区块,当被选中的验证者因为掉线、同步失败等原因而没有提议区块时,就会丢失区块,那么验证者也无法得到奖励)

在每一个 epoch 中,一个验证者被(伪)随机分配到一个 slot 和分片中。该验证者参与到他所被分配的分片的共识中,从而他可以对该分片的分片头进行投票。然后验证者将该 slot 上的分片头和信标区块连接起来。

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

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

信标链里主要记录了验证者的地址、每个验证者的状态、证明和分片的链接。验证者需经由信标链激活,也可以转变在线状态,稍后在「信标链验证者激活和生命周期」中有简单的介绍。

质押验证者:含义

验证者是虚拟的,并由质押者激活。在工作量证明 (PoW) 共识机制中,成为矿工需要购买挖矿硬件。而在以太坊 2.0 阶段,用户通过质押 ETH 来激活和管理验证者。

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

验证者通过验证者客户端进行工作,而客户端借助信标(链)节点来运行。每个信标节点都有跟踪和读取信标链的功能。而每个验证客户端都可以执行信标节点的功能,或者调用信标节点。一个客户端允许一个或以上验证者执行验证职能。

交联:分片扎根信标链

交联 (crosslinks) 是指将一个信标区块和一个分片区块连接起来,在一个交联中,信标链紧跟分片链头。由于一个信标区块中有 64 个分片,因此至多可以容纳 64 个交联。如果在某个 slot 中,没有验证者为其他 63 个分片提议区块的话,在这个信标区块上可能只有一个交联。

交联计划于 eth2 的阶段 1 实现,为的是将分片扎根在信标链中,为分片分叉选择、分片链最终确定性和跨分片通信打好基础。所有分片链全程都与信标链紧密相连。

委员会 (committees):介绍

一个委员会由一组验证者组成。为加强安全保障,每个 slot (在信标链和每个分片里)的委员会至少由 128 位验证者组成。而一个恶意攻击者能够控制 2/3 委员会成员的可能性低于万亿分之一。

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

详解以太坊 2.0 信标链

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

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

关于委员会,本文重点讲解信标链委员会:为信标链服务的验证者。一个(信标链)委员会将会被伪随机分配到一个分片上,将其交联到信标区块中。委员会成员不是固定不变的,负责交联的委员会都是逐块更替的。

分片委员会仅进行生产分片区块的工作,此话题留待日后讨论。

许多分片区块由分片链验证者生产,且不需要与信标链联系。然而,如果某个分片想要和其他分片通信,则需要借助信标委员会将其与信标区块进行交联。

详解以太坊 2.0 信标链

委员会里的验证者应该要投票选出区块链头

上图综合描述了三个 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 个。

委员会 (committees):关键

在每个 epoch 中,验证者们被均匀地分配到各个 slot 中,然后进一步分配到规模相当的各委员会中。所有验证者都要在自己所在的 slot 中投票选出信标链头。每个委员会都要在自己所在的 slot 中尝试交联某个特定的分片。

混洗 (shuffling) 算法会适时调整每个 slot 中委员会的数量,以保证每个委员会都至少有 128 名验证者。

举个例子,假定有 16384 名验证者,其中 512 名验证者被伪随机分配到 slot 1 中,另外 512 名被分配到 slot 2 中,以此类推。slot 1 中的 512 名验证者被进一步分成 4 个委员会,并被伪随机分配到分片中。

假设分片 33、55、22、11 是这四个委员会所分配到的分片。所有 512 名验证者都要在 slot 1 中发起 LMD GHOST 投票;其中一个委员会的 128 名验证者试图和分片 33 产生交联;另一个委员会的 128 名验证者试图与分片 55 产生交联;剩余两个委员会则试图与分片 22 和分片 11 产生交联。

在 slot 2 中,这个过程会重复一遍,512 名验证者同样分成 4 个委员会,然后被伪随机分配到分片中。假定他们被分配到分片 41、20、17、15 中。所有的 512 名验证者都要在 slot 2 中投票选出信标链头;同时这几个委员会也试图与分片 41、20、17、15 产生交联。

这个过程也会在该 epoch 剩下的 slot 中再三重复。每个验证者在自己所处的 slot 中,可以进行投票、证明以及交联。在该 epoch 结束之后,所有 16384 名验证者都已发出过投票并且和分片进行过交联。

但是,前面所提到的验证者投票都是针对 slot 的,而并非针对 epoch。打个比方,其区别类似在地方选举和全国大选中进行投票。到目前为止,全体验证者还并未就同一个事物进行投票。

以下部分将进一步阐释检查点 (checkpoints) 和最终确定性 (finality),描述了各验证者处于分配的 slot 时,针对 epoch 发起的投票。也就是说,全体验证者在自己所处的 slot 中,还要为 epoch 的检查点投票。

信标链检查点(Beacon Chain Checkpoints)

检查点 (checkpoints) 是位于 epoch 第一个 slot 里的区块。

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

详解以太坊 2.0 信标链

包含 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)

绝对多数(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)。用户可以自己决定是否等到交易最终确定,还是说稍低一点的安全性也足够了。

详解以太坊 2.0 信标链

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

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

信标链头发生了什么

在 slot 96 处,一个时段边界区块 (EBB) 被提议,且该区块还包含了对 epoch 2 中检查点的证明。

Epoch 2 检查点的证明投票现达到了 2/3 的绝对多数,意味着 epoch 2 的检查点被证明了。因此,上一个被证明的检查点,即 epoch 1 检查点,也获得了最终确定性。slot 32 处的区块一旦被最终确定,此前所有区块都会被最终确定。

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

从 slot 1 到 slot 32 的信标链区块所包含的所有交联,也会使分片链获得最终确定性。换句话说,当一个信标区块被最终确定时,与该块所交联的分片区块也能被最终确定。

交联本身不足以使一个分片区块被最终确定,但是对分片链的分叉选择有所帮助。

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

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

从 slot 1 到 slot 36,所有的提议者都提议了一个区块,且所有区块都被添加到链上。

对于 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 投票时,他们的签名就可以被聚合。

信标链验证者奖惩机制

  • 证明者奖励(attester rewards)
  • 证明者惩罚(attester penalties)
  • 质押者特有风险(typical downside risk for stakers)
  • 罚没和吹哨者奖励(slashings and whistleblower rewards)
  • 提议者奖励(proposer rewards)
  • 「不作为」惩罚(inactivity penalty)

当验证者所给出的证明 (LMD GHOST 或 FFG 投票) 为其他大部分验证者所同意时,会获得奖励。在 eth2 的阶段 1 中,验证者也可以通过与分片产生交联而获取奖励。当区块被最终确定,奖励也随之确定。

相反,如果验证者没有提交证明,或者其投票选出的区块最终没有被确定,那么验证者就会受到惩罚。

在描述相对来说不那么常见的奖惩制度之前,你可能想知道成为一名质押者所面临的风险

作为一名质押者,损失 ETH 的风险与回报并存。如果一名验证者在一年中能赚取 10% 的报酬,那么一名工作表现差强人意的 (诚实) 验证者则面临 10% 的损失。

比如说,一名验证者总是不在线,或者其投票的区块总是无法被最终确定,他将会受到惩罚,而罚款数额等于一名验证者投出有效区块所获得的奖励数额。

罚没的数额最少为 0.5 个 ETH,最多则是一名验证者的所有质押金额。

一名验证者如果受到了罚没 (slashing) 惩罚,其将至少损失余额的 1/32,且会被停止继续参与工作。该名验证者所受惩罚的程度,与连续 8192 个 epoch 都离线的验证者所受的惩罚相当。

基于同时受到罚没惩罚的验证者的数量,协议还会对验证者做出额外的惩罚。施以额外惩罚的基本公式是:「validator_balance3fraction_of_validators_slashed」。

也就是说,如果 1/3 的验证者同时受到了罚没,他们会损失所有余额。而对罚没行为举报成功的验证者,则可以获取吹哨者奖励。

区块一旦得以最终确定,区块提议者便可以获得相当可观的奖励。一直在线且妥善完成工作的验证者,他们提议区块所能获得的奖励将提高 1/8。如果发生罚没行为,提议者还可以将罚没证据打包进区块,从而获得少量报酬。在 eth2 阶段 0,所有吹哨者的奖励实际上都归于提议者。

以太坊 2.0 这个系统里有许多机制,通过了解其作用,便可以更好地了解这些机制。这套奖惩制度里,最后一项便是「不作为」惩罚。

简单来说,如果有超过 4 个 epoch 没有获得最终确定性,那么所有验证者都要受到翻倍的「不作为」惩罚,直到下一个检查点被最终确定。

「不作为」惩罚的作用在于:如果 50% 的验证者掉线了,在 21 天后会再次重新对区块进行最终确定。

罚没 Slashing

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

双重提议 (double proposal)

指一名区块提议者在他所分配到的 slot 里提议一个以上的区块。

双重投票 (double vote)

指一名验证者针对同一个目标检查点 (target),不同的源检查点 (source) 发起的两次 FFG 投票。

环绕投票 (surround vote)

指一名验证者发起的 FFG 投票环绕之前的 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 中的 FFG 投票。

在 epoch 6 内,针对 slot 128 目标检查点的 FFG 投票是双重投票,除非 slot 32 为源检查点,否则要受到罚没。相同的 FFG 投票不会遭到罚没。

针对同一个源检查点的两次 FFG 投票,不用受到罚没。这对系统的活性很重要。

比如说,如果有两个分叉,每个分叉占有验证者 50% 的余额,那么协议需要鼓励 (而非惩罚) 验证者通过对同一个源检查点和一个不同的目标检查点发起投票,从而在分叉间转换。验证者可以在分叉之间安全地来回转换,并尝试达到 2/3 的绝对多数,以避免陷入僵局。

一名吹哨验证者提出举报时,需要打包冲突投票的相关信息来证明该验证者应受到罚没。

要在一个庞大的记录系统里,有效地找出冲突投票,是对算法和数据结构的一项巨大挑战。目前「罚没检测工程挑战」正在寻求参与者。

验证者完全有能力使自己避免被罚没:只需要记住其对哪些证明和提议进行了签名。一名诚实的验证者不会因为其他验证者的行为而受到罚没。只要验证者没有对冲突的证明或提议进行投票,就不会受到罚没。

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

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

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

当验证者的余额低于 16 个 ETH 时,信标链就会停止这些验证者的工作。质押者可以将剩余的验证者余额提出来,但目前无法在 eth2 的阶段中实现。

在 2048 个 epoch,将近 9 天时间的工作之后,验证者还可以自愿选择退出。退出时,质押者需要等待 4 个 epoch 才能撤出其质押金在这 4 个 epoch 之内,验证者仍然有可能面临举报和罚没。

一名诚实验证者大概 27 小时之后便可以提出其余额。然而,如果一名验证者受到了罚没惩罚,则必须等 8192 个 epoch (大约 36 天) 之后才能够提出余额。

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

详解以太坊 2.0 信标链

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

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

总结

在每个 epoch,验证者们被均匀地分配到各个 slot 中,然后进一步分配到规模相当的各委员会中。各个验证者同时只能位于一个 slot 和一个委员会中。

下面总结几点:

  1. 同一个 epoch 里的所有验证者尝试最终确定同一个检查点:这是 FFG 投票
  2. 所有验证者被分配到一个 slot 中,尝试投票选出同一个信标链头:这是 LMD GHOST 投票
  3. 所有验证者被分配到一个委员会中,尝试交联某个分片;
  4. 采取最优行为的验证者获得的奖励最多。

激活信标链至少需要 16,384 个创世验证者。验证者的数量可能会因为罚没或者自动退出而减少,也会随质押者的激活而增加。

当系统升级到 eth2 阶段 1 或以上时,将需要更多的验证者工作。信标链需要至少 262,144 个验证者 (质押金额将超过 800 万 ETH) 来生产区块,每个区块包含 64 条交联。

历史上从来没有过为去中心化系统和应用搭建的扩容平台。如果你受到了启发,想要更深入地参与,「ETH2.0 规范」里有权威的参考,其中包含信标链规范,还有其他关键资源以及赏金的相关问题。

目前来说,点对点网络层最亟待完善。来和我们一起参与这项挑战吧!更多技术细节请访问 ethresear.ch 或者 Ethereum Magician’s forum,和我们一起创造历史吧!

感谢 Danny Ryan 对多个部分的审校和反馈,感谢 Momo Araki 的图表以及提供咨询的各位。标题图由 Hsiao-Wei Wang 的原作修改而来。如果读者朋友觉得本文对你有所帮助,请不吝分享!