Polkadot 有用于最终确定的 GRANDPA 和用于区 block 生产的 BABE。据说即使没有 GRANDPA,即使没有大多数在线验证者,BABE 也能够继续生产区 block 。 BABE 如何知道要在哪条链上继续构建?
最佳答案
BABE是Polkadot中继链中的区 block 生成算法。它使用 VRF, Verifiable Random Function ,从一组验证器中选择区 block 生产候选者。该区 block 生产者是主要。同时,如果 VRF 没有导致选择任何验证者,BABE 会在后台运行类似循环的选择算法,从集合中选择一个辅助验证者来生成区 block 作为初选。使用这种双重选择方法,BABE 保持恒定的区 block 时间 - 如果选择则为初级,如果未选择则为次级。
VRF 可能会限定多个验证者来生成区 block ,在这种情况下,两个区 block 都是有效的。到那时,这将取决于网络延迟,网络的其余部分看到每个 block 的速度有多快 - 这将决定获胜者。
在 GRANDPA 下,当 2/3 或更多的验证者同意某个区 block 时,该区 block 以及导致该区 block 的所有区 block 都会立即最终确定。
那么当 BABE 在两条独立的链上 fork 和构建时会发生什么?
Polkadot 中的规则如下:
- 首先,观察哪条链拥有最接近的最终区 block
- 然后,如果最终确定的头上有 fork ,请选择具有最多初选的 fork - 由 VRF 与类似循环算法选择的那些
如果仍然存在平局,那么歧义就会持续下去,直到三分之二的验证者在一个 fork 中最终确定一个区 block 并截断另一个 fork 。
关于blockchain - Polkadot 中的 fork 选择如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58690838/