科普

Eth2 Staking 指南 #2

Ajian   |     |   860 次阅读

Eth2 Staking 指南 #0
Eth2 Staking 指南 #1:激励机制


编者注:文章将 FLP 不可能定理转述为三元悖论的形式,令人费解;对 ”异步“ 概念的运用,也与其本身的解释不符。不用这么做也可以把文章里面的内容都解释清楚的。一个相对中规中矩的对 FLP 定理的描述,见 《分布式共识的工作原理,Part-2》;对 Eth2 所用的 FFG 的更详细描述,可见《以太坊 2.0 :合理化与确定性》。

衷心感谢 Sacha Yves Saint-Leger 和 Danny Ryan 的审读。

在这篇文章中,我们要讨论 Eth2 背后的共识机制。Eth2 有一套精妙的方法来确定哪个区块才是主链的顶端,以及哪个区块应该算或者不算是主链的一部分。

经由混合两种机制,Eth2 希望不仅在网络平顺时可以迅速且安全地达成共识,在网络遭到攻击时也能游刃有余。

FLP 三难

FLP 不可能定理是分布式共识领域的核心成果,该定理指出:在一个由分散的计算机组成的系统中,不可能同时具备安全性、活性以及通信完全异步性;除非你对系统作了一些不合理的假设。

安全性 指的是,已经得到处理的事务不会再被撤销;活性 指的是,新的事务总是能得到处理。异步性 是指,消息从发起方到接收方的传输时间是没有上限的。

如果参与系统的节点能够可靠地相互通信、总是诚实地遵守协议而且永不宕机,那达成共识就不是一个难事。问题在于,现实中很难同时满足这几个要求。只要我们不作这样不切实际的假设,FLP 不可能定理就意味着:在设计一个分布式系统时,安全性、活性、完全异步性,我们至少得牺牲一个。

GHOST 与分叉选择

Eth2 使用 Greedy Heaviest Observed Subtree (GHOST) 算法作为其分叉选择规则。在正常出块过程中出现分叉时,GHOST 规则会选择得到最多投票的分叉作为主链(协议会把分叉区块及其子孙区块所得票数加总起来比较)。

换句话来说,每当出现分叉,GHOST 都会选择得到各验证者最新消息支持更多的区块子树(即,以验证者最新发出的投票消息确定 TA 支持哪一边,然后选出得到更多验证者支持的区块及其子孙)(译者注:之所以叫 ”子树“,是因为分叉中可能还有分叉,形象上更像树枝而不是链)。算法会重复运行,直到找出一个没有子孙的区块(作为区块链的顶端、最新区块)。

与最长链规则相比,GHOST 可以在网络通信延迟较高时降低攻击的破坏力,同时最小化重新确定主链时影响的区块链深度(即重组的链深度)。这是因为,尽管一个攻击者可以在自己所在的分叉上更高效地出块从而制造出更长的链,但 GHOST 会选择另一个分叉,因为那条分叉所得的总票数更多。

实际上,Eth2 使用了 GHOST 算法的一个变种,叫 ”最新消息驱动型 GHOST“(LMD-GHOST),以适应 PoS 的特点。LMD-GHOST 背后的理念是,在计算链顶端时,只考虑每一个验证者 最新 发出的投票,完全不考虑它们以往作出的投票。这就大幅降低了运行 GHOST 算法的计算开销,因为在选择分叉时所需考虑的分叉数量一定不会超过验证者的数量(用大 O 表示法来说就是 O(v) )。

在 GHOST 规则下,验证者/矿工 总是可以尝试添加新的区块到区块链上(活性),而且可以在区块链上的任何一处尝试出块(异步性)。因为它能满足活性和完全异步性,根据好朋友 FLP 定理,我们知道它不可能达成安全性。

缺乏安全性的表现形式是,一条区块链可以突然发生任意深度的回滚。显然,这种事情是不可接受的,而 Eth1 区块链的处理办法是,让用户自己来假设矿工的区块需要多长时间才能传遍全网,这就是为什么我们发起的交易要等待一段时间(X 个区块)的确认。Eth2 则是另辟蹊径。

FFG,友好的确定性小工具

完全不具备安全性的区块链是没有用的,因为没有什么东西是确定的,用户也确定不了链的最新状态。所以 Eth2 使用了 Casper the Friendly Finality Gadget (Casper FFG) 算法。Casper FFG 是一种机制,在运行中偏重安全性而非活性,也就是说,它所达成的共识都是确定不移的,虽然在糟糕的网络条件下可能无法达成共识。

FFG 其实是传统的实用拜占庭容错算法 (PBFT) 的密码经济变种,基本思路是把共识过程分为两个节点:第一阶段是由节点各自表示他们认同的状态(justification),第二阶段是表示他们看到其他验证者也认可该状态(finalisation)。

Eth2 不会在每一个 slot 都运行一次 FFG(slot 是出块的时间单位,预计一个 slot 出一个区块),而是每 32 个 slot 执行一次(32 个 slot 所组成的时间段也叫 epoch)。首先,验证者用签名表示他们认同这一个 epoch 中的 32 个区块;如果有 2/3 的验证者都认同,则这个 epoch 就得到了合理化(jutification)。在下一个 epoch,验证者有另一次机会用投票来表示他们看到上一个 epoch 已被合理化;如果 2/3 的验证者都表示上一个 epoch 得到了辩护,则这上一个 epoch 就得到敲定(finalisation),而且将变成 Eth2 主链中不可变更的一部分。

FFG 实现了一种聪明的办吧。验证者的投票实际上是由两种子投票组成的;一个投给该验证者想要辩护的 epoch,另一个投给相对更早的、得到过辩护、等待被敲定的 epoch。这就大量节省了节点之间的额外通讯开销,有助于让验证者团体的规模能够上升到百万级别。

Two ghosts in a trench coat

(直译为:两只精灵,披着一件风衣)

Eth2 中的共识过程既依赖于 LMD-GHOST(它支持添加新的区块并确定区块链的顶端),也依赖于 Casper FFG(它来最终决定一个区块到底是或不是主链的一部分)。GHOST 偏爱活性,让区块可以快速且高效地添加到链上,FFG 最后通过敲定 epoch 来提供安全性。

两大协议结合的方式是:总是从被 FFG 敲定的最后一个区块开始运行 GHOST 分叉选择。因为最后一个被敲定的区块必然位于主链上,因此 GHOST 就无需考虑更早的区块了。

正常情况下,验证者会根据 GHOST 所确定的区块链顶端,在顶端一直生产区块并获取其它验证者的认可;不久之后(可能几个 epoch 之后),这些区块会根据 FFG 的规则,先是得到辩护,然后被敲定。

如果有人攻击网络 以及/或者 大比例的验证者离线,GHOST 允许剩下的验证者继续出块;不过,因为 GHOST 虽然具备活性但不具备安全性,在这种过程中主链可能会切换,因为节点在不断收发新的消息,出块也还在继续。FFG 则相反,偏重安全性胜过活性,所以它会停止敲定区块,直到网络足够稳定、足够多的验证者再度作出一致投票。

(完)


Eth2 Staking 指南 #3:分片化的共识
Eth2 Staking 指南 #4:密钥


原文链接: https://blog.ethereum.org/2020/02/12/validated-staking-on-eth2-2-two-ghosts-in-a-trench-coat/
作者: Carl Beekhuizen
翻译: 阿剑

 
0 人喜欢