拜占庭容错共识算法介绍

1. 前言

区块链的共识算法中,除了常见的工作量证明(PoW,Proof of Work)和权益证明(PoS,Proof of Stake)外,还有拜占庭容错(Byzantine Fault Tolerance, BFT)共识算法。

拜占庭容错(Byzantine Fault Tolerance, BFT)共识算法是由拜占庭将军问题衍生出来的共识算法。

拜占庭将军问题
拜占庭将军问题是Leslie Lamport在10世纪80年代提出的一个假想问题。拜占庭是东罗马帝国的首都,由于当时拜占庭罗马帝国国土辽阔,每支军队的驻地分隔很远,将军们只能靠信使传递消息。发生战争时将军们必须制订统一的行动计划。然而,这些将军中有叛徒,叛徒希望通过影响统一行动计划的制定与传播,破坏忠诚的将军们一致的行动计划。因此,将军们必须有一个预定的方法协议,使所有忠诚的将军够达成一致。而且少数几个叛徒不能使忠诚的将军做出错误的计划。也就是说,拜占庭将军问题的实质就是要寻找一个方法,使得将军们在一个有版徒的非信任环境中建立对战斗计划的共识。

在分布式系统中,特别是在区块链网络环境中,也和拜占庭将军的环境类似,有运行正常的服务器(类似忠诚的拜占庭将军),还有故障的服务器,有破坏者的服务器(类似叛变的拜占庭将军),即拜占庭错误节点。共识算法的核心是在正常的节点间形成对网络状态的共识。



2. 拜占庭容错共识算法的版本分类

拜占庭容错共识算法有3种版本,每种版本都具有各自的优缺点。这些版本分别是:
1) 实用拜占庭容错(PBFT,Practical Byzantine Fault Tolerance)
2) 联邦拜占庭协议(FBA,Federated Byzantine Agreement)
3) 授权拜占庭容错算法(dBFT,Delegated Byzantine Fault Tolerance)




3. 各种拜占庭容错共识算法版本的优缺点

下面来看看它们的优缺点:

3.1 实用拜占庭容错(PBFT,Practical Byzantine Fault Tolerance)

优点:高速、可扩展。
缺点:通常用于私有网络和许可网络。
采用者:Hyperledger Fabric、Ripple

实用拜占庭容错PBFT是首个解决拜占庭将军问题的方案,当前已被 Hyperledger Fabric 采用。PBFT 使用了较少(少于 20 个,之后会稍有增加)的预选定将军数,因此运行非常高效。它的优点是高交易通量和吞吐量,但是不足之处在于是中心化的,并用于许可网络。使用拜占庭容错机制是一种采用“许可投票、少数服从多数”来选举领导者并进行记账的共识机制,该共识机制允许拜占庭容错,允许强监督节点参与,具备权限分级能力,性能更高,耗能更低,而且每轮记账都会由全网节点共同选举领导者,允许33%的节点作恶,容错率为33%。换句话说,PBFT假设区块链上总的节点数是3f+1个,那么网络中可以容忍整个网络中最多f个节点出现拜占庭错误而不影响正确的共识。

这里简单对瑞波Ripple介绍一下:
在Ripple的共识算法中,将军(验证者)是 Ripple 基金会预先选定的,即参与投票节点的身份是事先知道的,因此,算法的效率比PoW等匿名共识算法要高效,交易的确认时间只需几秒钟。当然,这点也决定了该共识算法只适合于权限链(Permissioned chain)的场景。Ripple共识算法的拜占庭容错(BFT)能力为(n-1)/5,即可以容忍整个网络中20%的节点出现拜占庭错误而不影响正确的共识。
瑞波共识算法使一组节点能够基于特殊节点列表形成共识。初始特殊节点列表就像一个俱乐部,要接纳一个新成员,必须由该俱乐部51%的会员投票通过。共识遵循这些核心成员的“51%权利”,外部人员则没有影响力。由于该俱乐部由中心化开始,它将一直是中心化的,而如果它开始腐化,股东们什么也做不了。与比特币及Peercoin一样,瑞波系统将股东们与其投票权隔开,因此,它比其他系统更中心化。

顺便提一下,EOS公链除了使用DPoS(DPoS,Delegated Proof-of-Stake,授权权益证明)外,也使用了拜占庭容错来加速区块的确认。所以,在区块的确认时间上,EOS比起它的前身比特股要快很多,几秒内就可以完成区块的确认。


3.2 联邦拜占庭协议(FBA,Federated Byzantine Agreement)

优点:吞吐量、低交易开销和网络扩展性
采用者:Stellar

另一类拜占庭将军问题的解决方案是 FBA,已被 Stellar 等代币使用。FBA 的通用理念是每个拜占庭将军负责自身的链、消息一旦到来,通过排序建立事实。在 Stellar 中,任何人都可以成为验证者,需要用户选择去相信哪个验证者

