共识机制堪称区块链的核心。我们知道,EOS、Hyperledger以及Stellar等著名的项目,都采用了BFT(拜占庭容错)共识机制,那么,BFT到底是什么鬼?和其它共识机制相比,又有什么优势和特点呢?

1、什么是共识机制?

所谓共识机制,就是区块链中的节点,其中包括诚实节点和恶意的节点,就如何写入一个区块达成共识。

我们以最熟悉的比特币为例,因为有比特币的奖励,所以矿工们都会争夺每十分钟一次的记账权。公平起见,比特币采用了PoW(工作量)证明的共识机制,也就是通过增加算力来增加获得记账权的概率。

PoW的容错性是50%,也就是说只要超过一半的节点是诚实的,就可以保证区块链数据的有效性。不过,PoW存在出块慢、吞吐量小、耗电大的局限,因此PoS、BFT等共识机制也在不断被广泛应用。

2、BFT的原理

下面,我们先回到中世纪的西方世界。想象一下,强大的拜占庭帝国的几支部队在一个敌人的城市之外扎营,每支部队都由自己的将军指挥,将军只能通过信使互相沟通。在观察敌人后,他们必须决定共同的行动计划。然而,其中一些将军可能是叛徒,试图阻止忠诚的将军达成协议。将军必须决定何时攻击这座城市,但他们需要大部分军队同时进行攻击才有胜算。

【PBFT】拜占庭容错-LMLPHP

                    协同进攻方能取胜,不协同进攻将会失败

为了取得战斗的胜利,将军们必须有一个算法来保证:

(a)所有忠诚的将军采取同一行动计划;

(b)少数叛徒不能使忠诚的将军采取不良计划。

忠诚的将军们都会按照算法所说的去做,但叛徒可以做任何他们想做的事情。无论叛徒做什么,算法都必须保证上述条件(a)。忠诚的将军不仅应该达成协议,而且应该就合理的计划达成一致。

在此我们将这个寓言放到区块链中:故事中的“将军”是参与运行区块链(数据库)分布式网络的各方,他们来回进行通讯的信使就是通过网络进行通信的方式。 “忠诚将军”的集体目标是攻占敌军----写入一个大家公认的区块记录。

在我们的寓言中,有效的信息将是决定支持攻击的正确机会。对于忠诚的区块链参与者而言,他们有兴趣确保区块链(数据库)的完整性,从而确保只接受正确的信息。另一方面,叛变的将军将是任何试图伪造区块链(数据库)信息的一方,他们的潜在动机有很多种:可能是试图花费他实际上并不拥有的数字货币,或者是不想履行之前已经签署和提交的智能合同中所述义务等等。

区块链的力量在于它需要在一个分布式的网络中、其中可能或者肯定有“恶意节点”----如同拜占庭将军们所处的境地,也能达成正确的共识。

各种计算机科学家已经从寓言中概述了拜占庭将军问题的一些潜在解决方案,用于在区块链系统中建立共识的实用拜占庭容错算法(PBFT),是那些潜在的解决方案之一。简单地说,PBFT的作用如下:每个“将军”维持一个内部状态(持续的特定信息或状态),当“将军”接收消息时,它们将消息与其内部状态结合使用,以运行计算或操作。这种计算反过来告诉这个“将军”如何思考有关信息。然后,在达成关于新消息的个人决定之后,这个“将军”再与系统中所有其他“将军”共享该决定,最后根据所有将军提交的全部决定,确定共识决定。

算法的研究结果显示,当“叛变将军”少于将军总数的三分之一时,“忠诚将军”将可以做出正确的决定并达成一致。

下面我们看这个例子,一共三个将军,其中一个是发令将军A、两个是普通将军B和C。当A告诉B攻击而告诉C撤退时,B和C互相发送消息,因为他俩都是忠诚的,都将如实转发A的消息。这样B和C都不能弄清楚到底谁是叛徒----因为不确定A是叛徒、或者是否另一个普通将军可能伪造了据称来自A的信息。可以证明,如果n是将军总数,而t是其中的叛徒数量 ,那么只有当n> 3t并且通信是同步的时候,拜占庭将军问题才能得到解决。

3、结论

与最传统的PoW共识机制相比,PBFT有以下优势:

1、效率高

PBFT要求所有节点之间的两两通信,因此这种通信机制要求节点数量不能太多,通常是几十个,在这种模式下,节点达成一致的速度更快,延时更低。

2、吞吐量高

节点数量的控制,使PBFT网络不用像大型PoW网络那样,受限于处理能力最低的节点;因此带来全网吞吐量的大幅提升。

3、节能

无须使用工作量证明的耗电模式,因此更加节能环保。

所谓有得必有失,相对而言,PBFT又有以下劣势:

1、可扩展性及去中心化程度较弱

由于节点数量的限制,因此可扩展性较弱;同时节点需要选举、或者许可,不像PoW节点那样可以自由加入,去中心化程度较弱。

2、容错性较低

PoW网络的容错性是50%,也就是须防范51%攻击;而PBFT容错性只有三分之一,也就是34%的恶意节点即可发起攻击。

【PBFT】拜占庭容错-LMLPHP

原文:https://www.jianshu.com/p/6420eb1661a0

05-12 16:50