Alert Source Discuss

EIP-: ```md

Authors

```md

eip: 2982 title: Serenity 阶段 0 description: Serenity 的发布计划的阶段 0,这是一系列对以太坊的可扩展的权益证明共识的更新 author: Danny Ryan (@djrtwo), Vitalik Buterin (@vbuterin) discussions-to: https://ethereum-magicians.org/t/serenity-phase-0-eip/4621 status: Final type: Informational created: 2020-09-15 —

摘要

本 EIP 规定了 Serenity (eth2) 的阶段 0,这是对以太坊主网共识机制的多阶段升级。在阶段 0 中,现有的 PoW 链和机制完全不受影响,而 PoS 链(信标链)与 PoW 链并行构建,作为升级后共识的核心。在随后的阶段中,信标链得到增强,以支持和保护多个并行分片链的共识,最终将当前的以太坊主网纳入为其中一个分片。

信标链的核心是权益证明共识机制,称为 Casper Friendly Finality Gadget (FFG),以及一种称为 Latest Message Driven Greedy Heaviest Observed Sub-Tree (LMD-GHOST) 的分叉选择规则。阶段 0 主要围绕验证者执行这些算法的机制和激励措施展开。eth2 的详细规范包含在本 EIP 之外的独立存储库中,安全性和活跃性证明可以在 Combining GHOST and Casper 论文中找到。为避免重复,本 EIP 仅参考相关的规范文件和版本。

eth2 的早期阶段的执行不会对当前的以太坊主网产生任何破坏性的共识更改。本 EIP 旨在记录此共识机制的引导过程,并记录 eth2 取代以太坊当前工作量证明 (PoW) 共识的路径。

动机

Eth2 旨在实现以太坊的最初愿景,即支持高效、全球规模、通用事务平台,同时保持高密码经济安全性和去中心化。

如今,由于对去中心化应用程序的需求日益增长,以太坊区块一直处于饱和状态。自从 2017 年首次出现严重的采用高峰(加密猫)以来,以太坊社区一直在不断且强烈地要求扩展解决方案。

自从以太坊的第 0 天起,对扩展解决方案的调查和期望一直是双管齐下的 —— 从 Layer 1 升级和 Layer 2 采用两个方面进行扩展。本 EIP 代表了前者多阶段推广的开始。

通过分片进行扩展

随着以太坊网络及其之上构建的应用程序在过去 5 年中使用量不断增加,区块已变得经常饱和,gas 价格市场持续攀升。简单地增加当前以太坊链的区块 gas 限制无法满足系统需求的增长,同时又不会给消费者节点带来不可持续的高资源负担(以带宽、计算和磁盘资源的形式)。为了在扩展以太坊网络的同时保持去中心化,必须采取另一条路径。

为了为以太坊提供更多扩展,同时又不会对消费者和共识节点造成限制性的高负担,eth2 引入了一种“分片”解决方案,其中多个区块链分片(每个分片的容量与今天以太坊主网的容量相似)在统一的共识机制下并行运行。核心共识(信标链)和少量这些分片可以通过单台消费机器进行处理,而系统的聚合提供更高的容量。

通过权益证明实现去中心化和经济终结性

自从以太坊的早期以来,权益证明一直是人们期待已久的愿望,原因如下:

  • 通过降低参与门槛和技术要求来提高核心共识的去中心化程度
  • 通过协议内对违规行为的惩罚和经济终结性的增加来提高密码经济安全性
  • 消除当前 PoW 共识机制中耗能的挖矿

除了以上几点之外,PoS 还与分片扩展解决方案具有协同作用。由于分片的随机抽样要求,PoS 提供了比 PoW 更简单和直接的访问“活跃验证者集合”的方式,因此可以更直接地构建分片协议。

规范

阶段 0 旨在_不对现有的以太坊主网进行任何破坏性的共识更改_。相反,这是引导一种新的 PoS 共识,该共识一旦稳定,就可以取代当前的 PoW 共识。

阶段 0 规范保存在独立于本 EIP 的存储库中。SPEC_RELEASE_VERSION 版本的规范在 SPEC_RELEASE_COMMIT 被认为是本 EIP 的规范阶段 0 规范。

