宁静设计理念

 
 留言

另请参阅:3-4 年前的 1.0 设计原理文档 https://github.com/ethereum/wiki/wiki/Design-Rationale

 

 

原则

  • 简单性:特别是由于加密经济权益证明和二次分片本质上是复杂的,协议应该尽可能地努力在其决策中实现最大的简单性。这很重要,因为它(i)最大限度地降低了开发成本,(ii)降低了不可预见的安全问题的风险,并且(iii)允许协议设计人员更轻松地说服用户参数选择是合法的(另请参阅此处此处,了解简单性和政治合法性的哲学背景)。当复杂性不可避免地无法实现给定级别的功能时,复杂性的优先顺序是:第2层协议>客户端实现>协议规范。
  • 长期稳定性:理想情况下,应该构建协议的低级别,以便无需在十年或更长的时间内更改它们,并且任何所需的创新都可以在更高级别(客户端实现或第2层协议)上进行。
  • 充分性:从根本上说,在协议之上构建尽可能多的应用程序类应该是可能的(另请参阅此处的“功能转义速度” )
  • 深度防御:协议应在各种可能的安全假设(例如,关于网络延迟,故障计数,用户动机)下继续尽可能好地工作
  • 完全的轻量级客户端可验证性:给定一些假设(例如,网络延迟,攻击者预算的限制,1-of-N或ni-of-N诚实的少数),验证少量固定数据(理想情况下只是信标链)的客户端应该能够间接保证整个系统中的所有数据都是可用和有效的,即使在51%的攻击下(注意: 这是纵深防御的一种形式,但它足够重要,可以分开)

第 1 层与第 2 层的权衡

以太坊路线图使用混合的第1层/第2层的方法。我们专注于提供特定类型的第 2 层(汇总,另请参阅 2020 年的“以汇总为中心的路线图”文档),因为它是唯一一种既继承了第 1 层的安全性,又提供了通用应用程序的扩展的第 2 层。然而,汇总是有代价的:它们需要每个交易的一些链上数据,因此具有真正高容量汇总的区块链必须能够处理仍然相当高的数据带宽。因此,为了使这更加可行,我们正在实现可扩展的数据层技术,特别是数据可用性采样(DAS)。

不采用纯第 2 层方法的原因是,纯第 2 层扩展只能使用基于信任的解决方案(不可取)或通道或等离子体(它们具有固有的局限性,不能支持完整的 EVM;请参阅本文中对两者的简单描述)来完成。

不采用纯第1层方法的原因是在执行层中为实验提供了更大的空间,并允许基本协议更简单,并且治理强度更低。

为什么要进行权益证明

看:

为什么选择卡斯帕

目前有三大流派的权益证明共识算法:

  • 中本聪启发(Peercoin,NXT,Ouroboros...)
  • PBFT启发(Tendermint,Casper FFG,Hotstuff...)
  • CBC Casper这里这里的描述;雪崩的分类 是有争议的,但有论据认为它适合这里)

在后两个阵营中,还存在是否以及如何使用保证金和削减的问题(中本聪启发的算法与非平凡的削减不兼容)。这三者都优于工作量证明,但我们希望捍卫自己的方法。

削减

以太坊2.0使用斜杠机制,其中检测到行为不端的验证器可能会受到惩罚,在最好的情况下约为1%,但在最坏的情况下,最高可达其全部存款。

我们捍卫我们使用斜杠,如下所示:

  1. 提高攻击成本:我们希望能够提出一个硬性声明,即对权益证明区块链的51%攻击迫使攻击者承担大量费用(想想:价值数亿美元的硬币),这些费用被烧毁,任何攻击都可以快速恢复。这使得攻击/防御计算对攻击者非常不利,实际上使攻击可能适得其反,因为合法的硬币持有者的价格收益超过了对服务的中断。
  2. 克服验证者的困境:节点开始偏离“诚实”行为的最现实的直接方法是懒惰(即不验证应该验证的事情,签署所有内容以防万一等)。请参阅验证者的困境论文,了解理论推理和比特币SPV挖矿分叉,了解这种情况发生并导致野外非常有害的后果的例子。对自相矛盾或签署不正确的东西进行非常大的惩罚有助于缓解这种情况。

