引介

Casper FFG 在 ETH2.0 中的实现

曾汨   |     |   379 次阅读

引介 | Casper FFG 的可审计安全性和近似活性


感谢 Danny Ryan 的讨论和审阅

我的上一篇文章介绍了 Casper FFG 的基本知识。本文的第一部分将对 Eth2.0 信标链中所用的 Casper FFG 实现作出扼要的描述。第二部分将讨论信标链的分叉选择规则及其它有关区块链活性的因素。

本文直接解释了 ETH 2.0 规范中的一些概念,并尽可能地附上了规范中相关参数和函数的链接。这些链接仅作参考之用,无需阅读链接内容也可理解本文。

第一部分—— Casper FFG 机制

Slot、Epoch 和 Attestation

Slot(时隙):区块链上的时间是按照 slot 来划分的,每一个 slot 期间都可以提议一个新的区块。目前,一个slot 的时长是 SECONDS_PER_SLOT = 12,即 12 秒。系统会为每一个 slot 分配一名验证者来创建新的区块

Epoch(时段):Casper FFG 机制并不应用在完整的区块树上,而是只考虑某些 slot 处的区块的得票情况。这样一来,该机制在根据投票情况来检测确定性时,无需验证过多 来源区块-目标区块对,从而节省了成本。由于这些 slot 之间的间隔足够长,每当 FFG 确定性检查运行时,绝大部分验证者新提交的投票都会被看见。每个 epoch 都由一定数量的 slot 组成的,目前的参数是 SLOTS_PER_EPOCH = 32 ,即,1 epoch = 32 slots = 6.4 分钟。FFG 机制只考虑位于这些 epoch 边界的区块( “检查点(checkpoint)” 或叫 “时段边界区块”(epoch boundary block, EBB))。

1

- 当 SLOTS_PER_EPOCH = 3 且区块 A、D 和 G 为检查点时,slot 和 epoch 的情况 -

Attestation(见证消息):attestation 就是 Casper FFG 投票,其中包含的信息有来源区块和目标区块、该 attestation 生成时的 slot 编号、验证者的标识符等。attestation 由验证者广播至点对点网络,最终由区块提议者挑选并打包至区块。

Casper FFG 机制的变化

我在上一篇文章中提到的确定性达成(Finalization)定义有了一处改变:

确定性达成:只要区块 B 满足以下条件,即可获得确定性

  • 区块B 是创世块,或
  • 已得到合理化的区块 B_0 满足下列条件:
    • 在按 slot 编号递增的 [B_0, B_1, ... , B_n]n >= 1)链上有一系列检查点,所有这些检查点都得到了合理化,且
    • 超过 2/3 的验证者将票投给 (B_0, B_n)

2

- 黄色区块是取得合理性的,红色区块是得到最终确定的 -

更改后的定义依然保留了上一篇文章中所述的 Casper FFG 安全性证明的概要。关于安全性证明的完整内容,可参见这篇文章中的 “安全性” 一节。

Casper FFG 的确定性检测

信标链的链上 FFG 机制专门通过处理区块和 attestation 来检测确定性。在每个 epoch 边界,该机制都会处理新的 attestation 并更新已经得到合理化和确定性的区块。

链上 FFG 机制只处理特定的 来源区块-目标区块对 的 attestation ,而非所有可能的 来源区块-目标区块对的 attestation ,从而降低了成本。具体来说,该机制仅处理当前和上一个 epoch 中的 attestation(另外还要满足其他一些条件!)。因此,链上 FFG 机制无法检测所有确定性实例!简而言之,该链上机制是可靠的,但并不完善。

该机制还引入了网络同步假设,因为它只处理来自最新两个 epoch 的证明:即它假设,在这两个 epoch 期间产生的 attestation 会在两个 epoch 内传播到全网。