本 EIP 提供了阶段 0 机制的高级视图,特别是那些与以太坊主网(例如存款合约)和用户(例如验证者机制和 eth2 发行)相关的机制。扩展和低级别详细信息保留在 consensus-specs 存储库中。

参数

参数
SPEC_RELEASE_VERSION v1.0.0
SPEC_RELEASE_COMMIT 579da6d2dc734b269dbf67aa1004b54bb9449784
DEPOSIT_CONTRACT_ADDRESS 0x00000000219ab540356cBB839Cbe05303d7705Fa
MIN_GENESIS_TIME 1606824000
BASE_REWARD_FACTOR 2**6 (64)
INACTIVITY_PENALTY_QUOTIENT 2**26 (67,108,864)
PROPORTIONAL_SLASHING_MULTIPLIER 1
MIN_SLASHING_PENALTY_QUOTIENT 2**7 (128)

注意: Eth2 具有更多的阶段 0 配置参数,但为了简洁起见,本 EIP 中省略了大多数参数。

验证者存款合约

在阶段 0 中,eth2 使用部署在以太坊主网上的合约 —— 存款合约 —— 地址为 DEPOSIT_CONTRACT_ADDRESS,用于将验证者加入到信标链的 PoS 共识中。

为了参与 PoS 共识,用户将验证者存款提交到存款合约。信标链对该合约的状态达成共识,并处理新的验证者存款。这种单向存款机制是阶段 0 中系统(以太坊主网和信标链)两个组件之间唯一的 技术链接

信标链和验证者机制

选择参与 eth2 共识的用户将 ETH 抵押品存入存款合约,以便被引入到信标链验证者集合中。从那里,这些验证者负责构建信标链(请注意,PoS 中的这些共识参与者类似于 PoW 中的矿工)。

信标链是一条纯 PoS 链,在阶段 0 中主要关注维护其自身的共识和管理验证者注册表。共识规则定义了验证者应参与的_角色_(例如,区块提议、区块证明);表现良好的验证者会得到奖励,而表现不佳或离线的验证者会受到惩罚。阶段 0 尚未包含任何 ETH 转账、分片或智能合约/VM 执行功能。

在随后的阶段中,将向信标链添加额外的机制和验证者职责,以管理多个并行分片链的共识(“阶段 1”),整合现有的以太坊系统(“阶段 1.5”),并为分片智能合约执行添加全面的支持(“阶段 2”)。

发行

为了激励验证者存入以太币抵押品并参与 eth2 共识,我们建议定期向共识参与者发行奖励(以以太坊的本地资产以太币的形式)。由于在 eth2 的早期阶段中,信标链与现有的 PoW 链并行运行,因此这种发行_是_对任何 PoW 奖励的_补充_,直到现有链合并到 eth2 中作为分片。

发行给信标链上验证者的以太币数量与存入的总以太币的平方根成正比。选择该发行曲线是作为比两种明显的替代方案(固定总发行量和每个抵押以太币的固定发行量)更稳定和可持续的曲线。有关此选择的更多技术讨论,请参见此处

在 eth2 中,此曲线由插槽时间和 epoch 长度上下文中的 BASE_REWARD_FACTOR 进行参数化。以下是作为抵押以太币的函数的发行曲线,以及用于说明的示例表。请注意,所有显示的数字均为年度化。

有效存款 最大年度验证者奖励* 最大年度 ETH 发行量*
0.5M ETH 23.50% 117,527
1M ETH 16.60% 166,208
2M ETH 11.75% 235,052
4M ETH 8.31% 332,411
8M ETH 5.88% 470,104
16M ETH 4.16% 664,801
32M ETH 2.94% 940,167
64M ETH 2.08% 1,329,603
128M ETH 1.47% 1,880,334

*假设验证者 100% 的时间都在线并且行为最佳。次优验证者行为将导致奖励减少和/或惩罚,从而减少总发行量。

初始惩罚参数

为了使 PoS 协议在密码经济上安全,需要协议内惩罚。较小的离线惩罚会激励验证者的存在性,而(可能)更大的惩罚会在尾部风险情况下提供协议安全性。

