Polkadot 中的分叉选择是如何运作的?

How does the fork choice in Polkadot work?

Polkadot 有 GRANDPA 用于敲定,BABE 用于区块生产。据说即使没有 GRANDPA,甚至没有大多数在线验证者,BABE 也能够继续生产区块。 BABE 如何知道继续在哪个链上构建?

BABE是Polkadot中继链中的出块算法。它使用 ,从验证者集合中挑选块生产候选者。这个区块生产者是 primary。同时,BABE 在后台运行类似循环的 selection 算法从集合中 select 一个 secondary 验证器产生一个块,如果 VRF 没有导致任何验证器被 selected 作为初选。使用这种双重 selection 方法,BABE 保持恒定的阻塞时间 - 如果 selected 则为主要,否则为次要。

VRF 有可能使多个验证者有资格生产区块,在这种情况下,两个区块都是有效的。届时,它将取决于网络延迟,网络的其余部分将以多快的速度看到每个块 - 这将决定获胜者。

在 GRANDPA 下,当 2/3 或更多的验证者同意一个块时,该块和导致它的所有块将立即完成。

那么当 BABE 在两个独立的链上分叉和构建时会发生什么?

Polkadot中的规则如下:

  • 首先,观察哪个链有最接近的最终区块
  • 然后,如果最终确定的头上有分叉,选择具有最多 primaries 的那个 - 那些 select由 VRFs 与类似循环算法的算法

如果仍然平局,则不确定性会一直持续到三分之二的验证者在一个分叉中完成一个区块并截断另一个分叉。