Casper FFG:实现权益证明的共识协议

  • juincc
  • 发布于 2019-11-08 14:18
  • 阅读 38

本文详细介绍了Casper FFG共识协议及其在以太坊2.0中的应用。Casper FFG是基于PBFT改进的权益证明(PoS)共识协议,旨在实现区块链的去中心化和高效性。文章还探讨了以太坊2.0如何通过分片技术(Sharding)提升交易处理能力,并整合Casper FFG以实现更安全的共识机制。

Casper FFG 是如何工作的?以太坊 2.0 如何集成 Casper FFG?

前言

2017年,Vitalik Buterin 和 Virgil Griffith 共同发布了Casper the Friendly Finality Gadget(Casper FFG)。Casper FFG 是一种受 PBFT 启发并改进的共识协议。尽管它被设计得很简单,但其安全性的证明却并不容易

通过本文,你将通过了解 Casper FFG 的工作原理,窥见权益证明试图解决的问题和设计概念。此外,对 Casper FFG 的深入研究可以帮助研究人员和开发人员更好地理解以太坊 2.0 的设计。

最后,我要特别感谢以太坊研究员 Chih-Cheng Liang 提供了重要材料,与作者频繁讨论并给予反馈。没有他的帮助,这项工作无法完成。

Casper FFG 是如何开始的?

以太坊的 权益证明 (PoS) 研究可以追溯到 这篇 2014 年的文章。自那时起,以太坊研究人员便朝着 实现基于 PoS 的共识协议 的目标不断努力。PoS 共识的设计是一个跨学科且相当复杂的问题,涉及计算机科学、经济学和密码学等学科。此外,以太坊在区块链生态系统中拥有最具跨学科性的团队,他们对 PoS 的研究可以说非常深入。

这条 推特风暴 中,Vitalik 解释了 Casper FFG / Casper CBC 的演变。

Casper FFG 受到 PBFT 的启发,可以看作是对后者共识协议的改进。它继承了 PBFT 的核心设计,同时增加了新机制并简化了若干规则。如果你不熟悉 PBFT,欢迎参考我另一篇文章

简而言之,PBFT 是一种以两轮投票机制为特征的共识协议,具备以下属性:

  • 许可型 : 只有“被允许”的节点才能参与共识过程。
  • 基于领导 : 只有主节点负责提议区块。所有其他节点仅负责投票,因此需要一个视图变更机制来控制不诚实的主节点。
  • 基于通信 : PBFT 依赖确定性的大多数来达成共识,而不是依赖非确定性的计算难题。
  • 安全优先于活性 : 该协议保证在网络延迟的情况下依然安全(即没有分叉),这赋予了 PBFT 迅速最终性的特性。

在上述所有属性中,PBFT 的 即时最终性 特性可能被认为是该共识协议受到 Vitalik 青睐的原因。在阅读 PBFT 之后,Vitalik 发布了一篇 总结,其核心思想后来演化为 Casper FFG。

Casper FFG 的前身:最小削减条件

虽然 PBFT 享有即时最终性,但它对串通的抵抗能力较弱。因此,需要一种惩罚机制来防止拜占庭行为。若某个节点违反规则,则将遭受经济损失。通过经济法规调整节点行为,实际上反映了 PoS 的设计理念:任何存入足够(由协议规定)代币的节点,都可以参与共识。因此,基于 PoS 的共识也可以被定义为无权限的。

这里要澄清“有许可”的意思。当任何节点可以自由加入和退出时,我们会说该协议是“无权限的”。然而,如果区块链必须维护节点列表,当新节点加入时,我们可以认为这里有某种“权限”需被授予。同样,从 PBFT 的角度来看,投票节点应从许可列表中选择。

下一个问题是:应该惩罚哪些行为?Vitalik 仔细研究了 PBFT,发现 PBFT 仅需要四条规则(PBFT 前提)以确保共识的良好运作。

Vitalik 在 这篇文章 中总结了这四条规则,并称之为 PBFT 的“最小削减条件”。任何违反这 4 条规则的行为都将导致存款被“削减”。这四条规则如下:

1. 发送提交需要看到 2/3 的准备。2. 如果你在某个时段中做了某个特定前时段的准备,那么你需要在该时段中看到 2/3 的准备,并且这些准备必须指向同一前时段。3. 如果你在某个时段中做了提交,那么你显然在该时段中看到了 2/3 的准备,因此你日后所做的任何准备应当引用该时段或更新的某个内容。4. 你不能在同一时段中准备两次。