具体来说,存在以下重大惩罚:

  • 不活跃泄漏:对于长时间没有最终确定性的验证者(例如,如果三分之一或更多的验证者离线或不在规范链上),每个 epoch 都会增加的离线惩罚。这可确保即使在灾难性情况下,链最终也能恢复最终确定性。
  • 罚没:对签署_明确恶意_消息的验证者处以惩罚,这些消息可能导致构建和最终确定两条冲突的链(例如,同一插槽中的两个区块或证明)。此惩罚旨在与同一时间段内可罚没的验证者数量成比例地扩大,以便如果发生了关键数量(相对于链安全性)的罚没,则验证者会受到_最大程度_的惩罚。

对于阶段 0 的初始启动,定义这些惩罚力度的参数 —— INACTIVITY_PENALTY_QUOTIENTPROPORTIONAL_SLASHING_MULTIPLIERMIN_SLASHING_PENALTY_QUOTIENT —— 已被调整为低于其最终预期值。这为早期的验证者和客户端软件提供了一个更宽容的环境,以鼓励在此早期、技术风险更高的阶段进行验证。

INACTIVITY_PENALTY_QUOTIENT 最初配置为其最终值的四倍。这导致在非最终性时期内不活跃泄漏速度较慢,这意味着链对此类事件的响应速度较慢。如果在 eth2 的早期几个月内出现长时间的非最终性,则更有可能是由于客户端软件的技术问题,而不是某种全球灾难性事件。

PROPORTIONAL_SLASHING_MULTIPLIER 最初配置为其最终值的三分之一。这导致在发生攻击时,问责安全裕度较低。如果在 eth2 的早期几个月内有任何验证者被罚没,则更有可能是由于用户对密钥的管理不善和/或客户端软件的问题,而不是有组织的攻击。

MIN_SLASHING_PENALTY_QUOTIENT 最初配置为其最终值的四倍。这导致对可罚没的违规行为的保证最低惩罚较低,从而降低了保持单个验证者系统安全的基线惩罚激励。与 PROPORTIONAL_SLASHING_MULTIPLIER 一样,eth2 早期几个月的罚没更有可能是由于用户管理不善或客户端软件问题,而不是有组织的攻击。

理由

原则

  • 简单性:特别是由于密码经济权益证明和二次分片本质上很复杂,因此协议应尽可能地在其决策中追求最大的简单性。这很重要,因为它 (i) 最大程度地降低了开发成本,(ii) 降低了不可预见的安全问题的风险,以及 (iii) 使协议设计者可以更轻松地说服用户参数选择是合理的。当为达到给定的功能级别而不可避免地需要复杂性时,复杂性去向的偏好顺序为:layer 2 协议 > 客户端实现 > 协议规范。
  • 长期稳定性:理想情况下,协议的低层应以无需在十年或更长时间内对其进行更改的方式构建,并且任何所需的创新都可以在更高层(客户端实现或 layer 2 协议)上进行。
  • 充分性:从根本上应可以在协议之上构建尽可能多的应用程序类别。
  • 深度防御:该协议应在各种可能的安全假设(例如,关于网络延迟、故障计数、用户的动机)下继续尽可能好地工作
  • 完全轻客户端可验证性:在给出一些假设(例如,网络延迟、攻击者预算的范围、N 分之一或少数 N 分之一的诚实少数派)的情况下,验证少量固定数据(理想情况下仅信标链)的客户端应能够间接确保完整系统中所有数据的可用性和有效性,即使在 51% 的攻击下也是如此(注意:这是一种深度防御形式,但它足够重要,可以单独存在)

Layer 1 与 Layer 2 的权衡

以太坊路线图使用混合的 layer 1 / layer 2 方法。我们专注于服务于特定类型的 layer 2 (rollups),因为它既继承了 layer 1 的安全性,又提供了通用应用程序的扩展。但是,rollups 确实有成本:它们需要_每个交易_的一些链上数据,因此具有真正高容量 rollups 的区块链必须能够处理仍然相当高的数据带宽。因此,为了使这更可行,我们正在实施可扩展的数据层技术,特别是数据可用性抽样。

不采取纯 layer 2 方法的原因是,纯 layer 2 扩展只能通过基于信任的解决方案(不希望这样做)或通过通道或 plasma(具有固有局限性并且无法支持完整的 EVM)来完成。

