blockchain - Polkadot 中的 fork 选择如何运作?

标签 blockchain consensus polkadot

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/

相关文章:

distributed-computing - 在 PAXOS 或 RAFT 中重新上线的副本如何 catch ?

rust - 为什么使用 <T::Lookup as StaticLookup>::Source 而不是普通的 T::AccountId?

rust - 如何在 Substrate 链中存储哈希?

rust - Substrate 中来自比特币的 OP_RETURN <data> 相当于什么?

javascript - 安全帽 "deployed()"有什么作用?

super 账本 SBFT 与 RBFT

block - 如何从部署在使用 hyperledger-fabric 中的单个 channel 连接的两个不同组织对等体上的另一个链代码调用链代码?

c++ - 将使用纠删码将 block 分割成 block ,从而提高网络吞吐量性能

在 Weblogic 12c 中运行 Fabric-sdk-java 时出现 java.lang.NoSuchMethodError : com. google.common.util.concurrent.MoreExecutors.platformThreadFactory()

blockchain - Hyperledger Fabric SDK 位置