浅析Facebook LibraBFT与比原链Bystack BBFT共识

浅析Facebook LibraBFT与比原链Bystack BBFT共识

如果说什么是区块链的灵魂,那一定是共识机制。

它是区块链的根基。无论公链或是联盟链,共识机制都从基础上限制了区块链的交易处理能力和扩展性。

2019年6月18日,Facebook 发布了自己 Libra 项目的白皮书,引发广泛关注。作为 Facebook 试图创造国际流通数字货币的重要项目,Libra 区块链采用的是 LibraBFT 共识机制,是一个为 Libra 设计的鲁棒的高效的状态复制系统。它基于一种新型的 BFT 共识算法,HotStuff。

就在 Facebook Libra 项目白皮书发布之前不久,5月17日,比原链发布了 BaaS 平台 Bystack。这是一个一主多侧链架构的商用区块链系统,主链采用 PoW 共识保证多样资产安全和去中心化,侧链提供可插拔的共识以满足不同业务需求。同时,Bystack 本身还针对侧链独创了一种 DPoS+BBFT 的共识算法。

同样是 BFT 类共识机制,LibraBFT 和 BBFT 两者有什么不同呢?

tech.mojotv.cn_Bystack一主链多侧链架构(图片来源:Bystack白皮书)

区块链共识机制的意义和现状

共识(Consensus)是分布式系统中节点对数据或网络最终状态达成的协议。由于网络环境和节点状态的不可控,共识机制需要同时考虑性能、可靠性、安全性等多方面问题。

共识机制从大的方面,可分为 PoW 等中本聪共识机制,和拜占庭容错(BFT)类共识机制两大类。BFT 共识机制广泛应用于各类联盟链。

PoW 共识在非许可(Permissionless)链上应用广泛,但是它的概率模型在提供较高可靠性的同时,牺牲了效率,浪费了大量计算资源。在具体商业应用环境中,许可(Permissioned)机制已经保证了一定程度上的节点可信度(Semi-Trust)。这样的前提下,用户更关心执行效率(TPS)和最终确定性(Finality)。这是BFT共识在联盟链中流行的原因。

tech.mojotv.cn_主流共识机制对比

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共识机制

tech.mojotv.cn_区块链应用分层与不可能三角(图片来源: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:共同和差异

tech.mojotv.cn_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 共识算法负责人王炜所说,“单一公链单一算法”这种模式已经行不通了,因为用户场景实在太多,一条公链是解决不了所有问题的。

作者:蜂鸣

参考资料:

1、本体研究院:《Facebook主导的Libra所基于的共识HotStuff是如何工作的?》

目录