不采取纯 layer 1 方法的原因是为了在执行层中腾出更多实验空间,并允许基本协议更简单并具有更少的密集治理。

为什么选择权益证明

简而言之:

  • 无需消耗大量电力 即可保护区块链(例如,据估计,比特币和以太坊每天都要消耗超过 100 万美元的电力和硬件成本,作为其共识机制的一部分)。
  • 由于没有大量电力消耗,因此不需要发行那么多新币,以激励参与者继续参与网络。从理论上甚至有可能实现负净发行,其中一部分交易费用被“销毁”,因此供应量会随着时间的推移而减少。
  • 权益证明为使用博弈论机制设计开启了更广泛的技术阵列,以便更好地阻止中心化卡特尔的形成,并且如果它们确实形成,则以对网络有害的方式采取行动(例如,像工作量证明中的自私挖矿)。
  • 降低了中心化风险,因为规模经济的问题要小得多。1000 万美元的币将获得比 100 万美元的币高 10 倍的回报,而无需任何额外的超比例收益,因为在更高的水平上,您可以负担得起更好的大规模生产设备,这对于工作量证明来说是一种优势。
  • 能够使用经济处罚来使各种形式的 51% 攻击的执行成本远高于工作量证明 - 用 Vlad Zamfir 的话来说,“就好像您的 ASIC 矿场在您参与 51% 攻击时被烧毁了”。

为什么选择 Casper

目前主要有三种权益证明共识算法:

  • Nakamoto-inspired(Peercoin、NXT、Ouroboros…)
  • PBFT-inspired(Tendermint、Casper FFG、Hotstuff…)
  • CBC Casper

在这后两个阵营中,还存在是否以及如何使用安全存款和罚没的问题(Nakamoto-inspired 算法与重要的罚没不兼容)。所有这三种算法都优于工作量证明,但我们想为自己的方法辩护。

罚没

以太坊 2.0 使用一种 罚没 机制,如果检测到验证者行为不当,则可能会受到惩罚,在最佳情况下约为 1%,但在最坏情况下高达其全部存款。

我们为使用罚没辩护如下:

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

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

如果成为拥有主节点和备份节点的标准做法,那么攻击者可以划分网络并让所有验证者的主节点和备份节点都提交到不同的区块,从而导致两个冲突的区块被最终确定。罚没惩罚有助于严重阻止这种做法,从而降低发生此类情况的风险。

共识算法的选择

只有 BFT-inspired 和 CBC 派系的共识算法才具有最终确定性的概念,其中一个区块的确认方式是,需要很大一部分(BFT-inspired 中为 1/3,CBC 中为 1/4)的验证者行为不当并被罚没,以使该区块被推翻,转而支持某些冲突的区块;Nakamoto-inspired(即最长链规则)共识算法无法以这种意义实现最终确定性。

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

我们选择 Casper FFG 仅仅是因为它是当时协议的一部分被最终确定时可用的最简单的算法。详细信息仍然会发生长期变化;特别是,我们正在积极探索实现单插槽最终确定性的解决方案。

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

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

我们反对这种方法的主要原因是:

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

这些中心化风险也是我们 NOT 尝试实现区块链的超低延迟(<1 秒)的原因,而是选择(相对!)保守的数字。

相反,以太坊采用了一种方法,其中每个验证者仅被分配来处理所有数据的一小部分。只有质押大量 ETH(想想:成千上万甚至更多)的验证者才需要处理链中的所有数据。

请注意,分片设计中可能存在一个中间立场,其中区块_生产_是中心化的,但是 (i) 区块_验证_是去中心化的,并且 (ii) 存在用户可以发送交易且区块生产者被迫包括它们的“绕过通道”,因此即使是垄断生产者也无法进行审查。我们正在积极考虑在一定程度上倾向于此方向的分片设计,以提高简单性,以便可以更快地部署扩展,但如果需要,即使在此规范中也可以运行分布式构建器并避免中心化。

安全模型

通常假设区块链的安全性取决于“诚实多数”假设:即 >=50% 的参与者将忠实地遵循规定的协议,即使放弃利用机会以满足其个人利益。实际上,(i) 诚实多数模型是不现实的,参与者“懒惰”并在未验证的情况下签署区块(请参阅 验证者的困境论文 和 Bitcoin SPV 挖矿分叉)是一种非常常见的叛逃形式,但幸运的是 (ii) 区块链在更严格的模型下维护着许多或所有安全属性,并且保留这些额外保证非常重要。

