当前位置:首页区块链共识原则

共识原则

共识原则

区块链节点使用共识引擎来实现区块链状态的统一。本文介绍了区块链系统中共识的基本原理,共识如何与Substrate框架中的运行时交互以及该框架中可用的共识引擎。

状态机与冲突

区块链运行时是一个状态机[1]。它具有一些内部状态和状态转换功能,允许它从当前状态转换到将来状态。在大多数运行时中,某些状态具有到多个将来状态的有效转换,但是必须选择一个转换。

区块链必须在以下方面达成共识:

一些初始状态,称为“创世纪”

一系列状态转换,每个状态转换称为“块”

最终(当前)状态

为了就转换结果的状态达成一致,区块链[2]的状态转换函数中的所有操作必须是确定性的。

解决冲突

在中心化式系统中,中心化式授权机构按照它们看到状态的顺序进行记录,在相互排斥的备选方案之间进行选择,并在发生冲突时选择第一个备选方案。在去中心化的系统中,节点将看到不同顺序的事务,因此它们必须使用更复杂的方法来排除事务。更复杂的是,区块链网络努力追求容错能力,这意味着即使某些参与者不遵守规则,系统也应继续提供共识数据。

区块链将交易分批进行,有多种方法可以选择哪些参与者有权提交区块。例如,在PoW链中,首先找到有效工作证明的节点有权向该链提交区块。

Substrate提供了多种块构造算法,还允许您创建自己的:

光环(罗宾·罗宾)

BABE(基于插槽)

工作量

货叉选择规则

作为一个原语,一个块包含一个块头和一批外部对象[3]。块头必须包含对其父块的引用,以便可以跟踪链的起源。当两个块引用相同的父块时,将发生派生。必须解决分叉问题,以便只有一个规范链。

分叉选择规则是一种采用区块链并选择“最佳”链,从而选择应扩展的链的算法。 Substrate通过SelectChain演示了此概念。

底物允许您编写自定义分叉选择规则,或使用现成的规则。例如:最长链条规则

最长链规则只是说最好链是最长链。基板使用LongestChain结构来提供此链选择规则。 GRANDPA使用最长链规则进行投票。

共识原则1

鬼规则

GHOST规则是,从生成块开始,通过递归选择具有最多构建块的分支来解析每个分支。

共识原则2

批量生产

区块链网络中的某些节点可以生成新的区块。此过程称为创作。哪些节点可以写块取决于您使用的共识引擎。在中心化式网络中,一个节点可以写入所有块,而在完全未经授权的网络中,算法必须选择每个高度的块的生产者。工作量

在像比特币这样的PoW系统中,任何节点都可以随时生成一个块,只要它能解决计算比特币问题。解决此问题需要CPU时间,因此矿工只能根据计算资源的比例生成块。

基板提供了PoW块生产引擎。插槽

基于时隙的共识算法必须具有一组已知的验证器,可以生成块。时间分配给不同的插槽,每个插槽中只有几个验证器可以生成块。在每个插槽中,验证器可以写入的块的详细信息因引擎而异。 Substrate提供Aura和Babe,它们都是基于插槽的块生产引擎。

终结性

任何系统中的用户都想知道他们的交易何时完成,区块链也不例外。在某些传统系统中,当收据被移交或文件被签名时,将发生定局。

使用到目前为止描述的块生产方案和分叉选择规则,交易将永远不会完全完成。总是有可能出现更长(或更重)的链并恢复您的交易。但是,在特定块上构建的块越多,还原它的可能性就越小。这样,块生产和适当的分叉选择规则提供了概率确定性。

当需要确定最终性时,可以将最终小工具添加到区块链的逻辑中。固定权限集的成员进行最后表决。当对一个区块投足够的票时,该区块被视为最终投票。在大多数系统中,此阈值为2/3没有外部协调(例如硬分叉),由此类小工具完成的块将无法恢复。 ”

一些共识系统将块生成与最终性联系起来。例如,确定性是块生成过程的一部分。在块N完成之前,无法生成新的块N + 1。但是,Substrate可以将这两个过程分开,并且可以单独使用任何概率确定性块引擎,也可以将其与确定性小工具结合使用以获得确定性确定性。

在使用最终小工具的系统中,必须修改分叉选择规则以考虑最终游戏结果。例如,该节点将选择包含最近完成的块的最长链,而不是选择最长链的周期。

