百度超级链学院第一期“微访谈”已经正式开讲啦!
第一期由小X姐姐带来关于“区块链共识介绍及超级链共识框架解析”的分享
Q1:先来科普一下什么是“区块链的共识机制”吧?
区块链系统是一个去中心化的分布式系统,节点是分散在各处,需要设计一套完善的机制,以维护系统的运作顺序与公平性,统一区块链的版本,同时奖励提供资源维护区块链的使用者,并惩罚恶意的危害者。这样的机制,需要依赖某种方式来证明,证明是由谁取得了一个区块链的记帐权,并可以获取打包这一个区块的奖励;或者是谁意图作恶,会获得一定的惩罚,这就是区块链系统的共识机制。
上面的介绍比较抽象,下面会收敛一下。我们知道区块链应用和传统的互联网应用的最大的区别在于应用的维护方不属于单个实体内部,节点之间互不信任,并且一般的公链网络规模会比较庞大。在这样的场景下,如何保证网络中所有节点的最终一致性是一件非常困难的事情,区块链的共识机制就是解决这个问题的。总结一下:区块链的共识机制解决的是“不可信环境下全球部署的分布式一致性问题”。
Q2: 常见的共识类型及应用主要有哪些呢?
自比特币网络创建以来至今已经经过10多年了,区块链的共识也有很大的发展,近年来不断有新的算法相继被提出,下面这个图简单总结一下常见的共识机制及其应用。
Q3: 百度超级链共识框架的设计初衷是怎么样的呢?
超级链设计上是一个通用的区块链框架,用户可以很方便地依据自己的应用场景进行选择或者定制自己的功能。共识机制是区块链系统中一个非常重要的模块,是整个网络安全性保障的重要部分,所以共识机制的设计是区块链网络中的一个难点。同时不同的共识机制,适合不同的应用场景。
为了帮助用户能够轻松快速地选择和定制自己的共识机制,超级链设计了一个能够复用底层共识安全的共识框架,用户基于这样的框架可以轻松地定义自己的链,而不需要考虑底层的共识安全和网络安全。并且结合着超级链的治理机制,能够实现共识的热插拔升级。
Q4:前面提到了“结合着超级链的治理机制,能够实现共识的热插拔升级”,那么超级链的共识为什么要设计成热插拔的呢?这个热插拔主要体现在哪些方面呢?
超级链设计上是一个平行链的架构,不同链创建时可以选择自己的共识机制。但是随着业务的发展,创建链时选定的共识类型或者共识参数可能不能很好地满足业务的需求,所以会存在升级共识的需求。因此超级链的共识机制才设计成了热插拔的形式。
超级链的热插拔共识主要体现在以下3个方面:
1. 平行链可以通过配置创世块的方式选择符合自己应用场景的共识;
2. 单链内的共识类型可以通过系统的治理机制进行共识的热升级;
3. 平行链也可以选择复用主链的共识从而共享主链的共识安全。
Q5:我们了解了超级链共识机制设计的背景,那共识框架究竟是什么样子呢?
上图就是超级链共识模块的整体架构图。自底向上主要包括3层:
1 共识公共组件层:该层主要是不同共识可以共用的组件,包括共识公共节点Consensus
Interface、Chained-BFT、GPS原子钟等,它可以为链提供底层的共识safety保障;
2 共识类型层:中间层为超级链以及支持或者即将支持的共识类型,主要包括TDPoS、Pow、授权共识等。基于底层的共识安全能力,这一层,用户可以定义有自己特色的共识类型,如类似DPoS这种选举机制的共识,也可以定义其自己链的Staking等相关逻辑;
3 可插拔共识层:最上层是可插拔共识的运行态,包括Step Consensus 和Pluggable Consensus两个实例,该层主要负责维护了链从创建到当前高度的共识的所有升级历史。
Q6:既然说“不同链可以拥有自己共识”,那么在单链内共识的流程又是怎样的呢?
超级链单链内与共识交互的主要函数有2个,分别是Miner和SendBlock。
Miner是挖矿的主流程,SendBlock是节点接受到一个新的区块验证的主要过程。
超级链的共识整体流程如上图所示,主要包括7个步骤:
1. 用户提交交易到网络,交易执行完后会进入未确认状态,并记录在交易的未确认列表中TxPool中;
2. 节点的Miner流程通过访问Consensus模块判断自己是否为当前的矿工;
3. 当节点判断自己是矿工时需要从TxPool中拉取交易并进行区块的打包;
4. 当矿工完成打包后会将区块广播给其他的验证节点,同时会通过步骤7将区块写入到账本;
5. 如果某个时刻其他节点判断自己是矿工,同样地会按照上述1-5流程进行区块打包,打包完后会将区块广播给该节点;
6. 节点收到区块后,会调用consensus模块进行区块的有效性验证;
7. 矿工打包完后或者验证节点收到一个有效的区块后,将区块写入账本。
Q7:那超级链共识框架接口以及使用场景具体有哪些呢?
超级链整个共识框架主要有2套接口,分别是共识基础接口和共识安全接口,适用的场景不同,用户可以根据其自己的需求进行选择。
场景一:用户希望定义自己的共识功能并独立负责共识安全;那么用户仅需要实现共识基础接口即可,就可以和整体的流程打通;
场景二:用户希望定义自己的共识功能,但是希望框架底层能帮助保证共识安全;那么用户需要实现共识基础接口和共识安全接口,这样用户在设计自己的共识时就不需要考虑底层共识safety问题;
Q8:共识基础接口是什么呢?
共识基础接口是共识模块的核心接口,是与core模块交互的主要部分。其中最核心的部分主要是CompeteMaster和CheckMinerMatch两个。CompeteMaster是一个节点判断自己是否为主的主要逻辑,CheckMinerMatch是节点收到一个区块验证其区块有效性的主要逻辑。
Q9:那共识安全接口又是什么?
共识安全接口是保证底层共识安全的核心接口,共识框架底层支持了Hotstuff算法的高性能的共识安全模块Chained-BFT。暴露出了 PacemakerInterface 和 ExternalInterface 两套接口,其中PacemakerInterface 是Chained-BFT的活性保证,此外为了扩展Chained-BFT安全模块能够应用于更多的仲裁类型,底层Chained-BFT设计上不需要理解仲裁的具体内容,通过ExternalInterface 会与外层的共识进行通信。
原文链接:https://xuperchain.baidu.com/n/news/9a6eb1cdfbbf01c09b2f11f24b33673f