一个常见的更严格的模型是_非协调理性多数_模型,该模型指出参与者以自己的自身利益行事,但不超过某个百分比(例如,在简单的 PoW 链中为 23.21%)相互合作。一个更严格的模型是最坏情况模型,其中存在一个控制超过 50% 的哈希算力或权益的单一参与者,而问题变成了:

  • 即使在这种情况下,我们是否可以迫使攻击者必须付出非常高的代价才能破坏链的保证?
  • 我们可以无条件地维护哪些保证?

权益证明链中的罚没实现了第一个目标。在非分片链中,每个节点验证每个区块实现了第二个目标的两个特定保证:(i)最长链是有效的,并且(ii)最长链是_可用的_。

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

客户端可能会以共识保持的方式检测到对交易的审查,但是此研究尚未纳入以太坊路线图。

以下是以表格形式表达的当前预期安全属性:

  网络延迟 <3s 网络延迟 3s - 6 分钟 网络延迟 > 6 分钟
>2/3 验证者诚实 完美运行 不完美但可接受的运行。没有严格的存活性证明,但预计在实践中会有存活性。 可能出现间歇性存活性故障,没有安全性故障
>2/3 验证者理性,<1/3 协调 完美运行 不完美但可接受的运行,中心化风险增加 可能出现间歇性存活性故障,没有安全性故障,中心化风险非常高
51% 攻击者 可以以高昂的代价撤销最终确定性或审查;无法强制通过无效或不可用的链 可以以高昂的代价撤销最终确定性或审查;无法强制通过无效或不可用的链 可以撤销最终确定性或审查;无法强制通过无效或不可用的链

为什么 Casper 激励措施的设置方式如此?

基本奖励

在每个 epoch 中,每个验证者都应进行“证明”,该签名表示该验证者对链头的看法。包含一个人的证明会获得奖励,其中包含四个组成部分(称为“职责”):

  1. 完全包含证明的奖励
  2. 证明指定正确的 epoch 检查点的奖励
  3. 证明指定正确的链头的奖励
  4. 正确参与同步委员会签名的奖励

另请注意,这些职责中还混合了及时性要求:您的证明必须在特定时间内包含在内才能获得奖励,并且对于“正确链头”职责,该时间限制为 1 个插槽。

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

  • $R = B * \frac{nom}{den}$ 等于基本奖励乘以与该特定职责相对应的分数 $\frac{nom}{den}$
  • $P$ 是执行所需操作的验证者的比例

然后:

  • 任何履行职责的验证者都会获得 $R * P$ 的奖励
  • 任何未履行职责的验证者都会受到 $-R$ 的惩罚

这种“集体奖励”计划(即“如果任何人表现更好,每个人都会表现更好”)的目的是限制悲伤因素(有关悲伤因素及其重要性的描述,请参阅 本文)。

基本奖励 $B$ 本身计算为 $k * \frac{D_i}{\sqrt{\sum_{j=1}^{n} D_j}}$,其中 $D_1 … D_n$ 是存款大小,$k$ 是一个常数; 这是两种常见模型之间的折衷方案,(i) 固定奖励率,即 $k * D_i$, 和 (ii) 固定总奖励,即 $k * \frac{D_i}{\sum_{j=1}^{n} D_j}$。

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

当一个证明获得奖励时,提议者会获得一部分该奖励。这是为了鼓励提议者好好地听取消息并尽可能多地接受。

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

不活跃泄漏

如果链未能最终确定 $tsf > 4$ 个 epoch($tsf$ = “自最终确定以来的时间”),那么将增加一个惩罚,以便最大可能的奖励为零(表现不佳的验证者会受到惩罚),并且会添加第二个与 $tsf$ 成比例的惩罚组件(也就是说,链未最终确定的时间越长,离线的_每个 epoch_ 惩罚越高)。这可确保如果超过 1/3 的验证者退出,则未在线的验证者会受到更严厉的惩罚,并且总惩罚会随着时间的推移呈二次方增长。

