Skip to main content
Polkadot

Polkadot共识第3部分:BABE

December 30, 2019 in 共识-zh-cn,
Avatarby Joe Petrowski

翻译:First.vip

来源链接: https://www.first.vip/project/6690.html

本文为Polkadot共识系列文章的第3部分。有关简介的内容,请参见第1部分,有关GRANDPA 的讨论,请参见第2部分。

区块链扩展盲分配(BABE)是一种区块生成机制,其灵感来自另一种PoS协议Ouroboros Praos。由于它可提供概率确定性,因此它可以单独使用,也可以与GRANDPA这样的确定性小工具结合使用。

BABE是一种基于slot(插槽)的算法。它把时间划分成若干个epoch(纪元),每个epoch再划分成若干个slot。在Polkadot中,每个slot的持续时间为6秒,这也是我们的目标出块时间。BABE将选择一个(或多个)区块创建者在每个slot中创建区块。

BABE的时间被划分成若干epoch。每个epoch又包含若干个slot。

向这些slot分配区块创建者的其中一种方法就是通过简单轮流制。然而在循环模式中,攻击者总是能知道下一位创建者是谁,并可以使用该信息来协调发起攻击。而在理想情况下,应没人能够知晓该slot的创建者是谁,除非该创建者提供证据证明。

每个slot可以有主创建者和次创建者(或叫“slot领导者”)。slot主领导者是随机分配的。但由于函数是随机的,所以有时会出现有些slot没有领导者的情况。为了确保一致的出块时间,BABE使用循环系统来分配slot次领导者。

Slot主领导者

主领导者的分配基于可验证随机函数(VRF)的评估。关于区块链随机数的说法天花乱坠,简而言之,许多应用程序都依赖于随机数的生成,但是当所有链上操作都必须是确定的且可验证的时,就很难认定每个人都认可的随机性(而不是为了使生成器受益而进行的游戏)。

VRF会生成伪随机数及其正确生成的证明。其他VRF都将一些参数(包括私钥)作为输入。而我们的VRF则将epoch随机种子(事先通过所有节点认可)、slot编码和创建者私钥作为输入。由于节点不会拥有相同的私钥,所以每个节点都可以为每个slot生成唯一的伪随机值。

每个创建者要对每个epoch中每个slot的VRF进行评估。对于每个输出低于某个商定阈值的slot,验证者有权在该slot中创建区块。由于slot分配过程是随机的,因此可能会出现有些slot没有主领导者,或有些slot有多个主领导者的情况。接下来再说说如何处理这一问题。

BABE中的VRF以epoch随机性、slot编码和验证者私钥作为输入,并为epoch中的每个slot输出一个值。当区块创建者的输出低于网络阈值时,它将生成一个区块作为该slot的主要区块领导者。

Slot次领导者

为了处理空slot的问题,BABE使用了循环后退方式。每个slot都有次领导者。如果主领导者没有在slot开始时站出来,那么就由次领导者创建区块。这种后退方式将确保每个slot都有一个区块创建者,并有助于确保一致的出块时间。

将BABE与GRANDPA相结合

到目前为止,我们已经有可确定最终链的GRANDPA,以及可创建新块的BABE。由于单个slot可以有多个领导者,因此BABE的某些链也会产生分叉。

选择最佳延伸链的第一条规则很简单:BABE必须建立在由GRANDPA最终确定的那条链上。这是使用GRANDPA的要求之一。

使用GRANDPA的第二个更微妙要求是,区块生成算法必须能够选择“最佳”链。此属性使得BABE具有概率确定性(因此,你可以在不使用GRANDPA的情况下使用它)。

BABE中的最佳链就是由主领导者创建最多区块的那条链。

选择最佳链的BABE分叉选择规则示例

在BABE中,分叉十分常见。正如GRANPA一文所述,区块生成是O(n),这意味着创建者只需向所有人广播其区块,而不需要每个人都互发消息(就好比GRANDPA)。因此,并非每个人都对未最终确定的链看法一致(如图中黄色块)。

该系统使我们能够高效生成区块,并使GRANDPA进行最终确定。

那该依据谁的时钟?

我们根据时间分配slot,但我们没有单一的时间观念。每台计算机都有自己的时钟。我们不能使用中心化时间服务(称为NTP服务器),因为这会造成单点攻击。攻击者可以向NTP服务器发起攻击,可能切断它也可能夺取它的控制权,以达到更不道德的行为,比如向不同的节点发送不同的时间。

可以想象以下场景:
我收到你发来的信息,说现在是“8:42:00。”而我的时钟显示是8:42:03。那么有三种可能:
1.我们的时钟是同步的,网络传递你的消息只花了3秒钟。
2.实际上网络传递你的消息花了1秒钟。我们的时钟差了2秒钟。
3.你在骗我,你的时钟并不是这个时间。
现在假设我的时钟显示我8:41:59时收到了此信息。假如我相信你没有说谎,那么我就知道我们的时钟不同步,我必须把我的时钟往前调一点。但我仍然不知道通过网络传输需要花费多少时间,我也就不知道我们到底有多不同步。

而BABE则使用相对时间将slot编码与一台计算机的时钟对齐。当某节点收到一个区块时,它将检查接收时间和与该区块相关的slot编码。然后,它会将slot编码添加到每个区块上,并使用其数据中的中值来预测未来slot。请记住,验证者会预先知道要为其创建的slot编码,因此他们可以对此进行检查。

BABE中的区块创建者使用区块接收时间来创建网络时间视图。他们根据slot时间将接收时间映射到未来,以确定何时应创建并发起一个区块。

到目前为止,我们已经讨论了链是如何产生的(BABE)以及它们如何被最终确定(GRANDPA)。我们要解决的下一个问题是,如何使人们以正确的方式运行这些协议?本系列的最后一部分将讨论运行时如何为运行BABE和GRANDPA提供激励,以及发生错误时会有什么惩罚。

来源|波卡官方博客

翻译|头等仓Saline

编译|头等仓Mark

译文版权属头等仓所有,任何转载请保留文末信息。

From the blog

Polkadot

A Year in Parachains, Part 3: Data, ID, Privacy, Storage, & Infrastructure

Providing a brief overview of Polkadot's parachain landscape in its first full year since launch. Part 3: Data, ID, Privacy, Storage, and Infrastructure

Polkadot

Polkadot Staking Review: Impressive Stats, What’s New & What’s Coming

Since the launch of the Polkadot Staking Dashboard and nomination pools, participation in native staking has skyrocketed. These updates transformed how to stake on Polkadot.

Polkadot

A Year in Parachains, Part 2: System Chains, Smart Contracts, & Social Media

Providing a brief overview of Polkadot's parachain landscape in its first year since launch. Part 2: System Chains, Smart Contracts, & Social Media

Subscribe to the newsletter to hear about updates and events.