(2)的一个更微妙的实例可以如下所示。2019年7月,Cosmos上的一个验证者因签署两个相互冲突的区块而被削减。一项调查显示,发生这种情况是因为该验证器正在运行主节点和备份节点(以确保两者中的一个脱机不会阻止他们获得奖励),并且两者同时意外打开,导致它们相互矛盾。

如果拥有主节点和备份节点成为标准做法,则攻击者可以对网络进行分区,并让所有验证程序的主节点和备份提交到不同的块,从而导致两个冲突的块被最终确定。削减处罚有助于严重抑制这种做法,降低这种情况发生的风险。

共识算法的选择

只有受BFT启发和CBC共识算法的学派才有最终性的概念,其中块的确认方式使得很大一部分(BFT启发的1/3,CBC中的1/4)验证者需要行为不端并被削减才能使该块恢复以支持某些冲突的块;从这个意义上说,中本聪启发(即最长链规则)的共识算法无法实现最终性。

请注意,最终性要求(超)大多数验证者在线,但这已经是分片机制的要求,因为它需要2/3的随机抽样的验证者委员会签署交叉链接才能接受该交叉链接。

我们选择Casper FFG只是因为它是协议部分最终确定时可用的最简单的算法。细节仍需长期变化;特别是,我们正在积极探索实现单插槽最终性的解决方案

分片 - 或者,为什么我们讨厌超级节点?

另请参阅:

对于第1层扩展,分片的主要替代方案是使用超级节点 - 简单地要求每个共识节点都有一个强大的服务器,以便它可以单独处理每笔交易。基于超级节点的扩展很方便,因为它易于实现:它的工作方式与区块链现在的工作方式相同,除了需要更多的软件工程工作才能以更并行化的方式构建事物。

我们对这种方法的主要反对意见如下:

  • 池集中化风险:在基于超级节点的系统中,运行一个节点具有较高的固定成本,因此可以参与的用户越来越少。这通常被反驳为“在大多数PoW和PoS硬币中,无论如何,它们都由5-20个池主导,并且池将能够很好地运行节点”。但是,这种响应忽略了集中化压力的风险,即使在能够负担得起的池之间也是如此。如果运行验证器的固定成本相对于回报而言是显着的,那么较大的池将能够提供比较小的池更少的费用(例如,请参阅Cosmos中对此的关注),这可能导致较小的池被推出或感到合并的压力。另一方面,在分片系统中,具有更多ETH的验证者需要验证更多的交易,因此成本不是固定的。
  • AWS集中化风险:在基于超级节点的系统中,家庭质押是不可行的,因此大多数质押更有可能发生在云计算环境中,其中只有几个选项可供选择。这将创建单点故障。
  • 减少审查阻力:在没有高计算+带宽要求的情况下,无法参与共识,使验证者的检测和审查更容易。
  • 可扩展性:随着事务吞吐量的增加,在基于超级节点的系统中,上述风险会增加,而分片系统可以更轻松地处理增加的负载。

这些中心化风险也是为什么我们没有试图实现区块链的超低延迟(<1s),而是选择(相对!)保守的数字。

相反,以太坊正在采取一种方法,其中每个验证器仅被分配处理所有数据的一小部分。只有押注大量ETH(想想:数万或更多)的验证者才需要处理链中的整个数据。

请注意,在分片设计中存在一个可能的中间地带,其中区块生产是集中的,但(i)区块验证是分散的,(ii)存在“绕过渠道”,用户可以发送交易,区块生产者被迫包括它们,因此即使是垄断生产者也无法审查。 这篇文章(“Endgame”)谈到了这个中间地带。 我们正在积极考虑朝这个方向倾斜的分片设计,以提高简单性,以便可以更快地部署扩展,尽管如果需要,即使在此规范中,也可以运行分布式构建器和avvoid中心化。

安全模型

人们普遍认为,区块链依赖于“诚实多数”的假设来保证其安全性:>=50%的参与者将忠实地遵循规定的协议,甚至放弃为了自己的个人利益而叛逃的机会。实际上,(i)诚实的多数模型是不现实的,参与者“懒惰”并在没有验证它们的情况下签署区块(参见验证者的困境论文比特币SPV挖矿分叉)是一种非常常见的叛逃形式,但幸运的是(ii)区块链在更苛刻的模型下维护许多或所有的安全属性,并且保留这些额外的保证非常重要。

