编者按:本文来自PolkaWorld(ID:gh_6c4c2038ddba),Odaily星球日报经授权转载。
区块链节点使用共识引擎在区块链状态上达成统一。本文介绍了区块链系统中共识的基本原理,共识如何与Substrate框架中的runtime交互,以及框架中可用的共识引擎。www.hechaincaijing.com
状态机和冲突
区块链runtime是一个状态机[1]。它有一些内部状态和状态转换功能,允许它从当前状态转换到未来状态。在大多数runtime中,有些状态具有到多个未来状态的有效转换,但必须选择一个转换。
区块链必须在以下几方面达成一致:
- 一些初始状态,叫做“创世”
- 一系列的状态转换,每个都称为“区块”
- 最终(当前)状态
为了对转换后的结果状态达成一致,区块链的状态转换功能[2]中的所有操作都必须是确定性的。
冲突排除
在中心化系统中,中心化的权限通过按照他们看到的顺序记录状态转换,在相互排斥的备选方案中进行选择,并在发生冲突时选择竞争备选方案中的第一个。在去中心化系统中,节点将看到不同顺序的交易,因此它们必须使用更精细的方法来排除交易。更复杂的是,区块链网络力求容错,这意味着即使某些参与者不遵守规则,系统也应继续提供共识的数据。
区块链将交易批处理成区块,并有一些方法来选择哪个参与者有权提交区块。例如,在PoW链中,首先找到有效工作证明的节点有权向链提交块。
Substrate提供多种区块构造算法,还允许你创建自己的:
- Aura(RoundRobin)
- BABE(基于插槽)
- PoW
分叉选择的规则
区块包含一个区块头和一批外部对象[3]。区块头必须包含对其父块的引用,以便可以跟踪链的起源。当两个区块引用同一父块时,会发生分叉。必须解决分叉,以便只存在一个规范链。
分叉选择规则是一种算法,它获取一个区块链并选择“最佳”链,从而选择应该扩展的链。Substrate通过SelectChain展现了这个概念。
Substrate允许你编写一个自定义的分叉选择规则,或使用一个现成的。例如:
最长链规则
最长链规则简单地说,最好的链就是最长的链。Substrate用LongestChain结构提供这个链选择规则。GRANDPA用最长链规则进行投票。