ETH2

Eth2.0中的Casper FFG机制

来源 |

作者 | Aditya Asgaonkar

感谢Danny Ryan与笔者共同讨论及审阅文章。

上一篇文章讨论的是关于Casper Friendly Finality Gadget (Casper FFG)的基础知识,那么这篇文章的第一部分将重点介绍信标链Casper FFG机制实现的高层级细节,第二部分将讨论分叉选择规则(fork choice rule)和活性的其他相关因素。

这篇文章解释的是直接从Eth2.0规范中挑选的概念,我会尽可能地提供规范中参数与函数的相关链接。这些链接仅供参考,因此无需查阅这些链接也能读懂这篇文章。

 

Casper FFG 机制

Slots、 Epochs 及 Attestations

Slots(时隙)区块链上的时间是按照 slot 来划分的,每个slot期间有一个新区块被提议。每个slot为12秒,一个slot分配一个验证者提议产生一个新区块

Epochs(时段)Casper FFG机制无需在完整的区块树上运行,仅处理投票所需的某些特定slot的区块即可。因此,在通过查看投票情况以对区块进行最终确定时,能够免于查看过多来源区块 – 目标区块对,从而减少了成本。由于这些特殊slot为验证者提供了足够的投票时间,因此当每次进行FFG最终确定性检查时,预计将看到绝大多数验证者的新投票结果。每个epoch由32个slot组成,所以每个epoch的时间长度为6.4分钟,即1 epoch = 32 slots * 12s = 6.4mins。FFG机制只处理这些epoch的边界区块(称为”检查点(checkpoints)”或“epoch边界区块(EBB)”)。

假设每个epoch由3个slot组成,SlotsEpochs之间的关系示意图,其中区块ADG是检查点

Attestations(证明:指的是Casper FFG投票,其中包含诸如来源区块、目标区块、进行证明时的slot编号及验证者的标识符等信息。证明由验证者广播到p2p网络,最终再由区块生产者打包进区块。

 

Casper FFG 机制的变化

与我以前的文章中提到的相比较,最终确定性的定义有所改变。

Finalization(最终确定性):区块B已最终确定的条件如下:
  • 或是充当创世区块
  • 或是B_0已被证明,条件如下:
    • slot编号按顺序递增,检查点也随之按[B_0, B_1, … , B_n]顺序排列,其中n >= 1,这些检查点区块位于同一条链上且已被证明。
    • 同时超过2/3的验证者已将票投给 (B_0, B_n)

黄色区块处于已证明状态,红色区块处于最终确定性状态

更改后的定义仍然保留了上一篇文章中Casper FFG安全证明的概要。关于完整证明的内容,请参见本文的“安全性”部分。

Casper FFG 最终确定性检查 

信标链采用链上FFG机制来处理区块与证明,以检测最终确定性。在每个epoch边界,该机制都会处理新的证明,并更新已证明与已最终确定区块的信息。

为了尽可能降低任何来源区块-目标区块对之间证明的处理成本,链上FFG机制仅处理特定的来源区块-目标区块对,即只处理当前与上一个epoch的证明(事实上还要满足更多条件)。这种特性导致链上FFG机制无法检测所有最终确定性实例!简而言之,这种链上机制是合理的,但并不完善。

另外,由于仅处理最后两个epoch的证明,该机制还引入了网络同步假设(etwork synchrony assumption),假设证明在两个epoch的时间内广播到全网。

链上FFG机制规范十分简单:

  • 第一步要检查区块合理性。采用最后两个epoch的新证明来检查它们的边界区块是否合理。
  • 下一步要检查区块最终确定性,检查对象是最后两个epoch的边界区块。仅对四组来源区块-目标区块对进行最终确定性检查,以求提高性能和简化规范。

此图展示最终确定性检查涉及的检查点,黄色区块为已证明状态,红色区块为已最终确定区块

 

分叉选择与验证者计划

尽管Casper FFG机制对区块最终确定保证规则进行了概述,但并未提及在实践中如何保证网络活性。(注意:本文并非试图证明网络活性,而是概述有望保证活性的过程。相关严谨分析,请参阅此文。)
本文这部分将重点关注两个主要的活性相关因素:
  • 验证者用来查找区块链头所执行的分叉选择规则
  • 验证者遵循的区块生成与证明计划

 

HLMD GHOST 分叉选择规则 

提议区块的验证者首先必须找到本地区块链头,为此,他们要遵循Hybrid Latest Message Driven (HMLD)GHOST作为分叉选择规则。

分叉选择规范如下:

  1. 在每个epoch开始的时候,验证者确定当前视图下的最新已证明区块。这一变量会在该epoch内被冻结,并在下一个epoch开始时再次更新。
  2. 筛选并排除出没有把步骤1确定的已证明区块作为此区块链中最新已证明区块的区块。
  3. 遵循一般LMD GHOST规则,由上至下遍历区块树,直到找到叶节点为止。

分叉选择的更多相关信息,请参见此文的“Hybrid HLMD GHOST”部分。

 

验证者计划

每个验证者对网络负有两大主要责任:提议新区块和在其本地视图中证明最佳区块,为此制定了验证者计划,以防止产生混乱和简化网络中的消息传递。此计划由每个验证者利用从当前信标链状态获取的随机性计算而得,以免攻击者支配验证者计划。

提议计划(Proposal Schedule)在每个epoch中的每个slot,都会有一位验证者被分配为提议者该验证者遵循分叉选择规则在区块树的本地视图中找到链头,并为该链头生成一个新的子块。验证者将其见到的证明打包到区块中并获取奖励。当进行最终确定性检查时,这些证明将输入到链上FFG机制。

证明计划(Attestation Schedule)每个epoch中的每个slot中的每个验证者都要生成证明。实际上,对于每个epoch,整个验证者集被随机划分为SLOTS_PER_EPOCH个等同大小的委员会,这些委员分别被分配到一个特定的slot,然后生成证明。在生成证明时,验证者将根据其本地视图,以最后一个已证明区块作为来源区块,以链头后的最新检查点作为目标区块。

验证者计划的更多相关信息,请参阅Eth2.0规范中的验证者指南