内容简介:重点介绍信标链Casper FFG机制实现的高层级细节以及讨论分叉选择规则(fork choice rule)和活性的其他相关因素。本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
重点介绍信标链Casper FFG机制实现的高层级细节以及讨论分叉选择规则(fork choice rule)和活性的其他相关因素。
我 上一篇文章 何为CASPER FFG 讨论的是关于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组******成,******Slots******和******Epochs******之间的关系示意图,******其中区块* A* 、* D* 、******G**** 是检查点*
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作为分叉选择规则。
分叉选择规范 如下:
- 在每个epoch开始的时候,验证者确定当前视图下的最新已证明区块。这一变量会在该epoch内被冻结,并在下一个epoch开始时再次更新。
- 筛选并排除出没有把步骤1确定的已证明区块作为此区块链中最新已证明区块的区块。
- 遵循 一般LMD 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与笔者共同讨论及审阅文章。
我 上一篇文章 何为CASPER FFG 讨论的是关于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组** 成,** Slots** 和** Epochs** 之间的关系示意图,** 其中区块** A** 、** D** 、** G** 是检查点*
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作为分叉选择规则。
分叉选择规范 如下:
- 在每个epoch开始的时候,验证者确定当前视图下的最新已证明区块。这一变量会在该epoch内被冻结,并在下一个epoch开始时再次更新。
- 筛选并排除出没有把步骤1确定的已证明区块作为此区块链中最新已证明区块的区块。
- 遵循 一般LMD 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与笔者共同讨论及审阅文章。
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
- 发表于 1小时前
- 阅读 ( 12 )
- 学分 ( 0 )
- 分类:以太访2.0
以上所述就是小编给大家介绍的《ETH2.0中的CASPER FFG机制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 快速失败机制 & 失败安全机制
- JavaScript线程机制与事件机制
- 区块链是怎样将分布式组网机制、合约机制、共识机制等技术结合并应用
- Java内存机制和GC回收机制-----笔记
- javascript垃圾回收机制 - 标记清除法/引用计数/V8机制
- Android 8.1 源码_机制篇 -- 全面解析 Handler 机制(原理篇)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
"笨办法"学Python
肖 (Zed A.Shaw) / 王巍巍 / 人民邮电出版社 / 2014-11-1 / CNY 49.00
本书是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。 本书结构非常简单,共包括52个习题,其中26个覆盖了输入/输出、变量和函数三个主题,另外26个覆盖了一些比较高级的话题,如条件判断、循环、类和对象、代码测......一起来看看 《"笨办法"学Python》 这本书的介绍吧!