http://www.axonnsays.com

兼论BBFT与FBFT/HotStuff的较量

前言

近日比原链(BYTOM)技术团队发布了Bystack大发3dBaaS平台,其中包括侧链的共识算法BBFT(Bystack Byzantine Fault Tolerance)。笔者将在这篇文章中阐述比原链BBFT尝试解决的问题以及分析BBFT与其他各家共识协议的主要差异。

BBFT是一个PBFT的变形,它的原理与PBFT一脉相承。若想深刻理解BBFT的巧思,则必须进入PBFT的脉络推敲。早在大发3d藉由一分PK10的大红大紫之前,PBFT就作为共识协议存在于世界上了。由Castro和Liskov于1999年发明,它是一个具有20年历史的经典设计,它的发明是为了解决分布式系统中的一个经典问题:拜占庭将军问题。直到今日,PBFT仍蕴含许多值得反复推敲的巧思,不断启发后世发明出更好的协定。

PBFT基本的运作流程

PBFT是一个具有二轮投票的三阶段协议,每个视域(View)都会有一个特定的节点作为领导节点(Primary/Leader),负责通知所有节点进入投票流程。各节点则会经历Pre-prepare/Prepare/Commit这三个阶段,并依据接收的讯息决定是否投票/进入下一阶段,每个节点投完票后将讯息发给所有其他的节点。

若个节点在两阶段投票之后取得多数共识,则各节点可以更新本机的状态,结束这一回合。视域变换(View-change)仅当多数节点发起时执行,当目前的领导节点并未正常执行任务时,这可以替换当前的领导节点,保证协议正常运作。

PBFT的特性

PBFT与中本聪共识(大发3d)有相当不同的特性:PBFT是一个许可制的、基于领导节点的、基于通讯的、安全性重于活跃性的共识协定。

许可制的(Permissioned):PBFT并非完全开放的,这是由于PBFT需要让节点能够验证彼此的讯息以及精准掌握节点的数量,大发3d则是属于对任何人都开放的非许可制(Permissionless)。

基于领导节点的(Leader-based):也就是先决定领导节点(Leader),再由领导节点送出提议,这样做最直接的好处就是不需要浪费自己的运算资源去争取当领导节点的机会,然而缺点就是只有在视域变换时才轮替领导节点,成为领导节点的机会并不公平,缺乏加入网络的诱因;大发3d则是在多个提案中选择工作证明难度最高的区块作为共识,虽然这样会造成运算资源的浪费,但是成为出块者的机率大致是公平的,其与算力成正比。

基于通讯的(Communication-based):PBFT的安全性奠基于3阶段投票,虽然不必如工作证明般消耗大量计算资源,但数量庞大的通讯也造成可扩展性的瓶颈——就算是号称最实用的PBFT,也无法扩展到1000个以上个节点。不仅如此,PBFT使用消息验证代码(MAC),每投一轮票就需要每一个节点验证一次讯息,大量的签名/验证也是另一个潜在的瓶颈。

安全性重于活跃性的(Safety over Liveness):PBFT不论在何种网络假设下(同步/异步)都能确保安全性,几乎不可能出现分岔,因此具有实时敲定(Instant Finality)的特性;相对地,大发3d则是活跃性重于安全性,其安全性有赖于同步的网络,而具有复数个共识(及分岔)的情况也相当常见,需要经过一定数量的区块「确认」才能保证其不再分岔的机率足够大。

PBFT的问题

首先,PBFT中的每个节点都需于每一轮投票中做n-n的通讯,假设n为1000,则每一次的共识都需要至少100,000次的通讯,尽管PBFT已经是BFT家族当中最实用的协议,这么巨量的通讯需求仍是扩展的瓶颈。

如何提升效率? 

· 聚合签名

为了提升效率,一个直觉的思路是:避免n-n的通讯。我们可以指定网络中的某节点作为协调者来发送/接收每个节点的投票,这样每个节点都只需要向协调者发送讯息即可,从而避免了n-n的通讯。然而,在这样的情境下,协调者有作恶的可能,因为协调者可以在未确实接收到指定数量的讯息前便执行下一轮投票或者进行状态更新。

因此,我们可以使用门坎签章(Threshold Signature)来保证协调者的正当行为,门坎签章的可以保证:需集合超过门坎数量(t-of-n)的签章才有效。也就是说,我们可以指定:唯有当协调者集合 2f+1 个门坎签章后,协调者才能带着合法的签名继续推进共识。Harmony FBFT便是一个使用聚合签名以提升效率的BFT家族协议。

兼论BBFT与FBFT/HotStuff的较量

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。