一个常见的更苛刻的模型是不协调的理性多数模型,它指出参与者的行为符合他们自己的利益,但不超过一定百分比(例如。 23.21%在简单的PoW链中)相互合作。更苛刻的模型是最坏情况的模型,其中有一个参与者控制着超过50%的哈希算力或股权,问题就变成了:

  • 即使在这种情况下,我们能否迫使攻击者支付非常高的成本来打破链条的保证?
  • 我们可以无条件地维护哪些保障?

在权益证明链中进行削减可实现第一个目标。在非分片链中,验证每个区块的每个节点都实现了两个特定保证的第二个目标:(i)最长的链是有效的,以及(ii)最长的链是可用的(关于 “数据可用性”重要性的哲学论证,请参阅此处)。

分片的一个主要挑战是获得相同的两个属性,而不需要每个节点验证整个链。我们采用分片的纵深防御方法可以实现这一目标。核心思想是将随机委员会抽样,保管证明,欺诈证明,数据可用性抽样(DAS)和最终的ZK-SNARKs结合在一起,允许客户检测和拒绝无效或不可用的链,而无需下载和验证所有数据,即使无效链得到大多数权益证明验证者的支持。

客户可能会以一种保持共识的方式检测到对交易的审查(参见 https://ethresear.ch/t/censorship-detectors-via-99-fault-tolerant-consensus/2878),但这项研究尚未被纳入以太坊路线图。

下面是表中表示的当前预期安全属性:

||网络延迟 <3s |网络延迟 3 秒 - 6 分钟|网络延迟> 6 分钟|
|—|—|—|—|—|
|>2/3 验证者诚实|完美的操作|不完美但可接受的操作。没有严格的活泼证明,但在实践中期望活泼 |。可能出现间歇性活体故障,无安全故障|
|>2/3 验证者理性,<1/3 协调|完美的操作|操作不完美但可接受,集中化风险加剧|可能出现间歇性活动故障,无安全故障,集中化风险非常高|
|51% 攻击者|可以恢复最终性或审查,但成本高昂;无法强制通过无效或不可用的链|可以恢复最终性或审查,但成本高昂;无法强制通过无效或不可用的链|可以恢复最终性或审查;无法强制通过无效或不可用的链|

为什么Casper激励措施是这样设置的?

基本奖励

在每个时代,每个验证者都应该进行“证明”,这是一个签名,表达了验证者对链头是什么的看法。包括一个人的证明是有四个组成部分(称为“职责”)的奖励:

  1. 包括证明的奖励
  2. 指定正确纪元检查点的证明奖励
  3. 对指定正确链头的证明的奖励
  4. 正确参与同步委员会签名的奖励

上述链接中的第五个职责只是提出一个块。另请注意,混合到这些职责中是一项及时性要求:您的证明必须在一定时间内才有资格获得奖励,并且对于“正确头部”职责,时间限制为1个时段。

对于每个职责,实际奖励的计算方法如下。如果:

  • R=B∗nomden等于基础奖励乘以分数nomden对应于该特定职责
  • P是执行所需操作的验证程序部分

然后:

  • 任何完成杜里验证的验证者都 将获得 R∗P
  • 任何没有履行职责的验证者都将被罚款−R

这种“集体奖励”计划的目的是“如果有人表现得更好,每个人都表现得更好”,目的是约束悲伤因素(参见本文,了解悲伤因素的描述以及它们为什么重要)。

基本奖励B本身计算为k∗Di∑j=1nDj哪里D1.标签。标签。Dn是沉积物大小和k是一个常量;这是两种常见模型之间的折衷,(i)固定奖励率,即。k∗D和和(ii)固定的总奖励,即。k∗Di∑j=1nDj.

反对(i)的主要论点是,它对网络施加了太多的不确定性,分为两种:发行总额的不确定性和存款总水平的不确定性(如果固定奖励利率设置得太低,那么几乎没有人会参与,威胁到网络,如果利率设置得太高,那么就会有很多验证者参与, 导致出乎意料的高发行量)。反对(ii)的主要论点是更容易受到劝阻攻击(再次参见劝阻攻击论文)。平方反比方法在两者之间折衷,并避免了每种方法的最坏后果。

当证明获得奖励时,提议者将获得奖励的一小部分。这是为了鼓励提议者好好倾听信息,并尽可能多地接受信息。

另请注意,奖励旨在宽恕经常离线的验证者:离线1%的时间只会牺牲大约1.6%的奖励。这也是为了促进去中心化:去中心化系统的目标是从不可靠的部分中创建一个可靠的整体,所以我们不应该试图强迫每个节点都非常可靠。

不活动泄漏

如果链未能最终确定tsf>4纪元 (tsf=“自最终确定以来的时间”),然后添加一个惩罚,使得最大可能的奖励为零(执行不完美的验证者受到惩罚),并添加第二个惩罚分量,比例为tsf (也就是说,链没有最终确定的时间越长,离线的每纪元惩罚就越高)。这确保了如果超过1/3的验证者退出,则不在线的验证者将受到更严厉的惩罚,并且总罚款会随着时间的推移而成二倍增加。

这会产生三个后果:

  • 在您离线实际上阻止块最终确定的情况下,对离线的惩罚要严重得多
  • 服务于成为反关联惩罚的目标(见下一节)
  • 确保如果超过1/3的离线,由于离线验证器的存款下降,最终在线部分将恢复到2/3

当前的参数化中,如果区块停止最终确定,验证者在2.6天后损失1%的存款,在8.4天后损失10%,在21天后损失50%。这意味着,例如,如果50%的验证者离线,区块将在21天后再次开始完成。

削减和反关联处罚

如果验证者被发现违反Casper FFG削减条件,他们受到的部分存款的处罚相当于与他们同时受到处罚的验证人部分的三倍(特别是,在他们受到处罚前18天之间,大约在他们撤回的时间之间)。 这是由几个目标驱动的:

  • 只有当验证者与许多其他验证者同时行为不端时,验证者行为不端才会对网络造成真正的损害,因此在这种情况下,更多地惩罚他们是有意义的。
  • 它对实际攻击的惩罚非常严厉,但对单个孤立的故障(很可能是诚实的错误)施加了非常轻的惩罚。
  • 它确保较小的验证者比较大的验证者承担更少的风险(在正常情况下,大型验证者将是唯一一个与自己同时失败的人)
  • 它对每个人加入最大的游泳池造成了抑制作用。

劳工统计局签名

使用 BLS 签名是因为它们的聚合友好性:任意两个签名S1S2的消息M由密钥签名k1k2(对应的公钥K1=G∗k1K2=G∗k2哪里G是椭圆曲线的生成器)可以简单地通过椭圆曲线点加法进行聚合:S1+S2,根据公钥进行验证K1+K2.这允许聚合数千个签名,一个签名的边际成本是一个数据位(表示聚合签名中存在特定的公钥)和一个椭圆曲线加法用于计算。

请注意,这种形式的BLS签名容易受到流氓密钥攻击:如果您看到其他验证者已经发布了公钥 K1.。。Kn,然后您可以生成私钥r并发布公钥G∗r−K1−.。。−Kn.聚合公钥将简单地是G∗r,因此您将能够自己制作一个签名,根据组合的公钥进行验证。解决这个问题的标准方法是要求所有权证明:基本上,消息的签名(取决于公钥,通常不会签名)本身验证公钥(即。 sign(mess age=H′(K),key=k)用于私有密钥k和公钥K哪里H′是一个哈希函数)。这可确保您亲自控制连接到您发布的公钥的私钥。

我们使用存款消息的签名(指定签名密钥以及其他重要数据,如提款密钥)作为所有权证明。

为什么有32个ETH验证器大小?

任何具有负责任的容错能力的BFT共识算法(即,如果两个冲突的区块最终确定,您可以确定哪个1/3的节点负责)必须让所有验证者参与,此外,出于技术原因,您需要两轮每个验证者参与以最终确定消息。

这导致去中心化/最终时间/开销权衡:如果 n是网络中验证者的数量,f是完成块的时间,并且是每秒消息的开销,然后我们有:

ω≥2∗nf

例如,如果我们对每秒 10 条消息的开销感到满意,那么一个 10000 节点的网络的结束时间只能是至少 2000 秒(约 33 分钟)。

在以太坊的情况下,如果我们假设ETH的总供应量≈227ETH,那么有32个ETH的存款大小,最多有222验证器(如果每个人都验证;一般来说,我们期望ETH验证少10倍)。如果最终时间为 2 个 epoch (2 * 32 * 12 = 768 秒),则意味着最大开销为222768≈5461 每秒消息数。我们可以容忍如此高的开销,因为BLS聚合将每个签名的边际大小减少到1位,并将边际验证复杂性减少到一个椭圆曲线加法(参见灯塔基准测试))