链上 FFG 机制的规范非常简单:

  • 第一步是检测区块的合理性,即,使用来自最新两个 epoch 的 attestation 来验证最新两个 epoch 边界区块的合理性。
  • 下一步是检测区块的确定性,即,检测最新两个 epoch 边界区块的确定性。确定性检查只会用到 4 种 来源区块-目标区块对(以此提升性能并简化规范)(译者注:即来源检查点和目标检查点之间的间距不能超过一定距离,而且能回溯的距离也有一定限制)。
实例 检查来源检查点的确定性 使用目标检查点
1a 第二新的检查点 第一新的检查点
1b 第三新的检查点 第一新的检查点
2a 第三新的检查点 第二新的检查点
2b 第四新的检查点 第二新的检查点

3

- 确定性检查中的检查点情况(黄色区块是被证明合理的,红色区块是得到最终确定的) -

第二部分 —— 分叉选择和验证者计划

尽管 Casper FFG 机制概述了保障区块确定性的规则,但是它并未提及该机制是如何保障网络活性的(注:本文并非试图证明网络的活性,而是概述了有望实现活性的过程。想要了解更严谨的分析,请参阅这篇文章)。这一部分主要介绍了关于活性的两大注意事项:

  • 验证者用来确定哪个区块才是区块链顶端的分叉选择规则
  • 验证者所遵循的区块和 attestation 生成方案

HLMD GHOST 分叉选择规则

提议区块的验证者必须先确定(本地观察到的)区块链的顶端。为此,他们需要使用 Hybrid Latest Message Driven (HMLD) GHOST 分叉选择规则。

分叉选择的规范如下:

  1. 每个 epoch 开始时,验证者先确定当前视图下的最新合理化区块。在当前 epoch 期间,这一变量会被冻结,直到下一个 epoch 开始时才会再次更新。
  2. 未将步骤 1 中确定的合理化区块作为最新合理化区块的区块会被全部排除
  3. 使用一般 LMD GHOST 规则沿着区块树向下,直到找到叶子块为止。

欲知更多关于分叉选择的信息,请参阅这篇文章的 “Hybrid LMD GHOST” 一节。

验证者计划

每位验证者都肩负两大主要责任:提议新区块以及为其本地视图中的最佳区块作见证。验证者计划旨在防止混乱并简化网络中的消息传递。这一计划是每位验证者利用来自当前信标链状态的随机性计算出来的,能够防止攻击者伪造验证者计划。

提议计划(Proposal Schedule)系统会给每个 epoch 中的每个 slot 分配一个验证者来担任区块提议者。该验证者会根据分叉选择规则在本地视图的区块树上找到链的顶端,然后生成一个新的子块。该验证者可以将其看到的 attestation 打包进区块来获取奖励。当确定性检查运行时,这些 attestation 会输入链上 FFG 机制进行计算。

见证计划(Attestation Schedule):在每个 epoch 中,每位验证者都要(在特定 slot 处)生成一个 attestation 。实际上,在每个 epoch 上,整个验证者集都会被随机划分成 SLOTS_PER_EPOCH 个同等大小的委员会,每个委员会都会被分配到当前 epoch 中的特定 slot 上生成 attestation 。在生成 attestation 时,验证者会根据其本地视图将最新的确定化区块当成来源检查点,以距离链顶端最近的检查点作为目标检查点(发起 FFG 投票)。

想要了解更多关于验证者计划的信息,请查看 ETH 2.0 规范的验证者指南。

参考文献和补充资料

  1. ETH 2.0 Phase 0 规范
  2. 《将 GHOST 和 Casper 相结合》

(完)


原文链接: https://www.adiasg.me/2020/04/09/casper-ffg-in-eth2-0.html
作者: Aditya Asgaonkar
翻译&校对: 闵敏 & 阿剑

本文作者使用了 CC4.0 自由创作协议,只要保留作者署名即可自由分发、改编。


你可能还会喜欢:

科普 | Eth2 信标链:你首先该知道的事

干货 | 确定性小工具:用以太坊 2.0 为 1.0 附加确定性

科普 | Eth2 Staking 指南 #0

 
0 人喜欢