Substrate 支持“可插拔共识”,因此开发人员可以从多种共识算法中进行选择。它标配四种算法:
其中一些(例如babe 和 grandpa)甚至可以在单个节点中一起使用。每种共识算法之间有什么区别,哪些可以或应该一起使用?
Substrate 支持“可插拔共识”,因此开发人员可以从多种共识算法中进行选择。它标配四种算法:
其中一些(例如babe 和 grandpa)甚至可以在单个节点中一起使用。每种共识算法之间有什么区别,哪些可以或应该一起使用?
要使区块链生效(继续增长和添加新交易),必须发生两件事来解决分布式共识问题。通常,这些作业由完整节点执行,就像默认的 Substrate 节点一样。
块创作。节点创建新块。每个新块都包含对父块的引用。
区块终结。当链中出现分叉时,节点必须选择分叉的哪一侧来考虑真实的或“规范的”一侧。一旦一个块被最终确定,规范链将始终包含它。
让我们分别看一下每个提到的算法,看看它们是如何完成这些任务的。
Aura 主要提供块创作。在 aura 中,一组已知的权威被允许生产块。必须在区块生产开始之前选择权限,并且所有权限都必须知道整个权限集。时间被分成固定长度的“槽”。在每个时隙中产生一个块,并且当局轮流按顺序生产块。
在 Aura 中,只有当一个块通过网络的时间长于插槽持续时间时,才会发生分叉。因此,在良好的网络条件下,分叉并不常见。
Babe 还主要提供块创作。就像 Aura 一样,它是一种基于槽的共识算法,具有一组已知的验证器。此外,每个验证者都被分配了一个权重,必须在区块生产开始之前分配该权重。与 Aura 不同,当局不按顺序轮流。相反,在每一轮中,每个权限都会使用VRF生成一个伪随机数。如果随机数低于它们的权重,则允许它们产生一个块。
因为多个验证者可能能够在同一个时段产生一个块,所以在 Babe 中分叉比在 Aura 中更常见,即使在良好的网络条件下也很常见。
Substrate 对 Babe 的实现还有一个备用机制,用于在给定插槽中未选择任何权限时。
工作证明还提供块创作。与 Babe 和 Aura 不同,它不是基于插槽的,也没有已知的权限集。在工作量证明中,任何人都可以随时生成一个块,只要他们能够解决计算上具有挑战性的问题(通常是哈希原像搜索)。可以调整此问题的难度以提供统计目标块时间。
我们之前讨论过的每个区块创建机制都需要知道应该在链上的哪个位置构建下一个区块。诸如“最长链规则”“最重观察子树”之类的方法通常在实践中起作用并提供概率确定性。也就是说,随着每个新块添加到链中,它被还原的概率会降低,接近于零。当需要真正确定一个块是最终的时,可以使用更复杂的游戏。
Grandpa 提供区块终结。它有一个已知的加权权威集,如 Babe。但是,Grandpa 不创作区块;它只是听取有关由某些创作引擎(如上面讨论的三个)生成的块的八卦。每个权威都参与两轮区块投票。投票的细节超出了本文的范围。一旦 2/3 的祖当局投票支持特定区块,则该区块被视为最终确定。
一般来说,块创作引擎和确定性小工具可以在一条链中一起使用,因为 Babe 和 Grandpa 在问题中链接的代码中。当使用这样的系统时,必须让块创作引擎知道已完成的块,以便它们不会浪费时间在永远不会在规范链中的块之上构建。
关于权重的注意事项:Babe、Grandpa 和许多其他未与 Substrate 捆绑在一起的算法都依赖于权重。共识算法本身通常不规定如何分配权重,而是假设它们以某种方式被分配,将分配留给外部机制。在公共网络中,通常根据质押的代币数量来分配权重。在默认的 Substrate 节点中,所有权重都设置为 ,1
因为phragmen 算法使所有验证者的权益接近相等。