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

1、什么是共识机制?

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

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

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

2、BFT的原理

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

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

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

(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%的恶意节点即可发起攻击。

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

【PBFT】拜占庭容错的更多相关文章

  1. PBFT(拜占庭容错)简述

    共识算法 区块链中最重要的便是共识算法,比特币使用的是POW(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算力变的不怎么重要了,而今PO ...

  2. 实用拜占庭容错算法PBFT

    实用拜占庭容错算法PBFT 实用拜占庭容错算法PBFT 96 乔延宏 2017.06.19 22:58* 字数 1699 阅读 4972评论 0喜欢 11 分布式架构遭遇的问题 分布式架构会遭遇到以下 ...

  3. 一文读懂实用拜占庭容错(PBFT)算法

        在区块链中有一个著名的问题,就是拜占庭将军问题,对于拜占庭将军问题,网上的文章已经多得不要不要了,今天和大家分享的是其相关的实用拜占庭容错算法,一起来看看吧. 实用拜占庭容错算法(Practi ...

  4. 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述

    共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...

  5. 理解分布式一致性:拜占庭容错与PBFT

    理解分布式一致性:拜占庭容错与PBFT 拜占庭问题 拜占庭容错BFT PBFT(Practical Byzantine Fault Tolerance) why 3f+1 ? PBFT 的优点 PBF ...

  6. PBFT_拜占庭容错算法

    根据论文<Practical Byzantine Fault Tolerance and Proactive Recovery>整理 Practical byzantine fault t ...

  7. Hyperledger Fabric【区块链学习一】

    Hyperledger Fabric 学习 什么是区块链 什么是区块链在我们没有接触的时候,只知道它是一个去中心化的存储方式.当我们发生交易,或者动作的时候我们会将记录通知给所有参与者共同维护,达到去 ...

  8. 区块链核心技术:拜占庭共识算法之PBFT

    PBFT是Practical Byzantine Fault Tolerance的缩写,意为实用拜占庭容错算法.该算法是Miguel Castro (卡斯特罗)和Barbara Liskov(利斯科夫 ...

  9. Filecoin: 影响力容错(PFT)和预期共识(EC)

    名字翻译:Power Fault Tolerance-影响力容错 关于这个名字翻译,小编思考了大约2周时间,期间也跟各路技术牛人进行了交流. The Power Fault Tolerance mod ...

随机推荐

  1. vue里面的this指向

    this.$http.jsonp(api).then(function(response){ console.log(response); console.log(this); this.list=r ...

  2. day12—jQuery ui引入及初体验

    转行学开发,代码100天——2018-03-28 按照所下载教学视频,今天已进行到jQuery UI的学习中.注:本人所用教学视频不是太完整,介绍的内容相对简单,有些只是带过.其他时间中,仍需继续针对 ...

  3. STP基本概念及实验

    相关命令(华为交换机): stp enable(在交换机开启stp:stp使能) display stp 查看stp状态 stp mode stp/rstp/mstp  启用stp/rstp/mstp ...

  4. 06:(h5*)Vue第六天

    目录 1:iView 2:  element 3:  vuex 正文 1:i-view 1:装包 npm install view-design --save 2:导包 import ViewUI f ...

  5. C#=> 栈模仿堆的操作

    //原理,利用两个栈,互相作用,来模仿堆的效果,先进先出.. using System; using System.Collections.Generic; using System.Linq; us ...

  6. 如何配置JedisPool的参数

    转自:http://blog.csdn.net/huahuagongzi99999/article/details/13631579 如何配置Pool的参数 JedisPool的配置参数很大程度上依赖 ...

  7. 使用requests_html抓取数据

    from requests_html import HTMLSession import json class YejiCollege: def __init__(self, url): self.u ...

  8. 《剑指offer》面试题8 旋转数组的最小数字 Java版

    (找递增排序旋转数组中的最小数字) 书中方法:这种题目就是要寻找数组的特点,然后根据这个特点去写.旋转后的递增数组分为两段递增序列,我们找到中点,如果比第一个元素大,表示在第一段递增序列里,如果比第一 ...

  9. P4195 【模板】exBSGS/Spoj3105 Mod

    传送门 首先要懂得 $BSGS$,$BSGS$ 可以求出关于 $Y$ 的方程 $X^Y \equiv Z (mod\ mo)$ 的最小解,其中 $gcd(X,Z)=1$ $exBSGS$ 算是 $BS ...

  10. rabbitmq部署安装

    1.安装rabbitmq需要提前安装erlang,相关下载地址:http://www.erlang.org/downloads,需要注意:默认安装的RabbitMQ 监听端口是5672     启动和 ...