主页 > imtoken下载app > 共识原则
共识原则
区块链节点使用共识引擎来统一区块链的状态。 本文介绍了区块链系统中共识的基础知识,共识如何与 Substrate 框架中的运行时交互,以及框架中可用的共识引擎。
状态机和冲突
区块链运行时是一个状态机 [1]。 它有一些内部状态和状态转换函数,允许它从当前状态转换到未来状态。 在大多数运行时中,某些状态具有到多个未来状态的有效转换,但必须选择一个转换。
区块链必须在以下方面达成共识:
一些初始状态,称为“创世纪”
一系列状态转换,每个状态转换称为“块”
最终(当前)状态
为了就转换结果的状态达成一致,区块链 [2] 的状态转换函数中的所有操作都必须是确定性的。
解决冲突
在中心化系统中,中心化机构按照他们看到的顺序记录状态,在相互排斥的备选方案之间进行选择,并在发生冲突时选择第一个备选方案。 在去中心化系统中,节点将以不同的顺序看到交易,因此它们必须使用更复杂的方法来排除交易。 更复杂的是,区块链网络力求容错,这意味着即使一些参与者不遵守规则,系统也应该继续提供共识数据。
区块链批量交易,有多种方式来选择哪些参与者有权提交区块。 例如,在 PoW 链中,最先找到有效工作量证明的节点有权向链提交区块。
Substrate 提供了多种块构建算法,还允许您创建自己的:
光环(罗宾罗宾)
宝贝(基于插槽)
工作量
分叉选择规则
作为一个原语,一个区块由一个区块头和一批外部对象组成[3]。 区块头必须包含对其父区块的引用,以便可以追踪链的起源。 当两个块引用同一个父块时,就会发生分叉。 必须解决分叉,以便只有一个规范链。
分叉选择规则是一种算法,它采用区块链并选择“最佳”链,从而选择应该扩展哪条链。 Substrate 使用 SelectChain 演示了这个概念。
Substrate 允许您编写自定义分叉选择规则,或使用现成的规则。示例:最长链规则
最长链规则只是说最好的链是最长的链。 Substrate 使用 LongestChain 结构来提供这个链选择规则。 GRANDPA 使用最长链规则进行投票。
幽灵规则
GHOST规则是,从生成块开始,通过递归选择构建块最多的分支来解决每个分支。
大量生产
区块链网络中的某些节点可以生成新的块。 此过程称为创作。 哪些节点可以写入区块取决于你使用的共识引擎。 在中心化网络中,一个节点可以写入所有区块,而在完全无许可的网络中,算法必须选择每个高度的区块生产者。
在比特币这样的 PoW 系统中,任何节点都可以随时生成区块,只要它能解决比特币的计算问题。 解决这个问题需要 CPU 时间,所以矿工只能根据他们的计算资源来生产区块。
Substrate 提供 PoW 出块引擎.slot
基于时隙的共识算法必须具有一组已知的可以生成块的验证器。 时间分配给不同的时隙,每个时隙中只有少数验证者可以出块。 在每个插槽中,验证器可以写入的块的详细信息因引擎而异。 Substrate 提供 Aura 和 Babe,它们都是基于插槽的块生产引擎。
终局性
任何系统中的用户都想知道他们的交易何时完成,区块链也不例外。 在一些传统系统中,收据被移交或文件被签署时,最终性就发生了。
使用到目前为止描述的块生产方案和分叉选择规则,交易永远不会完全完成。 总是有可能出现更长(或更重)的链并恢复您的交易。 但是,在特定块上构建的块越多,恢复它的可能性就越小。 这样,区块生产和适当的分叉选择规则提供了概率确定性。
当需要确定最终性时,可以将最终性小工具添加到区块链的逻辑中。 固定权限集的成员投了最后一票。 当为一个区块投了足够多的票时,该区块就被认为是最终的。 在大多数系统中,这个阈值是 2/3 如果没有外部协调(例如硬分叉),这些小工具完成的块将无法恢复。 “
一些共识系统将块生成与最终性联系起来。 例如,确定性是块生成过程的一部分。 在区块 N 完成之前,不能生成新的区块 N+1。 但是,Substrate 可以将这两个过程分开,并且可以单独使用任何概率确定性块引擎,或者将其与确定性小工具结合使用以实现确定性最终性。
在使用最终小工具的系统中,必须修改分叉选择规则以考虑最终游戏结果。 例如,节点会选择包含最近完成区块的最长链,而不是选择最长链的周期。
底物共识
Substrate 框架带有多个共识引擎,可提供大规模生产或最终确定性。 本文简单介绍一下Substrate自己的产品。 欢迎开发者贡献自己的自定义共识算法。晕
Aura [4] 提供了一种基于插槽的块生产机制。 在 Aura 中,一组已知的权威轮流出块。宝贝
BABE [5] 是通过一组已知验证器就基于槽的块生产达成的共识。 在这些方面,它类似于 Halo。 与 Aura 不同,时隙分配基于可验证随机函数 (VRF) 的评估。 每个验证者都被分配了一个 epoch 权重。 epoch 被分成时隙,验证者在每个时隙中计算他们的 VRF。 对于验证器的 VRF 输出低于其权重的每个时隙,允许生成一个块。
由于多个验证者可能会在同一个时隙中产生一个块比特币的运行原则,因此即使在良好的网络条件下,BABE 中的分叉也比 Aura 中更常见。
如果给定槽中的块没有生产者,Substrate 的 BABE 实现也有一个回退机制。 这些“辅助”时隙分配允许 BABE 获得恒定的块时间。
PoW 块生成不是基于槽的,不需要一组已知的权限。 在 PoW 中比特币的运行原则,任何人都可以随时生成区块,只要他们能解决一个计算难题(通常是找到原始哈希图像)。 这个问题的难度可以调整,提供一个统计目标出块时间。grandfather
GRANDPA [6] 提供区块最终性。 它有一组类似于 BABE 的已知权重。 然而,GRANDPA 不生成块,它只听生产引擎(如上面三个)生成的块的“八卦”。 GRANDPA 验证者在链上投票,而不是在区块上投票,也就是说,他们对他们认为“最佳”的区块进行投票,并且可以通过传递的方式将他们的投票应用于所有先前的区块。 一旦超过三分之二的 GRANDPA 当局对一个特定的区块进行了投票,它就被认为是最终的。与运行时协调
到目前为止,最简单的静态共识算法可以完全在运行时之外运行。 然而,许多共识游戏通过添加需要与运行时协调的功能而变得更加强大。 示例包括 PoW 中的可调整难度、权威证明中的权限轮换以及 PoS 网络中基于权益的权重。
为了适应这些共识功能,Substrate 具有 DigestItem 的概念,它从节点外部(共识所在的位置)传递到运行时,反之亦然。