编者按:本文来自以太坊爱好者,作者:AdityaAsgaonkar,翻译&校对:闵敏&阿剑,Odaily星球日报经授权转载。我的上一篇文章介绍了CasperFFG的基本知识。本文的第一部分将对Eth2.0信标链中所用的CasperFFG实现作出扼要的描述。第二部分将讨论信标链的分叉选择规则及其它有关区块链活性的因素。本文直接解释了ETH2.0规范中的一些概念,并尽可能地附上了规范中相关参数和函数的链接。这些链接仅作参考之用,无需阅读链接内容也可理解本文。第一部分——CasperFFG机制
Slot、Epoch和Attestation
Slot:区块链上的时间是按照slot来划分的,每一个slot期间都可以提议一个新的区块。目前,一个slot的时长是SECONDS_PER_SLOT=12,即12秒。系统会为每一个slot分配一名验证者来创建新的区块。Epoch:CasperFFG机制并不应用在完整的区块树上,而是只考虑某些slot处的区块的得票情况。这样一来,该机制在根据投票情况来检测确定性时,无需验证过多来源区块-目标区块对,从而节省了成本。由于这些slot之间的间隔足够长,每当FFG确定性检查运行时,绝大部分验证者新提交的投票都会被看见。每个epoch都由一定数量的slot组成的,目前的参数是SLOTS_PER_EPOCH=32,即,1epoch=32slots=6.4分钟。FFG机制只考虑位于这些epoch边界的区块”或叫“时段边界区块”)。
-当SLOTS_PER_EPOCH=3且区块A、D和G为检查点时,slot和epoch的情况-Attestation:attestation就是CasperFFG投票,其中包含的信息有来源区块和目标区块、该attestation生成时的slot编号、验证者的标识符等。attestation由验证者广播至点对点网络,最终由区块提议者挑选并打包至区块。CasperFFG机制的变化
我在上一篇文章中提到的确定性达成定义有了一处改变:确定性达成:只要区块B满足以下条件,即可获得确定性区块B是创世块,或已得到合理化的区块B_0满足下列条件:在按slot编号递增的链上有一系列检查点,所有这些检查点都得到了合理化,且超过2/3的验证者将票投给(B_0,B_n)。
-黄色区块是取得合理性的,红色区块是得到最终确定的-更改后的定义依然保留了上一篇文章中所述的CasperFFG安全性证明的概要。关于安全性证明的完整内容,可参见这篇文章中的“安全性”一节。CasperFFG的确定性检测
信标链的链上FFG机制专门通过处理区块和attestation来检测确定性。在每个epoch边界,该机制都会处理新的attestation并更新已经得到合理化和确定性的区块。链上FFG机制只处理特定的来源区块-目标区块对的attestation,而非所有可能的来源区块-目标区块对的attestation,从而降低了成本。具体来说,该机制仅处理当前和上一个epoch中的attestation。因此,链上FFG机制无法检测所有确定性实例!简而言之,该链上机制是可靠的,但并不完善。该机制还引入了网络同步假设,因为它只处理来自最新两个epoch的证明:即它假设,在这两个epoch期间产生的attestation会在两个epoch内传播到全网。链上FFG机制的规范非常简单:第一步是检测区块的合理性,即,使用来自最新两个epoch的attestation来验证最新两个epoch边界区块的合理性。下一步是检测区块的确定性,即,检测最新两个epoch边界区块的确定性。确定性检查只会用到4种来源区块-目标区块对。
-确定性检查中的检查点情况-第二部分——分叉选择和验证者计划
尽管CasperFFG机制概述了保障区块确定性的规则,但是它并未提及该机制是如何保障网络活性的。这一部分主要介绍了关于活性的两大注意事项:验证者用来确定哪个区块才是区块链顶端的分叉选择规则验证者所遵循的区块和attestation生成方案HLMDGHOST分叉选择规则
提议区块的验证者必须先确定区块链的顶端。为此,他们需要使用HybridLatestMessageDriven(HMLD)GHOST分叉选择规则。该分叉选择的规范如下:每个epoch开始时,验证者先确定当前视图下的最新合理化区块。在当前epoch期间,这一变量会被冻结,直到下一个epoch开始时才会再次更新。未将步骤1中确定的合理化区块作为最新合理化区块的区块会被全部排除使用一般LMDGHOST规则沿着区块树向下,直到找到叶子块为止。欲知更多关于分叉选择的信息,请参阅这篇文章的“HybridLMDGHOST”一节。验证者计划
每位验证者都肩负两大主要责任:提议新区块以及为其本地视图中的最佳区块作见证。验证者计划旨在防止混乱并简化网络中的消息传递。这一计划是每位验证者利用来自当前信标链状态的随机性计算出来的,能够防止攻击者伪造验证者计划。提议计划:系统会给每个epoch中的每个slot分配一个验证者来担任区块提议者。该验证者会根据分叉选择规则在本地视图的区块树上找到链的顶端,然后生成一个新的子块。该验证者可以将其看到的attestation打包进区块来获取奖励。当确定性检查运行时,这些attestation会输入链上FFG机制进行计算。见证计划:在每个epoch中,每位验证者都要生成一个attestation。实际上,在每个epoch上,整个验证者集都会被随机划分成SLOTS_PER_EPOCH个同等大小的委员会,每个委员会都会被分配到当前epoch中的特定slot上生成attestation。在生成attestation时,验证者会根据其本地视图将最新的确定化区块当成来源检查点,以距离链顶端最近的检查点作为目标检查点。想要了解更多关于验证者计划的信息,请查看ETH2.0规范的验证者指南。参考文献和补充资料
https://github.com/ethereum/eth2.0-specs/tree/dev/specs/phase0https://arxiv.org/pdf/2003.03052.pdf
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。