这有三个后果:

  • 在您离线实际上阻止区块最终确定的情况下,会更严重地惩罚离线行为
  • 符合作为反相关惩罚的目标(请参阅下面的部分)
  • 确保如果超过 1/3 的人确实离线了,那么由于离线验证者的存款减少,在线比例最终会恢复到 2/3

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

罚没和反相关惩罚

如果发现验证者违反了 Casper FFG 罚没条件,则会受到惩罚,其存款的一部分等于大约在同一时间段内(具体来说,在受到惩罚之前 18 天到大约提款时)受到惩罚的验证者比例的三倍。这受到以下几个目标的推动:

  • 如果验证者与许多其他验证者同时行为不当,那么验证者的行为不当实际上对网络才是最糟糕的,因此在这种情况下,惩罚他们更多是有道理的
  • 它会严厉惩罚实际的攻击,但会对可能诚实犯下的单一孤立故障施加非常轻微的惩罚
  • 它可以确保较小的验证者承担的风险低于较大的验证者(因为在正常情况下,较大的验证者将是唯一与自己同时失败的验证者)
  • 它会产生一种阻止每个人加入最大矿池的动机

BLS 签名

使用 BLS 签名是因为它们的可聚合性:消息 $M$ 的任意两个签名 $S_1$ 和 $S_2$ 由密钥 $k_1$ 和 $k_2$ 签名(对应于公钥 $K_1 = G * k_1$ 和 $K_2 = G * k_2$,其中 $G$ 是椭圆曲线的生成器)可以简单地通过椭圆曲线点加法进行聚合:$S_1 + S_2$,它针对公钥 $K_1 + K_2$ 进行验证。这允许聚合数千个签名,其中一个签名的边际成本是一个数据位(表示特定公钥存在于聚合签名中)和一个用于计算的椭圆曲线加法。

请注意,这种形式的 BLS 签名容易受到_流氓密钥攻击_:如果您看到其他验证者已经发布了公钥 $K_1 … K_n$,那么您可以生成一个私钥 $r$ 并发布一个公钥 $G * r - K_1 - … - K_n$。聚合的公钥将只是 $G * r$,因此您将能够自己创建一个针对组合公钥验证的签名。解决此问题的标准方法是要求_所有权证明_:基本上,是对消息的签名(该消息取决于公钥,并且通常不会签名)本身会针对公钥进行验证(即对于私钥 $k$ 和公钥 $K$,为 $sign(message=H’(K), key=k)$,其中 $H’$ 是哈希函数)。这可确保您亲自控制与您发布的公钥关联的私钥。

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

为什么选择 32 ETH 验证者大小?

任何具有可靠容错(即可靠识别哪些 1/3 的节点负责)的 BFT 共识算法都必须让所有验证者都参与,而且出于技术原因,您需要每一位验证者参与两轮才能最终确定一条消息。

这导致了去中心化/最终确定时间/开销的权衡:如果 $n$ 是网络中验证者的数量,$f$ 是最终确定区块的时间,而 $\omega$ 是每秒消息的开销,那么我们有:

\[\omega \ge \frac{2 * n}{f}\]

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

在以太坊的案例中,如果我们假设 ETH 的总供应量为 $\approx 2^{27}$ ETH,那么对于 32 ETH 的存款大小,最多有 $2^{22}$ 个验证者(如果每个人都验证;通常我们预计 ~10 倍更少的 ETH 验证)。为最终确定时间 2 个 epoch (2 * 32 * 12 = 768 秒),这意味着最大开销为 $\frac{2^{22}}{768} \approx 5461$ 条消息每秒。由于 BLS 聚合将每个签名的边际大小减少到 1 位并将边际验证复杂性减少到一个椭圆曲线加法运算,因此我们可以容忍如此高的开销。

32 个插槽是另一个原因的安全最小值:如果攻击者操纵用于提议者选择的随机性,则此数字仍然提供足够的空间以确保每个 epoch 中至少有一个诚实的提议者,这足以确保区块保持最终确定。我们的计算表明,当前的开销水平是可以接受的,但更高的水平会使运行节点变得太困难。最后,验证者存款大小是分片交叉链接的理想选择(请参阅下文)。

随机抽样

种子选择

