如果说什么是区块链的灵魂,那一定是共识机制。
它是区块链的根基。无论公链或是联盟链,共识机制都从基础上限制了区块链的交易处理能力和扩展性。
2019年6月18日,Facebook 发布了自己 Libra 项目的白皮书,引发广泛关注。作为 Facebook 试图创造国际流通数字货币的重要项目,Libra 区块链采用的是 LibraBFT 共识机制,是一个为 Libra 设计的鲁棒的高效的状态复制系统。它基于一种新型的 BFT 共识算法,HotStuff。
就在 Facebook Libra 项目白皮书发布之前不久,5月17日,比原链发布了 BaaS 平台 Bystack。这是一个一主多侧链架构的商用区块链系统,主链采用 PoW 共识保证多样资产安全和去中心化,侧链提供可插拔的共识以满足不同业务需求。同时,Bystack 本身还针对侧链独创了一种 DPoS+BBFT 的共识算法。
同样是 BFT 类共识机制,LibraBFT 和 BBFT 两者有什么不同呢?
Bystack一主链多侧链架构(图片来源:Bystack白皮书)
区块链共识机制的意义和现状
共识(Consensus)是分布式系统中节点对数据或网络最终状态达成的协议。由于网络环境和节点状态的不可控,共识机制需要同时考虑性能、可靠性、安全性等多方面问题。
共识机制从大的方面,可分为 PoW 等中本聪共识机制,和拜占庭容错(BFT)类共识机制两大类。BFT 共识机制广泛应用于各类联盟链。
PoW 共识在非许可(Permissionless)链上应用广泛,但是它的概率模型在提供较高可靠性的同时,牺牲了效率,浪费了大量计算资源。在具体商业应用环境中,许可(Permissioned)机制已经保证了一定程度上的节点可信度(Semi-Trust)。这样的前提下,用户更关心执行效率(TPS)和最终确定性(Finality)。这是BFT共识在联盟链中流行的原因。
主流共识机制对比
BFT共识机制
BFT( Byzantine Fault Tolerance)即拜占庭容错。它是分布式计算容错技术。
由于硬件错误、网络拥塞或中断、以及遭到恶意攻击等原因,计算机和网络可能出现不可预料的行为。拜占庭容错技术被设计用来处理这些异常,在容错的基础上达成共识。
与从比特币衍生出的中本聪共识不同,在BFT类协议中,一旦达成共识,则直接形成确定性结果,而不是中本聪共识的概率上的最终一致。
BFT 类共识在金融场景及联盟链场景中应用甚广。同时随着技术进步,公有链场景下应用的 BFT 共识也在不断出现。
PBFT 共识机制
实用拜占庭容错算法(Practical Byzantine Fault Tolerance Algorithm,PBFT)是首个实用的在异步分布式网络中实现拜占庭容错的共识算法。
PBFT 算法可工作在异步环境中,并且优化了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行——这点已得到广泛验证。PBFT 算法可以在失效节点不超过总数1/3的情况下同时保证一致性(Safety)和交付保证(Liveness)。
无论 Facebook Libra 的 LibraBFT 共识协议,还是比原链 Bystack 的 BBFT共识机制,都在底层上充分吸收了 PBFT 的优点,采用了已有的经过时间验证的处理方式,并在 PBFT 的一些短板和不足之处分别做出了各自不同方向的革新。
Facebook Libra 的 LibraBFT 共识协议
前面已经说到,Libra 采用基于 HotStuff 的 LibraBFT 共识。
HotStuff 是一个三阶段的 BFT 算法。它将视图切换流程和正常流程进行合并,不再有单独视图切换流程,降低了视图切换的复杂度。
在 HotStuff 中切换视图时,系统中的某个节点无需确认「足够多的节点希望进行视图切换」这一消息再通知新的主节点,而是可以直接切换到新视图并通知新主节点。HotStuff 把确认「足够多的节点希望进行视图切换」这一消息的行为放进了正常流程中。由此把 PBFT 的两阶段确认扩展成了三阶段确认。
HotStuff 的另一个重要改变,是将 PBFT 的网状通信网络拓扑变成了星形通信网络拓扑。HotStuff 中,每次通信都依靠主节点。节点不再通过 p2p 网络将消息广播给其它节点,而是将消息发送给主节点,由主节点处理后发送给其它节点。得益于星型通信网络拓扑,系统的通信复杂度大大降低。和 PBFT 类似,主节点会提议进行状态迁移,其它节点收到该状态迁移要求后,会检查其合法性。
LibraBFT 在 3f+1 个验证节点之间收集投票,这些验证者可能是诚实的节点也可能是拜占庭节点。在网络中存在 2f+1 个诚实节点的前提下,Libra能够抵御 f 个验证节点的双花攻击和分叉攻击。
LibraBFT在一个有全局统一时间(GST),并且网络最大延时(ΔT)可控的部分同步网络中是有效的。并且,LibraBFT在所有验证节点重启的情况下,也能够保证网络一致性。
比原链 Bystack 的 BBFT共识机制
区块链应用分层与不可能三角(图片来源:Bystack白皮书)
根据 Bystack 白皮书,BBFT 是一种基于实用拜占庭容错 PBFT 的衍生共识,是一种分层拜占庭容错共识算法。在保证拜占庭容错,即允许少量节点(f≤N/3)作恶的情况下,具有以下特性:
(1)配置性(Configurable)
采用模块化可插拔设计,按需配置,并在一定程度上保证对新技术的兼容(Future-Proof)。
这是 Bystack 的一个核心竞争点。跨链概念近几年一直有受到广泛关注,也是区块链发展的重要方向。支持模块化的插拔,使得 Bystack 拥有跨链方向的想象空间,有能力形成一个真正扩展性强、能兼容其他主流共识机制的区块链系统。
这样的兼容能力使得 BBFT 有能力让其他的联盟链公链成为自己的侧链,让自己不仅仅是一个区块链操作系统,而且形成一个区块链操作系统生态。这样一来,想象空间就大了。
不过当然,要达到这样的程度,技术实现上可能任重道远。兼容性是一个动辄消耗大量研发成本的方向,它不难,但是繁琐。BBFT 很难一步登顶一开始就做到最好,目前只能一步一步来。
(2)适应性(Adaptive)
即针对不同网络环境提供稳定的执行效率。
BFT 需要节点之间互相交换验证结果以取得多数共识。一般来说,每个节点需要得到足够多(≥(2/3)*N)的来自其他节点的回复才能做出有效判断。网络延时直接影响信息交互效率,特别在跨地域跨境应用中,延时将成为网络运行的瓶颈。
在 BBFT 中,共识节点维护当前网络拓扑,按最短路径原理相近的节点采取优先通信。对通信的聚合可以进一步降低延时。同时类似PBFT,BBFT 中领导节点(Leader)的角色被弱化,共识节点拿到超过2/3票数就可以做出判定,从而在领导节点通信受到阻塞的情况下,也不会对整个网络决策产生巨大影响。
(3)扩展性(Scalable)
保证共识复杂度随网络容量线性(Linear)或低于线性(Sub-Linear)增加。
一方面共识节点越多网络的可靠性相对越高;另一方面,传统 PBFT 中节点通信的复杂度 O(N^2) 随网络容量指数级增长,极大限制了节点数目。BBFT中对消息的有效聚合可以有效减少消息发送的次数,从而保证 O(N) 的复杂度要求。与网络拓扑相结合,可以把网络分割为多层结构,消息数据可以在同层内有效共享,以多签聚合的形式跨层传播。多签信息验证可以使用现有的成熟的
方案,例如基于 Shnorr 签名的 MuSig 算法,可以在保证多签验证效率的同时,抵御Rogue Key Attack攻击。
(4)异构性(Heterogeneous)
分离共识的验证和通信。
共识达成需要验证和通信,但两者并没有很强的关联。采取低耦合的共识框架可以进一步提高网络可靠性和效率。
验证模块往往取决于具体用户逻辑,对算力和安全性都有一定要求。通信模块和用户逻辑相对独立,主要处理网络连接和请求。网络拓扑和最短路径的计算和选择可以在这里完成。由于和用户逻辑无关,通信模块可以以抽象层(AbstractionLayer)或者中间件(Middleware)的形式和验证对接。
异构带来的优势还体现在用最优的工具做最适合的事。验证和通信允许运行在不同的系统上、不同的操作环境中,针对不同硬件的算力优势和安全保证(TrustZone)来发挥最大效能。
BBFT 的两大主要特点在于:
多层结构。根据网络进行分层。传统 BFT 是单层结构,只有一个领导节点和若干处于同等地位的共识节点。BBFT 的创新在于大领导下面还有小领导,如果领导出问题,不至于对网络产生较大影响,相当于弱化了领导的作用。而且由于是多层结构,可以把网络通信分流再组合,优化网络通信的延时和数量。
传统 PBFT 的通信复杂度是指数级的,难以扩展,网络里面随着节点数暴涨,整个网络延迟可能很严重。BBFT 通过分层和加密签名的聚合,对整个网络结构有效组合,可以保证通信复杂度线性增长,而不是指数级增长。
可配置性。Bystack 上的侧链工程其实分三个模块,一是底层共识算法,二是网络划分,三是签名聚合。其中,网络划分和签名聚合是相对独立的模块,可以使用不同的网络分层算法、签名聚合算法与共识层的算法进行搭配。可以根据具体用户场景灵活选用不同的合理方案。
LibraBFT vs BBFT:共同和差异
LibraBFT 与 BBFT
LibraBFT 将 PBFT 的网状通信网络拓扑变成了星形通信网络拓扑,以降低系统通信复杂度;BBFT则使用多层结构把网络通信分流再组合,优化网络通信的延时和数量。
LibraBFT 将视图切换流程和正常流程进行了合并,把 PBFT 的两阶段确认扩展成了三阶段确认;BBFT 则将经典 BFT 算法中产生、预最终状态与最终状态三个状态修改为只有一个最终确认状态。
两者都可看做是 PBFT 共识的升级,吸收了现有 BFT 类共识的成果和优点,并在此基础上做出不同方向的扩展。LibraBFT 共识机制更多是 PBFT 基础上的一种革新,更多关注算法本身,对 PBFT 有很多修改和优化的方面;BBFT 更多是在层级上进行分层控制,更多是一种系统全局思维。BBFT 希望达到的,不只是一种高效的共识机制,更是能融合其他共识机制的共识机制。维度上,BBFT 是可以让 LibraBFT 直接接入,在侧链上利用对方所有优势的。LibraBFT 是第一序改变,BBFT 是第二序改变。
可以明显看出,Bystack 更加关注利用好现有共识机制,将不同的共识机制整合、取长补短,这在 Bystack 整体架构上表现就十分突出,比如主侧链采用不同共识并有机结合、侧链使用 DPoS+BBFT 的混合共识算法并具备可配置性……Bystack 不只是想做区块链的操作系统,它实际上有做操作系统的操作系统的意思。
区块链共识机制的研究,已经进行很长一段时间,但从 PoW 共识提出到现在,并没有说得上范式突破的进展。
也许让区块链兼容其他链的共识机制,实现平滑跨链,让任何一条链都可以作为一个侧链接入进来,可以成为区块链方向的一个范式突破,带来全新的想象空间。也许这也是现在跨链概念比较火爆的原因。
也许正像 Bystack 共识算法负责人王炜所说,“单一公链单一算法”这种模式已经行不通了,因为用户场景实在太多,一条公链是解决不了所有问题的。