由于另一个原因,32个插槽是一个安全的最小值:如果攻击者操纵用于提议者选择的随机性,这个数字仍然提供足够的空间来确保每个时代至少有一个诚实的提议者,这足以确保区块不断完成。我们的计算表明,当前的开销水平是可以接受的,但较高的水平会使运行节点变得过于困难。最后,验证器存款大小是分片交联的理想选择(见下文)。

随机抽样

种子选择

用于随机性的种子通过“混合”(即。 ) 必须由块的提议者揭示的值。就像保管子项的证明一样,验证器的值都是在验证程序存入后预先确定的,第三方无法计算子键,但可以验证自愿显示的子项(这种机制有时称为RANDAO)。seed <- xor(seed, new_data)

这确保了每个提议者对种子有一个“操纵”:他们可以做一个区块,也可以不做一个区块。不做一个区块是昂贵的,因为提议者错过了许多奖励。此外,由于持久性和信标委员会的规模(见下文)很大,因此对随机性的操纵几乎肯定不能允许少数攻击者获得任何委员会的2/3。

在未来,我们计划使用可验证的延迟函数(VDF)来进一步提高随机种子对操纵的鲁棒性。

洗牌

我们使用交换或不洗牌从 https://link.springer.com/content/pdf/10.1007%2F978-3-642-32009-5_1.pdf 来洗牌验证器集,并在每个时代分配责任。此算法可确保:

  • 由于洗牌是一种排列,因此在每个时代,每个验证者都被分配为恰好一个委员会的成员(保持其负载稳定并减少随机性操纵的机会可能是有利可图的)
  • 由于洗牌在正向方向上是逐点的,因此验证者可以在O(1)时间内确定自己的职责
  • 由于洗牌在相反方向上是逐点的,因此任何特定委员会的成员或任何特定区块的提议者都可以在O(1)时间内计算