这 4 条规则可以进一步归纳为 2 条:

1. 验证者不得对同一目标高度发布两个不同的投票。2. 验证者不得在其他投票之间进行投票。

这两条规则即为 Casper FFG 的最小削减条件。接下来,让我们更仔细地看看 Casper FFG 是如何工作的,以及它的改进之处。

Casper FFG 是如何工作的?

Casper FFG:检查点树

Casper FFG 是一个抽象的覆盖层,负责共识,而非区块提议机制。 区块提议机制由底层区块链实现,来自底层链的区块提议称为 检查点。这些检查点形成一个检查点树。例如,高度为 0、50、100 和 150 的区块哈希值被提取以形成一个新树,如上图所示。最底部的检查点称为

每个节点都必须对检查点进行投票。投票的内容是由两个来自不同高度的检查点构成的 链接。链接的较低检查点称为 ,较高检查点称为 目标。节点向网络广播投票,并同时收集其他节点的投票。如果支持链接 L 的节点存款总和超过总存款的 2/3,则称 L超多数链接,记作 s → t。例如,在上述图中,b1 / b2 / b3 之间形成了一个超多数链接,表示为 b1 → b2, b2 → b3。

从根开始,如果在两个检查点之间建立了超级多数链接,链接的目标将变为“ 已确认”,而当前“已确认”的链接源则变为“ 已最终确认”。根节点在默认状态下是“已确认”和“已最终确认”的。可以注意到,在每两轮投票后,每个检查点都会变为“已确认”,然后“已最终确认”,这与 PBFT 的“ 已准备”和“ 已提交”几乎等效。例如,在上图右侧的分支中,r / b1 / b2 都是“已最终确认”的,而只有 b3 是“已确认”的。

那么,节点应选择哪些检查点进行投票呢?每个节点必须遵循 分叉选择规则 选择要链接的下一个检查点。在 Casper FFG 中,规则是选择最高的“已确认”检查点以建立链接。

Casper FFG:由于验证者集合的大幅变化引起的分叉

验证者集 会随着时间动态变化,因为 Casper FFG 允许任何具有足够存款的节点成为验证者。节点在退出网络后需要等待一个叫做 提取延迟 的时间段才能收回存款。每个检查点 C 有其相应的 世代,定义为从根检查点到 C 的已最终确认检查点的数量。例如,在上述图中,b3 的世代为 3。每个世代对应两组验证者:前向验证者集合(包括此次世代的节点)和 后向验证者集合(包括此次世代退出的节点)。

理论上,前向/后向验证者集合之间的高度重叠,但节点有可能串通共同进入/退出以导致前向/后向验证集合的大幅变化。如果发生这种情况,拜占庭节点可能在发生拜占庭故障时无法被削减(因为拜占庭节点已退出),从而妨碍了安全性。在上图中,验证者 A 可以退出,这意味着 A 对 C' 分支(绿色)退出,但对 C 分支(紫色),A 从未退出。因此,A 可以继续在旧链 C 上投票,但新链 C' 则无法削减 A 的存款(因为其已提取)。

为了使每个世代的检查点对拜占庭故障负责,需要一种 拼接机制 来“拼接”前向/后向验证者集合,以确保每个拜占庭故障可以追溯到某些验证者,来自前向或后向验证者集合中的某个。

总而言之,Casper FFG 使得许多 PBFT 特性得以改进:

  • 经济约束 : PBFT 是一种许可协议,因为依赖于受信节点来运行。Casper FFG 是无权限的,通过引入最小削减条件利用经济损失的风险来限制节点的行为。节点可以完全无信任地合作,实现真正的去中心化。
  • 抽象的区块提议机制 : PBFT 依赖一个诚实的主节点生成区块,并需要视图变更机制来限制拜占庭节点。Casper FFG 不关注底层的区块提议机制,而是仅负责达成共识。这种抽象的优势在于,区块提议的频率不必与覆盖共识的频率相匹配。这可以提高效率并减少网络的通信开销。例如,每生成 100 个区块仅生成 1 个检查点。
  • 流水线投票 : PBFT 有若干消息,如 <Prepare>、<Commit>、<View-change>; 而 Casper FFG 仅有一条消息:<Vote>,投票的内容不是单个区块/请求,而是两个链接的检查点。这使得 Casper FFG 更为简单,同时不会过多牺牲可表达性。这些检查点构成一条链,将经历两轮投票,在两个不同的高度。由于每轮投票将最终确定源并确认目标,因而共识可以继续作为流水线运行。类似的设计概念也出现在 Hot-Stuff 中。有趣的是,作者 Dahlia Malkhi 还写了一篇文章 对 Hot-Stuff 和 Casper FFG 进行了比较。
  • 抵抗攻击的能力 : PBFT 对 长程攻击灾难性崩溃 不具备抵抗力。Casper FFG 具有针对这两种攻击的特殊机制:对于长程攻击,节点必须定期更新最新区块,并禁止回退已最终确认的区块;而对于灾难性崩溃,Casper FFG 引入了“无活动泄漏”。我将在下一篇文章中提供有关这两种攻击的进一步细节。

