Skip to content

Latest commit

 

History

History
30 lines (25 loc) · 9.21 KB

Blind_Assignment_for_Blockchain_Extension.md

File metadata and controls

30 lines (25 loc) · 9.21 KB

4.3 共识

  在本节中,我们将解释Polkadot的混合共识协议,该协议由BABE和GRANDPA组成,前者是中继链的区块生产机制,提供概率最终性,后者提供可证明的确定性最终性,独立于BABE工作。通俗的说,概率性终态即经过一定时间后,中继链中的一个区块将以非常高的概率(接近1)得到终态确定,但可能后期不会被纳入获得大部分验证人一致认可的中继链分支;而确定性终态意味着一个被确定了的区块将永远保持确定性。此外,可证明的终态意味着我们可以向没有积极参与共识的各方证明一个区块是终态化的。
  可证明的终态性将使转接桥更容易连接 Polkadot 之外的链。拥有和Polkadot 不同共识的其它区块链,需要确信何时能安全地和中继链区块或平行链区块中的数据进行交互而没有任何被回滚的风险。保证这一点的最佳方法是,使处于中继链状态及平行链状态中的验证人都遵循拜占庭协议。另一方面,可用性和有效性机制 (第4.4.2节)可能要求我们能回滚区块,这意味着在每个区块上使用拜占庭协议(如 Tendermint[8]或Algorand [23])是不合适的,如果这样做,那么大量的质押会被削减,所以这种情况应该尽可能少的发生。因此,我们想要一个能生成区块并乐观执行的机制,且一段时间后再确定它们的终态。因此,GRANDPA选民在投票最终确定该区块终态之前,需要等待确保该区块的可用性和有效性被验证的证明。尽管我们敲定区块终态的速度可能有差异——如果我们没有收到区块无效和不可用的报告,那么我们可以快速确定它的终态,但如果我们收到区块无效和不可用的报告,那么在执行更多相关检查时,我们可能需要延迟终态确定。
  由于 Polkadot 的跨链信息传递协议(XCMP 4.4.3)的工作方式,消息传递速度受出块时间的限制,但不受终态时间的限制。因此,如果我们延迟终态确定并最终不回滚,那么消息传递仍然会很快。
  基于这些要求,我们选择尽可能地将区块生成机制和确定区块终态的机制分开。在接下来的两节中,我们将分别描述执行这些操作的 BABE 和 GRANDPA协议。