按插槽随机播放

一个时代有 32 个插槽,负责证明每个插槽的验证者是通过随机分配来选择的。这确保了在总赌注中占有很大一部分但仍然很小的攻击者无法接管特定插槽并导致短程重组。

灯塔委员会

每个插槽的委员会又被分成一定数量的信标委员会(请参阅规范中的此方法)。今天(2022年1月),这种设计确实提供了一个有用的功能,允许不同的证明子集聚合到单独的子网中,从而使p2p网络更加高效。然而,它不起任何其他有用的与共识有关的作用。

在最初的分片设计中,目的是每个信标委员会负责验证特定的分片。但是,如果我们切换到单提议者模型,这种方法可能会被弃用(另请参阅引入此更改的推文线程)。因此,更细粒度的信标委员会很可能只存在于现有状态,最终可能会以不同的方式删除或重组,以专注于促进证明聚合。

同步委员会

每约27小时选择一次由512个验证者组成的同步委员会来签署一个区块;该委员会的公钥保存在一个易于访问的列表中,允许超轻量级客户端轻松验证签名。

另请参见:同步协议规范

LMD 幽灵分叉选择规则

信标链使用 LMD GHOST 分叉选择规则,如分叉选择规范中所述

LMD GHOST分叉选择规则包含来自所有验证器的信息,每个插槽中有数百个验证器,因此在正常情况下,即使是单个块也极不可能被还原。由于分叉选择取决于所有验证器,这也确保了除非攻击者确实控制了整个验证器集的近50%,否则块无法恢复;人们不能通过操纵随机性来获得很大的优势。

监护权证明游戏