考虑到 Casper FFG 的简单性,以太坊研究人员曾经制作了 Casper FFG 的合约版本。然而,这个合约版本的 Casper FFG 后来被 弃用!在合约版本中,假设投票可以并行处理,但在计算投票奖励时会出现许多中间状态。投票处理的顺序会影响最终状态,这意味着并行化将导致共识无法达成。为了修复这个问题,需要在合约和客户端中进行诸多更改,而这将失去“在合约中实现逻辑以避免修改客户端”的精神。因此,为了更好地将 Casper FFG 与其他优化提议(如分片)整合,以太坊 2.0 的创建成为必然。

Casper FFG 在以太坊 2.0 中

以太坊 2.0:分片

以太坊 2.0 是一个基于 EVM 的分布式账本,集成了 Casper FFG 以及许多优化提议(主要集中在分片上)。除了尝试实现 PoS,Ethereum 2.0 还试图将每秒处理的交易数量 (TPS) 扩展到 10,000 级别,使区块链成为像互联网一样的基础设施。成为验证者只需 32 个以太币。

分片是提高可扩展性的重要设计部分,并可能是以太坊 2.0 的最重要目标。简单来说,分片是团队合作。以太坊现在只有一个区块链,所有节点必须分别处理每笔交易。在以太坊 2.0 中,网络被分为 1024 个分片,每个分片单独运行一个 分片链,处理一部分总体交易,并将结果交叉链接返回到 信标链。因此,以太坊 2.0 预计将有 1 条信标链和 1024 条分片链。

同样,在以太坊 2.0 中,验证者将被划分为 1024 个 持久委员会 和 1024 个 交叉链接委员会。每个分片对应 1 个持久委员会和 1 个交叉链接委员会。这两个委员会的任务不同:持久委员会负责维护分片链并生成分片区块,而交叉链接委员会则负责维护信标链,将分片区块交叉链接回信标链并生成信标区块。每个委员会的成员,以及信标区块/分片区块的提议者,根据链上随机数确定。

换句话说,每个验证者需要维护 1 条通用信标链和 1 条单独的分片链,同时还将被分配到 1 个交叉链接委员会和 1 个对应于该分片的持久委员会。

Casper FFG 是运行在以太坊 2.0 上的一个覆盖层。这个覆盖层同样由检查点组成。检查点之间的跨度被称为 纪元,一个纪元分为 64 个 。每个槽对应 16 个分片(16 = 1024 ÷ 64),因此每个分片在每个纪元中都有一个对应的槽,只能在其轮到时广播投票。每个分片在一个槽中只能有 1 次投票——也就是说,每个分片需要首先达成投票的共识。然而,将在每个分片内运行的共识协议尚未决定。最新的提议是使用 聚合签名。此外,Casper FFG 在以太坊 2.0 中的分叉选择规则为最新的消息驱动 GHOST(LMD GHOST)。

理论上,不同层的链中的投票应分开;但实际上,Casper FFG 的投票附加在提议链的投票上,以减少投票广播的通信开销。理想情况下,在每个纪元结束时,每个分片将收到来自所有其他分片的投票,这些投票在该纪元内被称为 证明,Casper FFG 的活性可以得到保障。

结论

Casper FFG 是实现 PoS 共识的一次大胆尝试,其在以太坊 2.0 中的出现值得期待。然而,以太坊 2.0 仍存在一些问题,如轻客户端、链上随机数生成器和跨分片交易等。同时,以太坊 2.0 的许多竞争者也提出了新的共识协议和分片协议,如 RapidChain、Harmony 和 Chainspace。

Casper FFG 和以太坊 2.0 是众多研究人员和开发人员的持续研究与开发的成果,但对其系统性的总结仍然缺乏。希望本文能够帮助突出 Casper FFG 及其与以太坊 2.0 的一些基本要素。

  • 原文链接: medium.com/unitychain/in...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
juincc
juincc
江湖只有他的大名,没有他的介绍。