重点介绍信标链Casper FFG机制实现的高层级细节以及讨论分叉选择规则(fork choice rule)和活性的其他相关因素。
我上一篇文章 何为CASPER FFG讨论的是关于Casper Friendly Finality Gadget (Casper FFG)的基础知识,那么这篇文章的第一部分将重点介绍信标链Casper FFG机制实现的高层级细节,第二部分将讨论分叉选择规则(fork choice rule)和活性的其他相关因素。
这篇文章解释的是直接从Eth2.0规范中挑选的概念,我会尽可能地提供规范中参数与函数的相关链接。这些链接仅供参考,因此无需查阅这些链接也能读懂这篇文章。
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组成,Slots和Epochs之间的关系示意图,其中区块A、D、G是检查点
Attestations(证明):指的是Casper FFG投票,其中包含诸如来源区块、目标区块、进行证明时的slot编号及验证者的标识符等信息。证明由验证者广播到p2p网络,最终再由区块生产者打包进区块。
与我以前的文章中提到的相比较,最终确定性的定义有所改变。
Finalization(最终确定性):区块B已最终确定的条件如下:
黄色区块处于已证明状态,红色区块处于最终确定性状态
更改后的定义仍然保留了上一篇文章中Casper FFG安全证明的概要。关于完整证明的内容,请参见本文的“安全性”部分。
信标链采用链上FFG机制来处理区块与证明,以检测最终确定性。在每个epoch边界,该机制都会处理新的证明,并更新已证明与已最终确定区块的信息。
为了尽可能降低任何来源区块-目标区块对之间证明的处理成本,链上FFG机制仅处理特定的来源区块-目标区块对,即只处理当前与上一个epoch的证明(事实上还要满足更多条件)。这种特性导致链上FFG机制无法检测所有最终确定性实例!简而言之,这种链上机制是合理的,但并不完善。
另外,由于仅处理最后两个epoch的证明,该机制还引入了网络同步假设(etwork synchrony assumption),假设证明在两个epoch的时间内广播到全网。
链上FFG机制规范十分简单:
此图展示最终确定性检查涉及的检查点,黄色区块为已证明状态,红色区块为已最终确定区块
尽管Casper FFG机制对区块最终确定保证规则进行了概述,但并未提及在实践中如何保证网络活性。(注意:本文并非试图证明网络活性,而是概述有望保证活性的过程。相关严谨分析,请参阅此文。)
本文这部分将重点关注两个主要的活性相关因素:
提议区块的验证者首先必须找到本地区块链头,为此,他们要遵循Hybrid Latest Message Driven (HMLD)GHOST作为分叉选择规则。
分叉选择规范如下:
分叉选择的更多相关信息,请参见此文的“Hybrid HLMD GHOST”部分。
每个验证者对网络负有两大主要责任:提议新区块和在其本地视图中证明最佳区块,为此制定了验证者计划,以防止产生混乱和简化网络中的消息传递。此计划由每个验证者利用从当前信标链状态获取的随机性计算而得,以免攻击者支配验证者计划。
提议计划(Proposal Schedule):在每个epoch中的每个slot,都会有一位验证者被分配为提议者。该验证者遵循分叉选择规则在区块树的本地视图中找到链头,并为该链头生成一个新的子块。验证者将其见到的证明打包到区块中并获取奖励。当进行最终确定性检查时,这些证明将输入到链上FFG机制。
证明计划(Attestation Schedule):每个epoch中的每个slot中的每个验证者都要生成证明。实际上,对于每个epoch,整个验证者集被随机划分为SLOTS_PER_EPOCH个等同大小的委员会,这些委员分别被分配到一个特定的slot,然后生成证明。在生成证明时,验证者将根据其本地视图,以最后一个已证明区块作为来源区块,以链头后的最新检查点作为目标区块。
验证者计划的更多相关信息,请参阅Eth2.0规范中的验证者指南。
来源 | adiasg.me 作者 | Aditya Asgaonkar 感谢Danny Ryan与笔者共同讨论及审阅文章。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!