对于每个 9 天期限,每个验证程序都可以私下生成一个“期间子项”。验证者的公钥唯一地决定了每个周期的周期子项,因此一旦验证程序存款,他们就没有进一步的自由来选择它们的子项。除了验证器本身之外,没有人可以计算任何给定的验证器的子密钥,但是一旦验证器自愿显示子密钥,任何人都可以验证其正确性(这一切都是通过BLS魔术完成的,如果将来需要量子安全,则可以通过基于哈希的承诺来完成)。

使用数据对块进行签名时D带根R期间js作为时期-j该验证器的秘密,需要验证器来计算位域M如下:

  • 分裂D转换为 512 字节的块D[0].标签。标签。D[n−1]
  • 设置M成为第 i 位所在的位域M[i]=m和x(s,D[i])

它们包括 (这称为托管位)作为他们正在签署的内容的一部分。 两 者都可以被视为输出单个位的类似哈希的函数(但专为多方计算友好性而设计)。get_chunk_bits_root(M)mixget_chunk_bits_root

如果交联包含多个块B1.。。Bn验证器计算保管位c1.标签。标签。cn对于这些区块,则验证器对所有区块进行签名(B i,c i,i)元组并聚合它们。这种非常规的自聚合用于确保只有2n不同的消息(n个不同的块/索引对 * 2 个不同的位值)由不同的验证器签名,从而减少了验证签名所需的配对数量。

如果验证者发布其期限j期间或之前的子项j,任何其他验证者都可以将子项的知识证明发布到链中,然后惩罚其子项被泄露的验证程序。知识的证明也证明了哪个验证者创造了它;这可以防止区块提议者“窃取”举报奖励(再次全部通过BLS魔术完成,如果将来需要量子安全,这可以通过STARKs完成)。这样做的目的是使外包计算变得危险M.

验证者发布其期限后j子项,其他任何人都可以检查他们签署的任何块的工作。如果他们发现验证者提供了不正确的托管位,他们可以挑战这个链上,并削减该验证者。一般来说,随机猜测(或任何不涉及所有D) 只会给出一半的正确答案,导致每个签名块被削减的风险为50%。

这种机制的目的是缓解验证者的困境问题,其中验证者有动机避免出于懒惰而验证数据,并假设所有其他验证者都是诚实的;如果太多的验证者以这种方式思考,可能会导致公地的悲剧,导致链接受无效块。使用此方案,如果验证者尝试提交他们没有亲自处理的数据,那么他们将无法计算 M,因此将失去交互式挑战游戏。

深安

SimpleSerialize 套件包含以下算法:

  • 序列化算法
  • 哈希算法(称为 或 SSZTreeHashhash_tree_root)
  • 一种广义的 Merkle 证明算法(称为“SSZ 部分”),可以处理多个值的证明,并在这种情况下以最佳方式对 Merkle 树姊妹节点进行重复数据删除。

序列化算法具有以下设计目标:

  • 简单性(例如,没有三个子句像RLP一样具有长/列表编码,具体取决于项目长度)
  • 在完全固定大小的对象的情况下等效于简单串联
  • 可用作共识层序列化算法和应用层 ABI

请注意,生成的SSZ序列化规范与以太坊1.0 ABI非常相似,主要区别在于(i)不同的基本数据类型和(ii)用4字节大小替换32字节长度/位置记录大小。

哈希算法具有以下设计目标:

  • 计算更新对象哈希的效率,特别是在对象非常大和/或复杂且变化相对较小的情况下
  • 证明特定字段值的效率(就验证复杂性见证大小而言),即使在具有给定哈希值的大型或复杂对象中也是如此

这些要求共同使Merkle树结构成为显而易见的选择。

广义指数

有关 广义索引的描述,请参阅 https://github.com/ethereum/eth2.0-specs/blob/dev/ssz/merkle-proofs.md,以及它们如何通过将路径表示为整数或位字段来允许非常轻松地验证Merkle证明“戳入”对象中的任意位置。

验证器生命周期

沉积

验证器通过发送一笔交易来存款,该交易调用eth1链上存款合约上的函数(最终,还将添加一种从eth2内部存款的方式)。存款指定:

  • 与将用于对消息进行签名的私钥对应的公钥
  • 提款凭证(验证器完成验证后将用于提取资金的公钥的哈希)
  • 存款金额