4.3.1 BABE

  在Polkadot中,我们使用BABE (Blind Assignment for Blockchain Extension)协议来生成中继链区块。BABE利用父区块产生时生成的随机数,将验证人随机分配到下一个slot(一个区块生成的时间,6秒)中。这些分配是完全不公开的,直到分配的验证人生成他们的区块。因此,我们在协议名称中使用“Blind Assignment”。BABE 类似于Ouroboros Praos [15],但它们在链选择规则和时间假设方面存在一些显著差异。   在BABE中,可能存在没有分配到任何验证人的slot,我们称之为空slot。为了填补空slot,我们有一个基于Aura [31]的辅助区块生产机制,该机制会公开的将验证人分配给空slot。然而,由于最佳链选择规则和随机数生成算法,会默认Aura机制生成的块不存在,所以基于Aura生成的区块对BABE的安全性没有贡献。接下来我们仅将BABE与其安全性一起描述。
  BABE[2]由一个个称为epochs(e1, e2,...)的时间分隔组成,其中每个epoch由多个连续的slot组成 (ei= {sl_1^i,sl_2^i,…,sl_t^i}),网络可以设定的每一个epoch的slot数目上限R。在每个epoch开始时,每个验证人都知道它应该在其中哪个slot中生成一个区块。当属于它的slot到来时,验证人通过证明它已分配给该slot来生成区块。
  盲分配基于可验证随机函数(VRF)[24]的加密原语(参见第4.7.2节)。一个epoch em中的某个验证人可执行如下操作,以了解它是否有资格在slot的sl中生成区块:
  1. 如果m = 1或m = 2,则BABE获取创世区块中的随机性;否则,需要获取 (em-2) 之前的两个epoch生成的随机性;
  2. 它使用秘密私钥和输入运行VRF:随机性和slot号sl_i^m。
  如果VRF的输出小于阈值T,则这个验证人领导该slot,意味着它有资格为该slot生成区块。我们根据 BABE[2]的安全性要求选择T,例如,与较小的T相比,较大的T使降低了在一个slot中被选择的验证人全是诚实的可能性。当验证人产生一个区块时,它会将VRF的输出和证明添加到该区块中,表明其VRF输出小于T,以向其它验证人说明它有权在相应的slot中产生一个区块。验证人总是在最佳链上生成它们的区块。BABE中的最佳链选择规则是忽略Aura区块的同时选择一条最长链,该最长链包含了最后一个由GRANDPA 确定了终态的区块。见章节4.3.2关于如何在GRANDPA中确定区块终态的细节。
  一个m > 2的epoch em的随机性是通过使用属于该epoch的最佳链的BABE 块生成的:令p是属于em的BABE块中所有VRF值的参数;然后,以rm = H(m||p)来计算epoch em的随机性,其中H是一个哈希/散列函数。验证人定期运行下面描述的相对时间算法,以根据验证人的本地时钟了解slot在什么时间开始。
  相对时间协议: 分配给一个slot的验证人需要知道什么时候是正确的区块产生时间,以保护BABE的一致性和安全性。为此,验证人使用他们的本地计算机时钟,该时钟不受任何中心化时钟调整协议(例如网络间协议[25])的校正。相反,他们使用相对时间协议使时钟与其他验证人同步。关于在没有NTP的区块链场景中本地时钟同步的正式安全模型,以及找到有关相对时间协议的更多详细信息,可以在文献[5]中找到说明。
  在BABE中,我们假设在释放创世区块之后,在第一个epoch被选中的验证人负责存储创世区块的到达时间以及其相应的本地时钟。然后,他们标记第一个slot的开始时间,并每T秒增加一次slot数。此后,他们会定期运行相关算法,以免因为本地时钟推移而失去与其它验证人的同步。除此之外,在创世区块之后运行相对时间算法的验证人需要与其他验证人同步。
  在每个sync-epochs(不同于BABE中的epoch),验证器根据相对时间协议的结果更新他们的时钟,并使用新时钟直到下一个sync-epochs。第一个sync-epochs在创世区块被释放后立即开始。当最后一个(概率上)被确定了终态的区块的slot号是¯s ı_ε时(¯s ı_ε是最小的slot号),另一个sync-epochs开始。这使得 ¯s ı_ε-¯s ı_(ε-1)≥s_cd,其中¯s ı_(ε-1)是sync-epoch_(ε-1)中最后一个(概率上)确定了终态区块的slot号。这里,s_cd是链密度(CD)性能参数,它将根据链的增长来定义。更详细地,每个验证人在sync-epoch期间将块的到达时间t_j与块中的slot号sl'j一起存储。在sync-epoch结束时,验证人检索sync-epoch期间生成的概率性终态区块的到达时间,并计算下一个sync-epoch的第一个slot sl中一些候选人的开始时间,即a_j=T(sl-sl^'j ),C_T={t_j+a_j }。C_T中的时间被视为候选人时间集合。为了选择一个候选人,验证人对候选列表C_T进行排序,并输出排序列表的中值作为sl的开始时间。图3是在第一个sync-epoch中执行相对时间协议的示例。
  BABE的安全性概述: 为了获得安全的区块链协议,Garay et al. [17]定义了下面的属性。非正式地,我们可以通过以下属性对其进行总括描述这些属性:
图3:当scd=9时,第一个epoch内相对时间协议执行流程示意

图3:当scd=9时,第一个epoch内相对时间协议执行流程示意

  • 通用前缀(CP, Common Prefix):它确保在一个拥有诚实验证人的区块链的最后一个区块之前的k个区块不能被更改。我们称所有不可更改的块为最终块。由于一个 slot中分配到恶意验证人的概率远低于分配到诚实验证人的概率,所以在一个slot中绝大多数验证人是诚实的,因此BABE满足CP属性,这意味着,恶意验证人没有足够的能力去构建一条不包含任何一个最终区块的链。

  • 链质量(CQ, Chain Quality):它确保在每一个确定的slot中,一个最小诚实区块可为一个诚实方拥有的最佳链做出贡献。即使在最坏的情况下,即网络延迟最大的情况下,我们也可保证在一个epoch内最佳链中至少会有一个诚实的区块,这样随机性不会有偏差。

  • 链增长(CG, Chain Growth):它保证slot之间的最小增长。由于绝大多数诚实验证人的存在,使得恶意验证人无法阻止最佳链的增长。

  • 链密度(CD, Chain Density):它确保在最佳链的足够长的部分中,有一半以上的区块由诚实的验证人产生。CQ和CG影响这个属性[15]。

  有关 BABE 及其安全性分析的更多详细信息,请参见[2]。