用于随机性的种子由区块的提议者通过“混合”(即 seed <- xor(seed, new_data)) 必须揭示的值来更新。就像托管子密钥的证明一样,验证者的值一旦验证者已存入,第三方就无法计算子密钥,但可以验证自愿披露的子密钥(此机制有时称为 RANDAO),验证者的值都是预先确定的。

这确保了每个提议者对种子都有一个“位操作”:“他们可以制造一个区块也可以不制造一个区块”。不制造区块的代价很高,因为提议者会错过许多奖励。此外,由于持久委员会和信标委员会的大小(请参阅下文)很大,因此几乎可以肯定的是,操纵随机性无法使少数攻击者获得任何委员会的 2/3。

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

混洗

我们使用* 由于洗牌是一种排列,因此每个验证者都被分配为每个 epoch 中一个委员会的成员(保持他们的负载稳定并降低操纵随机性可能有利可图的机会)

  • 由于洗牌可以在正向方向上进行点式评估,因此验证者可以在 O(1) 时间内确定自己的职责
  • 由于洗牌可以在反向方向上进行点式评估,因此任何特定委员会的成员或任何特定区块的提议者都可以在 O(1) 时间内计算出来

按 slot 洗牌

一个 epoch 中有 32 个 slot,负责证明每个 slot 的验证者通过洗牌选择。这确保了拥有大量但仍然很小的总权益的攻击者无法接管特定的 slot 并导致短程重组。

信标委员会

每个 slot 的委员会又被分成若干个_信标委员会_。今天(2022 年 1 月),这种设计确实起到一个有用的作用,允许在单独的子网中聚合不同子集的证明,从而提高 p2p 网络的效率。然而,它并没有发挥任何其他有用的与共识相关的角色。

在最初的分片设计中,意图是每个信标委员会负责验证特定的分片。但是,如果我们切换到单一提议者模型,这种方法很可能被弃用。因此,更细粒度的信标委员会很可能只是残余存在,最终可能会被删除或以不同的方式重新构建,以专注于促进证明聚合。

同步委员会

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

LMD GHOST 分叉选择规则

信标链使用 LMD GHOST 分叉选择规则。

LMD GHOST 分叉选择规则纳入了来自所有验证者的信息,每个 slot 中有数百个验证者,这使得在正常情况下,即使是单个区块被回滚的可能性也极低。由于分叉选择依赖于所有验证者,这也确保了除非攻击者真正控制了接近 50% 的整个验证者集合,否则区块无法被回滚;不能通过操纵随机性来获得很大的优势。

托管证明游戏

对于每个 9 天的周期,每个验证者都可以私下生成一个“周期子密钥”。验证者的公钥唯一地决定了他们在每个周期中的周期子密钥,因此一旦验证者存入了资金,他们就不能再自由选择他们的子密钥是什么。除了验证者自己之外,没有人可以计算出任何给定验证者的子密钥,但是一旦验证者自愿公开了一个子密钥,任何人都可以验证它的正确性(所有这些都是通过 BLS 魔法完成的,如果将来需要量子安全,则可以使用基于哈希的承诺来完成)。

当在周期 $j$ 期间用数据 $D$ 和根 $R$ 签署一个区块时,假设 $s$ 是该验证者的周期-$j$ 密钥,则验证者需要计算一个位域 $M$ 如下:

  • 将 $D$ 分割成 512 字节的块 $D[0] … D[n-1]$
  • 将 $M$ 设置为位域,其中第 i 位是 $M[i] = mix(s, D[i])$

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

如果一个跨链包括多个区块 $B_1 … B_n$,并且验证者计算了这些区块的托管位 $c_1 … c_n$,那么验证者签署所有 $(B_i, c_i, i)$ 元组并将它们聚合起来。这种非常规的自我聚合用于确保只有 $2n$ 个不同的消息(n 个不同的区块/索引对 * 2 个不同的位值)被不同的验证者签署,从而减少了验证签名所需的配对数量。

如果一个验证者在周期 $j$ 期间或之前发布了他们的周期 $j$ 子密钥,那么任何其他验证者都可以向链上发布子密钥的知识证明,这会惩罚泄露了子密钥的验证者。知识证明还可以证明是哪个验证者创建了它;这可以防止区块提议者“窃取”告密奖励(再次通过BLS魔法完成,如果将来需要量子安全,这可以使用 STARK 来完成)。这样做的目的是使外包 $M$ 的计算变得危险。

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