这些值均由签名密钥签名。拥有单独的签名和取款密钥的目标是允许更安全地保存更危险的提款密钥(离线,不与任何抵押池共享等),同时签名密钥用于在每个epoch积极地签署消息。

存款合同保留了迄今为止所有存款的Merkle根。一旦包含存款的merkle根被包含在eth2链中(通过Eth1Data投票机制),eth2区块提议者可以提交存款的Merkle证明并开始存款过程。

激活

验证程序会立即加入验证程序注册表,但最初处于非活动状态。验证器在以下时间后变为活动状态N≥4时代;至少有4个,以确保RANDAO不可操纵,并且N如果同时尝试加入的验证者过多,则可能超过 4 个。如果活动验证器集具有大小|答|,最大值为m和x(4.|答|65537)valdators可以按纪元加入;如果有更多的验证者尝试加入,它们将被放入队列中并尽快处理。

退出

当验证程序退出时(无论是通过发布自愿退出消息还是被斜杠),它们同样被放入具有相同最大吞吐量的退出队列中。

进入/退出队列限制的原因是为了确保验证器集在任何两个时间点之间不会变化太快,这确保了只要验证器登录足够频繁(每约1-2个月一次,如果|答|≥262144)。请参阅此处 https://ethresear.ch/t/rate-limiting-entry-exits-not-withdrawals/4942 了解基本原理(特别是为什么使用速率限制而不是固定等待时间),并 https://ethresear.ch/t/weak-subjectivity-under-the-exit-queue-model/5187 如何计算已脱机一段时间的客户端的安全裕度。

提款

一旦验证者离开退出队列,他们还有大约27小时的时间才能退出。这个时期有几个功能:

  • 它确保如果验证程序行为不端,则可以在一段时间内捕获错误,并且即使退出队列几乎为空,也可以削减验证程序。
  • 它为包含分片奖励的最后一段时间提供了时间。
  • 它为提出监护权挑战提供了时间。

如果验证程序被削减,则会再延迟约 36 天。这进一步惩罚了他们(并迫使他们持有ETH;这使得对于试图破坏以太坊区块链的恶意验证者的惩罚比那些想要支持该平台但刚刚犯了错误的验证者要大一些,因为前一类必须冒着风险或支付衍生品来抵消它)。 但也允许在一段时间内计算被削减的其他验证器的数量。

在第0阶段,“撤回”验证器实际上还不能撤回到任何地方;唯一的区别是它受到保护,免受验证者的处罚,并且没有任何责任。在稍后阶段,将提供将资金从提取的验证器插槽移动到执行环境的功能。

有效平衡

大多数基于验证者余额的计算使用验证者的“有效余额”;唯一的例外是增加或减少验证器余额的计算。只有当验证者的余额B低于EB或高于EB+1.5EB调整为相等flor(B).这样做是为了确保有效的平衡变化不频繁,减少每个纪元重新计算状态所需的哈希量;平均而言,只有余额需要全部更新,而每个验证器的有效余额只相对较少地更新。余额都存储在专用矢量中,因此2∗N∗832=N2需要哈希来重新计算余额数组,而有效余额存储在验证器记录对象中,其中至少5N每个验证程序都需要哈希值来调整 SSZ 哈希根。此外EB可以更容易地压缩成 CompactValidator 对象,因为它只有一个字节。

前叉机构

数据 结构包含 (i) 当前“分叉 ID”,(ii) 上一个分叉 ID 和 (iii) 切换槽。当前高度的分叉 ID 会影响所有消息的有效签名;因此,使用一个分叉 ID 签名的消息对于使用任何其他分叉 ID 的验证函数无效。Fork

分叉是通过在某个“分叉槽”上添加状态转换来完成的n这会将以前的分叉 ID 设置为当前分叉 ID,将当前分叉 ID 设置为新值,并将切换槽设置为n.签名验证功能将使用消息所在插槽处的分叉 ID 来验证消息,该分叉 ID 可以是以前的分叉 ID 或当前分叉 ID(例如,考虑延迟后包含的证明情况;分叉槽之后可以包含分叉槽之前的证明)。

如果任何用户不想加入分叉,他们可以简单地继续链,该链不会更改分叉槽的分叉ID。这两条链将能够继续进行,验证者可以自由地对两条链进行验证而不会被削减。