基材共识

Substrate框架带有多个共识引擎,这些引擎提供了量产或最终性。本文简要介绍了Substrate自己的产品。欢迎开发人员提供自己的自定义共识算法。光环

Aura [4]提供了基于插槽的块生产机制。在Aura中,一组已知的权限从块中轮流出来。宝贝

BABE [5]是通过一组已知的验证程序对基于插槽的块生产的共识。在这些方面,它与光环相似。与Aura不同,时隙分配基于可验证随机函数(VRF)的评估。为每个验证者分配一个时期权重。将纪元划分为多个时隙,验证者在每个时隙中计算其VRF。对于验证器的VRF输出低于其权重的每个插槽,都允许生成一个块。

由于多个验证程序可能在同一插槽中产生一个块,因此即使在良好的网络条件下,BABE中的派生比Aura中的派生更为常见。

如果在给定的插槽中没有块的生产者,则Substrate的BABE实现也具有备用机制。这些“辅助”时隙分配使BABE可以获得恒定的块时间。工作量

PoW块的生成不是基于插槽的,也不需要已知的权限集。在PoW中,任何人都可以随时生成一个块,只要他们能够解决计算难题(通常是查找原始哈希图像)即可。可以调整此问题的难度以提供统计目标阻止时间。爷爷

GRANDPA [6]提供了块的终结性。它具有一组类似BABE的已知权重。但是,GRANDPA不生成块,它仅侦听生产引擎生成的块的“闲话”(例如上述三个)。 GRANDPA验证程序在链上投票,而不是在区块上投票,也就是说,他们对自己认为是“最佳”的区块进行投票,并且可以通过传递的方式将其投票应用于所有先前的区块。一旦超过三分之二的GRANDPA权力机构对某个特定区块进行投票,则将其视为最终投票。与运行时协调

到目前为止,最简单的静态共识算法完全可以在运行时之外运行。但是,许多共识游戏通过添加需要与运行时协调的功能而变得更加强大。示例包括PoW中的可调难度,权限证明中的权限轮换以及PoS网络中基于权益的加权。

为了适应这些共识功能,Substrate具有DigestItem的概念,该消息从节点外部(共识所在的位置)传递到运行时,反之亦然。

了解更多

由于BABE和GRANDPA都在Polkadot网络中使用,因此Web3 Foundation提供了研究级别的算法演示。

BABE研究[7]

GRANDPA研究[8]

所有确定性最终算法(包括GRANDPA)都至少需要2f +1个非故障节点,其中f是故障或恶意节点的数量。您可以在具有开创性的论文[9]或Wikipedia:关于缺陷的拜占庭式错误[10]上达成共识,以了解有关此阈值的来源以及为何理想的更多信息。

并非所有共识协议都定义一条规范链。当具有相同父块的两个块没有冲突的状态更改时,某些协议会验证有向无环图[11](DAG)。

原文:https://substrate.de/docs/en/knowledgebase/adanced/consensus

翻译:PolkaWorld社区参考链接

[1]

状态机:https://en.wikipedia.org/wiki/Finite-state_machine[2]

状态转换功能:https://substrate.de/docs/en/knowledgebase/runtime/index[3]

外部对象:https://substrate.de/docs/en/knowledgebase/learn-substrate/extrinsics[4]

光环:https://crates.parity.io/sc_consensus_aura/index.html [5]

宝贝:https://crates.parity.io/sc_consensus_babe/index.html [6]

GRANDPA:https://crates.parity.io/sc_finality_grandpa/index.html [7]

BABE研究:https://research.web3.foundation/zh-CN/latest/polkadot/BABE/Babe.html [8]

GRANDPA研究:https://research.web3.foundation/en/latest/polkadot/GRANDPA.html [9]

如有缺陷,请达成协议:https://lamport.azurewebsites.net/pubs/reaching.pdf[10]

Wikipedia:拜占庭式错误:https://en.wikipedia.org/wiki/Byzantine_fault[11]

有向无环图:https://en.wikipedia.org/wiki/Directed_acyclic_graph

温馨提示:

文章标题:共识原则

文章链接:https://www.btchangqing.cn/51140.html

更新时间:2020年07月07日

本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。

共识原则3
区块链

以太坊 2.0经济模式通读:供需与生态参与者

2020-7-7 20:59:27

区块链

2020年币圈试卷

2020-7-7 21:07:31

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索