这里简单对恒星Stellar介绍一下:
恒星Stellar项目是使用恒星共识(Stellar Consensus)来实现的。恒星共识是基于联邦拜占庭共识(FBA)。恒星共识协议(SCP,Stellar Consensus Protocol)提供了一种不依赖闭合系统实现准确记录金融交易而达成共识的方法。

恒星共识协议(SCP) 具有一组可验证的安全属性,这些属性根据如何安全地保持活力而做了优化。一旦出现分区或不当行为节点,它将会终止网络过程,直至达成共识。SCP 同时具备四种属性:去中心控制、低延迟、灵活信任机制和渐进安全(Asymptotic security)。关于恒星项目的介绍,可以参考这篇文章:
https://www.codercto.com/a/80941.html

目前比较火的免费手机挖矿项目Pi Network是基于恒星共识协议(SCP)和联邦拜占庭协议(FBA)的算法进行开发(官网 https://minepi.com/#download,邀请码 powervip。关于Pi Network更多的资料可以参考这篇文章:
https://bihu.com/article/1935912799

网上相关的资料不是很详实,根据网上查到的资料和我个人的理解,实用拜占庭容错(PBFT)和联邦拜占庭协议(FBA)这2种共识算法的区别在于:PBFT是单邦制(可以理解为一个国家就是由一个邦组成),FBA是联邦制(可以理解为一个国家由多个联邦组成)。另外,PBFT的节点是预先选定或通过授权的。FBA是一个完全可以自由加入成为节点或退出节点的共识方式,每个邦内的白名单中节点(有记账和出块权的节点)通过投票选举产生(需要至少获得该联邦2/3节点的的同意)。因此,FBA比PBFT的去中心化程度更高,但是牺牲了一定的性能。
如果要进一步验证上面的观点,最好的方法还是去查阅官方的文档甚至是代码。


3.3 授权拜占庭容错算法(dBFT,Delegated Byzantine Fault Tolerance)

优点:快速;可扩展。
缺点:每个人都争相成为根链。其中可能存在多个根链。
采用者:Neo

授权拜占庭容错算法,简称 dBFT,是一种支持通过代理投票实现大规模参与共识的拜占庭容错共识算法。在国产第一条公链小蚁Neo中,令牌持有者可以通过投票选取其支持的 bookkeeper。之后,选定的 bookkeeper 组采用 BFT 算法达成共识,并生成新区块。Neo 网络中的投票是实时的,而非因人而异的。
dBFT 可为具有个共识节点的共识系统提供f=n−13容错。这种容错也涵盖了安全性和可用性、不受将军和拜占庭错误影响,并且适合任何网络环境。dBFT 具有很好的最终性(finality),这意味着一旦最终确认,区块将不可分叉,交易将不可再撤销或是回滚。
Neo 的 dBFT 机制生成一个区块需 15 到 20 秒钟。交易吞吐量测定约为 1000 TPS。这对于公共区块链而言,这是很好的性能。通过一定优化,dBFT 具有达到一万 TPSS 的潜力,这样就可支持大规模的商业应用。
dBFT 中加入了数字身份技术,这意味着 bookkeeper 可以是真实的个人,也可以是某些机构。因此,dBFT 根据存在于其本身之中的司法判决,可以冻结、撤销、继承、检索和拥有代币兑换权。它有利于实现合规金融资产在 Neo 网络中的注册。Neo 网络从设计上,就是在必要时为此提供支持。

同样是为了解决拜占庭将军问题,授权拜占庭容错机制,是一种在Neo区块链内部实现的保证容错的共识算法。

在这个机制当中,存在两个参与者,一个是专业记账的“记账节点”,一个是系统当中的普通用户。

普通用户基于持有权益的比例来投票决定记账节点,当需要通过一项共识时,在这些记账节点中随机推选出一名发言人拟定方案,然后由其他记账节点根据拜占庭容错算法,即少数服从多数的原则进行表态,如果超过66%的节点表示同意发言人方案,则共识达成;否则,重新推选发言人,重复投票过程。

所以说,dBFT机制实际使用了一种迭代共识的方法来保证系统达成一致决定。然而,这种机制的缺点在于,当系统中有超过三分之一的记账节点停止工作时,整个区块链网络将无法提供正常的服务;当超过三分之一的节点联合作恶时,区块链将有可能发生分叉。

参考文献:
https://zhuanlan.zhihu.com/p/32585236
https://blog.csdn.net/Blockchain_lemon/article/details/84801413
https://blog.csdn.net/shangsongwww/article/details/89040823
https://blog.csdn.net/weixin_43946212/article/details/109378449

我的程序员主页:https://blog.csdn.net/powervip
我的知乎: https://www.zhihu.com/people/powervip
我的腾讯微云网盘:https://share.weiyun.com/5qT0TvG

如果你觉得这篇文章写得还可以,请帮忙点个赞,谢谢!
你的鼓励,我的动力!

猜你喜欢

转载自blog.csdn.net/powervip/article/details/111562651
今日推荐