一文详解ETH 2.0
摘要: 世界上从未有过可扩展的去中心化系统。
文章来源:The Beacon Chain Ethereum 2.0
翻译:swifter
想弄明白以太坊2.0,就要弄明白信标链;想弄明白信标链,对分片、时隙、纪元、验证器、认证和信标链的充分理解就非常重要。
分片 Sharding
包括以太坊在内的区块链项目,目前都普遍面临“可扩展性”的问题:每个节点都必须验证并执行网络中的每笔交易(这种执行的消耗是非常昂贵的)。
目前有两种主要的扩容方法:
-
垂直扩容,增强节点性能
-
水平扩容,增加节点数量
而对于去中心化系统,区块链需要横向扩展。以太坊2.0的目标是让节点能在消费级硬件(指的是容易买到,并且性能较高的硬件产品)上运行,因此就诞生了对数据库水平拆分的技术,也就是分片。
通常来说,分片链都有各自仅处理它的任务的节点子集——虚拟矿工、验证器被分配到分片,并且只处理和验证该分片(链)中的交易。
以太坊的分片链有很多动态节点合集(静态:手动添加创建,动态:后台代码帮你实现数据绑定),并且在不同的区块高度分片上的节点集不同。因此,分片的主要挑战就是安全性——由于验证器是被随机组合分布于多个分片中的,那就有一定的概率会出现,许多恶意验证器被同时分配到单个分片。
对此,项目方想了个法子:
每个分片区块都被安插了一个(伪)随机的验证者委员会,以此确保所有验证器中只有少于 1/3 的攻击者。
在以太坊2.0中,最初会有64个分片,每一个分片都可以看作是一条独立的“新链”。而信标链作为枢纽链,将会成为分片与其他64个分片进行双向沟通、信息传递,从而使跨分片交易顺利进行。
Slots and Epochs(时隙和纪元)
信标链被誉为以太坊 2.0的心跳,它为系统的和谐与共识提供了节拍、节奏,每个时隙为 12 秒,一个纪元为 32 个时隙,即 6.4 分钟。
slot是将区块添加到信标链和分片的时间间隔。你可以想象信标链和分片链是同步编排的,当系统处于最佳运行状态时,每12 秒添加 1 个信标(链)块和 64 个分片块。
一个slot就是一个区块时间(slot可以是空的)。信标链和分片的创世块位于 Slot 0。分片将在比信标链的 Epoch 0 更远的 Epoch 开始,但同时也会有自己的 Epoch 0,其中也包括创世块。
Validators, Attestations, and the Beacon Chain(验证器、认证和信标链)
原理上,工作量证明 (PoW) 和矿工有关。但在以太坊2.0 中,验证器就是权益证明的"虚拟矿工"。他们的激励措施稍后将在 Staking Rewards and Penalties 中讨论。
区块提议者是被伪随机选择来构建区块的验证者,有时候,他们也是对信标块和分片块进行投票的证明者。这些投票会被记录在信标链中(投票决定了信标链的头部和分片的头部)。
在每个纪元,一个验证器被伪随机分配到一个slot和分片。验证者需要参与该分片链的共识并投票给该分片的头部,然后,验证器会将分片头链接到一个slot的信标块。
验证者通过余额加权投票来证明,然后再通过广播证明。
验证者之间可以相互监督,并通过报告其他投票冲突或提出多个区块的验证者而获得奖励。
信标链主要分为:验证者地址、每个验证者的状态、验证者提交的证明和与分片建立的链接。
验证器作为ETH2.0上的虚拟矿工,由ETH的质押者在2.0的网络上激活。好比在 PoW 中,用户通过购买硬件成为矿工;而在以太坊 2.0 中,用户通过质押 ETH 以激活和控制验证器。
将质押者与权益相关联,将验证器与账户余额相关联会更清晰。每个验证器的最大余额为 32 ETH,但质押者可以质押他们所有的 ETH。每抵押 32 个 ETH,就会激活一个验证器。
-
验证由使用信标(链)节点的验证器客户端执行。
-
信标节点具有跟踪和读取信标链的功能。
-
验证器客户端可以实现信标节点功能或调用信标节点。
-
一个验证器客户端可以执行一个或多个验证器。
Crosslinks: Rooting Shards to
the Beacon Chain(交叉连接:将分片扎根到信标链)
所有分片链始终遵循信标链的共识。交叉连接是信标块中对分片块的引用,是信标链保持跟随分片链头部的方式。由于有 64 个分片,每个信标块最多可以包含 64 个交联。一个信标块可能只有一个交叉连接,如果在那个slot,没有其他 63 个分片链的块。Eth2 Phase 1 计划进行交联,将分片链嫁接到到信标链中,作为分叉连接、分片链确定性和跨分片通信的基础。
Committees(委员会)
委员会是验证者的集合。为了安全起见,每个slot(在信标链和每个分片中)都有至少 128 个验证者的委员会。信标链在称为 RANDAO 的伪随机过程上强制达成共识,并以以太坊信标链的名字命名向公众发出随机数的随机信标的概念。
总的来说,攻击者获得委员会 ⅔ 控制权的可能性不到万亿分之一。
在每个slot,一个伪随机过程 RANDAO 为每个时隙选择提议者,并将验证者随机分配给委员会。提议者由 RANDAO 选择,并在验证器账户的余额上加权。验证者可能是同一 slot 的提议者和委员会成员,但这不是常态。这种情况发生的概率是 1/32,所以我们每个 epoch 都会看到它一次。上图描绘了一个验证者少于 8,192 人的场景,否则每个slot将至少有两个委员会。
这份对于信标链的解释侧重于信标委员会:为信标链服务的验证者。委员会被伪随机分配了一个分片以交叉链接到信标块(没有固定成员的委员会),负责交联分片块的委员会会随区块高度变更。
单独构建分片链块的分片委员会是一个未来的话题。许多分片区块可能由不与信标链交互的分片链验证者构建。但是如果需要一个分片与其他分片进行通信,它就需要一个信标委员会将其与信标块进行交叉链接。
该图是对三个 slot 中发生的事情的综合描述。在 Slot 1 中,提出一个区块,然后由两个验证者证明;A 委员会的一名验证者离线。Slot 1 处的证明和块传播网络并到达许多验证者。在 Slot 2 中,提出了一个区块,B 委员会的验证器没有看到它,因此它证明信标链头是 Slot 1 的块。 注意这个验证器不同于 Slot 1 的离线验证器。信标链头被称为 LMD GHOST 投票。在 Slot 3 中,C 委员会中的所有验证者都运行 LMD GHOST 分叉选择规则,并独立证明同一个头部。
一个验证者每个 epoch 只能在一个委员会中。通常,有超过 8,192 个验证者:这意味着每个 slot 有多个委员会。所有委员会的规模相同,并且至少有 128 名验证者。当验证者个数少于 4,096 时,安全性会降低,因为单个委员会的验证者少于 128 个。
在每个epoch,验证者都被均匀地分配到 slot 中,然后再细分为适当大小的委员会。该 slot 中的所有验证器都需要证明信标链头。该 slot 中的每个委员会都试图交叉链接一个特定的分片。重组算法会增加或减少每个插槽的委员会数量,以获得每个委员会至少 128 个验证者。
例如,假设有 16,384 个验证器。512 个验证者被伪随机分配到slot 1,另外 512 个验证者被分配到slot 2,依此类推。然后,Slot 1 的 512 个验证者被细分为四个委员会,并伪随机地分配给分片。假设分片 33、55、22、11 是分片分配。所有 512 个验证者都投了 Slot 1 LMD GHOST 投票。四个委员会之一的 128 名验证者试图交叉链接分片 33。在另一个委员会中,128 名验证者试图交叉链接分片 55。另一个委员会中的 128 名验证者试图交叉链接分片 22。另外 128 名验证者试图交叉链接分片 11。
对于Slot 2,重复该过程。Slot 2 的 512 个验证者被细分为四个委员会,并伪随机分配给分片。假设分片 41、20、17、15 是分片分配。Slot 2 的所有 512 个验证者都证明了他们对 Slot 2 信标链头的看法。委员会试图交叉链接分片 41、20、17、15。
该过程对 epoch 中的剩余 Slot 重复。每个验证者都有一个可以发言、证明和交联的 Slot。在 epoch 结束时,所有 16,384 名验证者都有机会进行证明和交联。但到目前为止,验证者投票是针对特定 Slot 的,而不是针对特定Epoch的。这就像为当地政府投票,而不是在更广泛的全国选举中投票。所有 16,384 名验证者都没有对同一件事进行投票。即将到来的关于检查点和终结性的部分描述了验证者在他们发言时所投的特定 Slot 的投票。在他们分配的Slot,所有 16,384 名验证者也投票支持 epoch 的检查点。
Beacon Chain Checkpoints
检查点是一个 epoch 第一个 slot 中的一个块。如果没有这样的块,则检查点是前一个最近的块。每个 epoch 总是有一个检查点块。一个区块可以是多个 epoch 的检查点。
注意Slot 65 到Slot 128 是空的。Epoch 2 检查点应该是 Slot 128 的块。由于 Slot 丢失,Epoch 2 检查点是 Slot 64 的前一个块。Epoch 3 类似:Slot 192 是空的,因此 Slot 180 的前一个块是Epoch 3 检查点。
Epoch 边界块 (EBB) 是一些文献中的一个术语(例如 Gasper 论文,上图的来源和后来的一个),它们可以被认为是检查点的同义词。
在进行 LMD GHOST 投票时,验证者还会为其当前时期的检查点投票,称为目标。此投票称为 Casper FFG 投票,还包括一个先前的检查点,称为源。在图中,Epoch 1 中的验证者投票支持了创世区块的源检查点,以及 Slot 64 中块的目标检查点。在 Epoch 2 中,同一验证者投票支持相同的检查点。只有分配到某个插槽的验证者才会对该插槽投下 LMD GHOST 投票。但是,所有验证者都为每个 epoch 检查点投了 FFG 投票。
Supermajority
由所有活跃验证者总余额的 ⅔ 进行的投票被视为绝对多数。在教学上,假设有三个活跃的验证者:两个有 8 个 ETH 的余额,一个唯一的验证者有 32 个 ETH 的余额。绝对多数票必须包含唯一验证者的投票:尽管其他两个验证者可能会投票给唯一验证者,但他们没有足够的余额来组成绝对多数。
Finality
当一个 Epoch 结束时,如果它的检查点获得了 ⅔ 绝对多数,则该检查点是合理的。
如果检查点 B 是合理的,并且紧接下一个 epoch 中的检查点变得合理,则 B 成为最终确定的。通常,一个检查点在两个 epoch 内完成,即 12.8 分钟。
平均而言,用户交易将在一个时期的中间发生在一个区块中。距离下一个检查点还有半个 epoch,这表明交易终结时间为 2.5 个 epoch:16 分钟。最理想的情况是,一个 Epoch 的第 22 个 Slot 将包含超过 ⅔ 的证明。因此,交易终结平均为 14 分钟(16+32+22 个slot)。区块确认来自区块的证明提交、证明验证、最终确定。用例可以决定它们是否需要终结性或较早的安全阈值就足够了。
这是一个 Slot64 作为一个检查点获得 2/3 的大多数验证者同意,然后前一个检查点达到最终状态的例子。
信标链头发生了什么?
Epoch 边界块在 Slot 96 处被提出的,其中包含epoch 2 检查点的证明。Epoch 2 检查点的证明数量现在达到了 ⅔ 的绝对多数。这会导致 Epoch 2 检查点的对齐,从而导致先前已对齐的 Epoch 1 检查点的终结。Slot 32 的终结立即导致它之前的所有块的终结。在完成检查点时,可以完成的块数量没有限制。尽管最终性仅在 epoch 边界处计算,但证明会在每个区块中累积,如下面的替代叙述“从起源到头部可能发生的事情”中所述。
从 Slot 1 到 Slot 32 的信标块中包含的所有交联将导致分片链的终结。换句话说,当一个分片块被交联成一个最终确定的信标块时,它才被最终确定。交联本身不足以确定分片区块,但有助于分片链的分叉选择。
从创世块到头部块会发生什么?
参照上面的最后一幅插图,这是一个可以从创世块到当前块的中故事情节。从 Slot 1 到 Slot 63 的所有提议者都提出了一个区块,并且这些都出现在链上。对于 Epoch 1 中的每个区块,其检查点(位于 Slot 32 的区块)累积了 55% 验证者的证明。Slot 64 的块包括对 Epoch 1 检查点的证明。现在,70% 的验证者已经证明了 Epoch 1 检查点:这证实了它的合理性。Epoch 2 检查点(Slot 64)在整个 Epoch 2 中积累证明,但没有达到 ⅔ 绝对多数。Slot 96 的块包括了对 Epoch 2 检查点的证明。这证实了达到 ⅔ 绝对多数和 Epoch 2 检查点的合理性。证明 Epoch 2 检查点最终确定了 Epoch 1 检查点和所有先前的块。
这是另一种可能的情况。仅考虑到 Epoch 1。在提出 Epoch 2 的检查点之前,Epoch 1 的检查点可能已经获得 ⅔ 绝对多数。例如,当 Slot 32 到 Slot 54 中的块被提出时,证明检查点(Slot 32)合理的证明可能已经达到了 ⅔ 绝对多数。在这种情况下,检查点将在 Epoch 2 之前被证明。检查点可以在其当前 epoch 被证明,但它的最终确定至少需要它之后的 epoch。
最终确定对于分片和以太坊区块链各方对交易进行保证至关重要。最终性降低了跨分片通信的复杂性。如果没有最终确定性,分片内和分片之间的事务级联回滚将是破坏性的,并且可能会抵消分片的好处。
Attestations: a closer look
证明包含 LMD GHOST 投票和 FFG 投票。最理想的是,所有验证者在每个 epoch 提交一个证明。一个证明有 32 次机会被包含在链上。这意味着一个验证者可能在一个 epoch 中包含两个链上证明。当验证者的证明被包含在其指定位置的链上时,他们将获得最多的奖励;后来加入是一种衰减的奖励。为了给验证者时间做准备,他们提前一个 epoch 分配给委员会。提议者仅在 epoch 开始后才被分配到 Slot。尽管如此,秘密领导人选举研究旨在减轻对提议者的攻击或贿赂。
委员会允许将来自每个证明者的签名组合成单个聚合签名的技术优化。当同一委员会中的验证者进行相同的 LMD GHOST 和 FFG 投票时,他们的签名可以聚合。
Staking Rewards and Penalties
-
证明奖励attester rewards
-
证明惩罚attester penalties
-
质押奖励的下行风险
-
作弊惩罚和举报奖励
-
提议者奖励
-
不活跃验证者惩罚
详述如下:
-
验证者通过做出大多数其他验证者同意的证明(LMD GHOST 和 FFG 投票)而获得奖励。在 eth2 第一阶段,验证者也将获得交联奖励。最终区块中的证明更有价值。
-
另一方面,验证者会因未证明或证明未最终确定的区块而受到处罚。
-
在概述不太常见的惩罚和奖励之前,您可能想了解成为抵押者的不利风险。作为关注您可能会损失多少 ETH 的质押者,这几乎是您可以赚取多少的一面镜子。例如,如果验证者在一年内从证明者奖励中赚取 10%,那么(诚实的)验证者如果做得最糟糕,他们将损失 7.5%。始终离线或始终对未最终确定的区块进行投票的验证者将受到 3/4 的处罚,该金额是验证者因准时完成最终证明而获得的奖励金额的 3/4。365 天的示例意味着离线几天或几周的惩罚要小得多:离线 36 天将损失约 0.75%(除非存在下面 #6 中描述的不活动泄漏)。
-
Slashings 是惩罚,范围从超过 0.5 ETH 到验证者的全部质押。一个诚实、安全的验证者的奖励不会被其他验证者的行为所削减。对于符合惩罚要求的行为,验证者会失去至少 1/32 的余额并被停用(“强制退出”)。验证器将受到惩罚,就好像它在 8,192 个 epoch 中处于离线状态一样。该协议还根据几乎同时被削减的其他人的数量施加了额外的惩罚.额外惩罚的基本公式是:validator_balance * 3 * fraction_of_validators_slashed。一个影响是,如果所有验证者中有 1/3 在相似的时间内犯下可削减的罪行,他们将失去全部余额。报告攻击的验证者将获得举报人的奖励。
-
最终确定的区块的提议者获得可观的奖励。始终在线做得很好的验证者因提出具有新证明的区块而获得的总奖励增加了约 1/8。当发生惩罚时,提议者也会因在区块中包含惩罚证据而获得小额奖励。在 eth2 阶段 0 中,所有举报人的奖励实际上都流向了提议者。
-
以太坊 2.0 是一个具有许多机制的系统,其中一些机制可以通过它们的整体效果得到更多的理解。设计的奖励和惩罚最终导致不活动泄漏惩罚。与#3 中的典型风险不同,这是严重且罕见的。基本上,如果自最终确定以来已经超过四个 epoch,验证者将遭受不活动惩罚,该惩罚以二次方增加,直到检查点最终确定。不活动惩罚(或“二次泄漏”)保证了这种类型的结果:如果 50% 的验证者掉线,则区块将在 18 天后再次开始最终确定。二次泄漏将有问题的验证者排到强制退出,这样其他验证者将成为可以恢复最终确定性的 ⅔ 多数。不活动泄漏不会耗尽运行最佳的验证器。在不活动泄漏期间,证明者奖励为零;验证者像往常一样获得提议者和举报人的奖励。
Slashable Offences
验证者有三个削减条件。它们可以被描述为双重提案、FFG 环绕投票和 FFG 双重投票:
-
双重提议是提议者为其分配的 Slot 提议多个区块。
-
环绕投票是验证者投出的 FFG 投票围绕或被他们之前所做的 FFG 投票包围。以下是基于验证者在 Epoch 5 中使用 Slot 32 的源和 Slot 128 的目标进行 FFG 投票的场景的两个示例:
--在 Epoch 6 中以 Slot 64 为源和 Slot 96 为目标的 FFG 投票将是被其 Epoch 5 投票包围的 FFG 投票。
--在 Epoch 6 中以 Slot 0 为源和 Slot 160 为目标的 FFG 投票将围绕他们在 Epoch 5 中的 FFG 投票。
-
双重投票是验证者在同一时期为任意两个目标投 2 次 FFG 投票。这可能发生在分叉期间。
蓝色箭头是两个 FFG 投票,一个投票给左分叉上 Slot 128 上的目标块,另一个投票给右分叉上 Slot 128 上的目标块。一个同时投两票的验证者犯了一种称为双重投票的可惩罚行为。上面是一个双重投票的例子,其中源检查点不同。
接下来是一个双重投票源相同(Epoch 0 checkpoint),目标不同的场景。
上分叉有一个 Epoch 1 检查点“block 64”。下分叉有一个 Epoch 1 检查点“block 63”。(因为在下分叉的 Slot 64 没有提议区块;回顾一下信标链检查点部分的内容。)投票给“block 64”的 Epoch 1 目标和“block 63”的 Epoch 1 目标是双重的 投票。双重投票是指验证者在同一 epoch 为两个目标投出 FFG 投票。
一个举报验证者需要包括相互冲突的投票来证明另一个验证者应该被惩罚。在大量历史数据中有效地找到相互冲突的投票是算法和数据结构的挑战。
验证器可以完全控制以避免被惩罚:它只需要记住它签署的内容。诚实的验证者不能被其他验证者的行为惩罚。只要验证者没有签署冲突的证明或提案,验证者就不会被惩罚。
验证器客户端可以使用多个信标节点来实现更好的正常运行时间、信任和离线保护等因素。在这些设置中,或者在使用备份验证器客户端的情况下,用户需要注意验证器不会签署冲突消息。
Beacon Chain Validator Activation and Lifecycle
每个验证器需要 32 ETH 的余额才能激活。用户将 32 ETH 质押到以太坊主网上的存款合约中,将激活一个验证器。
信标链停用(“强制退出”)所有余额达到 16 ETH 的验证器;质押者将能够提取任何剩余的验证器余额,但不能在 eth2 阶段 0 中提取。
验证者也可以在服务 2,048 个 epoch,大约 9 天后“自愿退出”。
在任何自愿或强制退出的情况下,质押者在撤回其股权之前都有四个时期的延迟。在这四个 epoch 内,验证者仍然可以被捕获和削减。诚实验证者的余额可在大约 27 小时内提取。但是被削减的验证器会导致 8,192 个 epoch(大约 36 天)的延迟。
为了避免在短时间内对验证器集进行大的更改,有一些机制限制了在一个 epoch 内可以激活或退出的验证器数量。例如,这些使得快速激活许多验证器来攻击系统变得更加困难。
信标链使用更深层次的有效余额概念,与验证者余额相比,它的变化频率更低,并支持技术优化。
Wrapping Up
在每个 epoch,验证者被均匀地分配到槽中,然后再细分为适当大小的委员会。验证者只能在一个插槽和一个委员会中。
-
一个 epoch 中的所有验证者都试图完成同一个检查点:FFG 投票
-
分配给一个 slot 的所有验证者都尝试对同一个信标链头进行投票:LMD GHOST 投票
-
分配给同一个委员会的所有验证器都试图交叉链接特定的分片
最优行为对验证者的奖励最多
信标链的激活在创世时至少需要 16,384 个验证者。验证者的数量可以通过削减或自愿退出来减少,或者可以激活更多质押者。随着系统升级到 eth2 阶段 1 及以后,预计会有更多的验证器。信标链至少需要 262,144 个验证者(超过 800 万个 ETH 质押)才能拥有包含 64 个交联的区块。
世界上从未有过可扩展的去中心化系统。
作者:探索实验室;来自链得得内容开放平台“得得号”,本文仅代表作者观点,不代表链得得官方立场凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责得得号平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请联系微信:chaindd123。
评论(0)
Oh! no
您是否确认要删除该条评论吗?