这种机制的目的是缓解 验证者的困境 问题,在这种情况下,验证者有动机为了懒惰而避免验证数据,并且搭便车地假设所有_其他_验证者都是诚实的;如果太多的验证者以这种方式思考,可能会导致公地悲剧,导致链接受无效的区块。有了这个方案,如果一个验证者试图提交他们没有亲自处理的数据,那么他们将无法计算 $M$,因此将输掉互动挑战游戏。

SSZ

SimpleSerialize 套件包含以下算法:

  • 一种序列化算法
  • 一种哈希算法(称为 SSZTreeHashhash_tree_root
  • 一种广义的 Merkle 证明算法(称为“SSZ partials”),可以处理多个值的证明,并在这种情况下以最佳方式消除 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 \ge 4$ 个 epoch 后变为活动状态;最小值为 4 是为了确保 RANDAO 不可操纵,如果太多验证者同时尝试加入,则 $N$ 可能会超过 4。如果活动验证者集合的大小为 $ V $,则每个 epoch 最多可以加入 $max(4, \frac{ V }{65536})$ 个验证者;如果有更多验证者尝试加入,则他们将被放入队列并尽快处理。

退出

当一个验证者退出时(无论是通过发布自愿退出消息还是被削减),他们也会被放入一个退出队列,具有相同的最大吞吐量。

入口/出口队列限制的原因是确保验证者集合在任意两个时间点之间不会变化太快,这确保了只要验证者登录的频率足够高(如果 $ V \ge 262144$,则大约每 1-2 个月一次),两个链之间的最终性保证仍然存在。有关基本原理,请参见 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;这使得对于试图破坏以太坊区块链的恶意验证者的惩罚比那些想要支持平台但只是犯了一个错误的验证者的惩罚更大,因为前者必须冒着暴露的风险或支付衍生品来抵消它),但也允许计算出其他被削减权益的验证者的数量的时间段。

在 phase 0 中,“已提款”的验证者实际上还不能提款到任何地方;唯一的区别是它受到保护,免受验证者惩罚,并且没有任何责任。在后面的阶段中,将提供将资金从已提款的验证者 slot 转移到执行环境的能力。

有效余额

大多数基于验证者余额的计算都使用验证者的“有效余额”;唯一的例外是增加或减少验证者余额的计算。只有当验证者的余额 $B$ 降至 $EB$ 以下或高于 $EB + 1.5$ 时,才会将 $EB$ 调整为等于 $floor(B)$。这样做是为了确保有效余额不经常变化,从而减少了每个 epoch 重新计算状态所需的哈希量;平均而言,只需要更新余额,并且每个验证者的有效余额仅相对较少地更新。余额都存储在一个专用的向量中,因此重新计算余额数组需要 $2 * \frac{N * 8}{32} = \frac{N}{2}$ 个哈希,而有效余额存储在验证者记录对象中,其中每个验证者至少需要 $5N$ 个哈希来调整 SSZ 哈希根。此外,$EB$ 可以更容易地压缩到 CompactValidator 对象中,因为它只有一个字节。

分叉机制

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

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

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

向后兼容性

尽管此 EIP 没有对当前的以太坊主网引入任何直接更改,但此 EIP 通过引入新的 eth2 共识机制为未来的向后不兼容奠定了基础,以太坊将在后续阶段集成到该机制中。为了保护此机制,用户将以太币移动到信标链,并发行额外的以太币。此 EIP 承诺此路径是规范的,并且直接通知以太坊主网的未来和路线图。

安全考虑

Eth2 是以太坊核心共识从 PoW 到分片 PoS 的重大改革。这种迁移存在固有的风险,但有大量的研究文献分析了安全性和权衡。以下仅代表可用的高级资源选择:

除了支持该路径的研究之外,还对规范、密码学和客户端实现进行了多次审计和形式验证。许多客户端和实用程序库审计目前正在进行中,并将在此处完成后附加。

版权

通过 CC0 放弃版权和相关权利。

Citation

Please cite this document as:

, "EIP-: ```md," Ethereum Improvement Proposals, no. , . [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-.