精华内容
下载资源
问答
  • 区块链中实用拜占庭容错共识机制的研究与改进,王若琪,徐明昆,区块链技术是近年来出现的具有革命性的技术,通过运用数据加密、时间戳、分布式共识等手段,实现去中心化、去信任的点对点交易。
  • 基于评分机制的实用拜占庭容错共识算法,李景然,亓峰,针对区块链的实用拜占庭容错(PBFT)共识算法中存在的网络节点扩展性差和主节点选取不合理等问题,通过引入评分机制,提出了基于评分
  • 拜占庭容错共识(PBFT)

    千次阅读 2020-12-15 15:26:32
    文章目录一、拜占庭容错共识1. 什么是PBFT拜占庭将军的问题是什么?pBFT 原理2. 与最传统的PoW共识机制相比,PBFT优势和劣势二、参考 一、拜占庭容错共识 1. 什么是PBFT 共识机制堪称区块链的核心。我们知道,EOS、...

    一、拜占庭容错共识

    1. 什么是PBFT

    共识机制堪称区块链的核心。我们知道,EOS、Hyperledger(之前0.x是,现在2.x已经不是。现在是Raft共识: Raft共识可以处理集群中部分节点的崩溃故障,但不能处理恶意节点行为,因此通常用于节点身份已知的环境中,例如许可制区块链 Hyperledger Fabric 就使用了基于Raft共识的排序服务。)等著名的项目,都采用了BFT(拜占庭容错)共识机制,那么,BFT到底是什么?

    什么是 pBFT?
    Practical Byzantine Fault Tolerance ,实用拜占庭容错。

    什么是 BFT?
    Byzantine Fault Tolerance ,拜占庭容错。

    区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今POS的变体DPOS(Delegated Proof of Stake,股份授权证明)进一步削减算力的浪费,同时也加强了区块链的安全性。
    不过,对于不需要货币体系的许可链或者私有链而言,绝对信任的节点,以及高效的需求上述共识算法并不能够提供,因此对于这样的区块链,传统的一致性算法成为首选,RAFT。

    拜占庭将军的问题是什么?

    简单地说,是一种少数服从多数的问题。拜占庭罗马帝国的每块封地都驻扎一支由将军统领的军队,将军与将军之间只能靠信差传递消息。在战争时期,拜占庭军队只有占据人数优势情况下,才能夺取目标的胜利。但在军队内有可能存有叛徒,当敌军与之联合起来大于忠诚将军数量时,进攻就会失败。

    pBFT 算法的提出主要是为了解决拜占庭将军问题。

    pBFT 原理

    POS、PBFT共识算法的介绍
    参考URL: https://mathpretty.com/9602.html
    pBFT 原理
    参考URL: https://zhuanlan.zhihu.com/p/71075569

    基于拜占庭将军问题,PBFT算法一致性的确保主要分为这三个阶段:预准备(pre-prepare)、准备(prepare)和确认(commit)。流程如下图所示:

    在这里插入图片描述我们首先解释一下上面各个符号表达的意思:

    • C表示客户端;
    • 0,1,2,3表示4个节点;
    • 0在这里为主节点,1,2,3为从节点;(注意,这里其他节点也可以作为主节点,若0发生错误只能由服务器监测。如果服务器在一段时间内不能完成客户端的请求,则会触发视图更换协议,将其他节点换为主节点)
    • 3为故障节点;

    下面我们结合上图,详细说一下PBFT的步骤:

    1. Request:请求端C发送请求到主节点,这里是0节点;
    2. Pre-Prepare:节点0收到C的请求后进行广播,扩散至123;
    3. Prepare:123节点收到后记录并再次广播,1->023,2->013,3因为宕机无法广播;(这一步是为了防止主节点给不同从节点发送不同的请求)
    4. Commit:0123节点在Prepare阶段,若收到超过一定数量(2F,实际使用中,F为可以容忍的拜占庭节点个数)的相同请求,则进入Commit阶段,广播Commit请求;
    5. Reply:0123节点在Commit阶段,若其中有一个收到超过一定数量(2F+1)的相同请求,则对C进行反馈;

    根据上述流程,在 N ≥ 3F + 1 的情況下一致性是可能解決,N为总计算机数,F为有问题的计算机总数。

    一个例子:
    下面我们来举一个PBFT(实用拜占庭容错算法)的例子来进行说明。

    我们假设N=4,F=1,即有四个节点,其中有一个节点是坏的,我们还使用上面的图,即节点3为故障节点。

    1. 请求端C发送请求到0节点,假设这里请求内容为“1”;
    2. 节点0收到C的请求后进行广播,将请求内容“1”扩散至节点123;
    3. 节点1、2、3收到后内容“1”后,再次广播,节点1->023,节点2->013,节点3因为宕机无法 广播;
    4. 节点0,1,2会在上一阶段分别收到三个请求内容“1”,均超过了2个,于是节点0、1、2会分别广播请求内容“1”;
    5. 此时如果一个节点(0,1,2中任意一个)收到3即(2+1)条commit消息,即对C进行反馈。

    一个问题说明 — 为什么至少需要N=3F+1个节点
    我们在上面讲到,当网络中有F台有问题的计算机时,至少需要3F+1台计算机才能保证一致性问题的解决,我们在这里讨论一下原因。

    我们可以考虑:由于有F个节点为故障或被攻击的节点,故我们只能从N-F个节点中进行判断。但是由于异步传输,故当收到N-F个消息后,并不能确定后面是否有新的消息。(有可能是目前收到的N-F个节点的消息中存在被攻击的节点发来的消息,而好的节点的消息由于异步传输还没有被收到。)

    我们考虑最坏的情况,即剩下F个都是好的节点,收到的中有F个被攻击的节点,故我们需要使得收到的中好节点的数量N-2F大于被攻击节点的数量F,于是有N-2F>F,即N>3F,所以N的最小整数为N=3F+1。

    2. 与最传统的PoW共识机制相比,PBFT优势和劣势

    1、效率高

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

    2、吞吐量高

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

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

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

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

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

    2、容错性较低

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

    在这里插入图片描述表 共识算法对比 来源:中国信息通信研究院,2018 年8 月

    总结:
    pBFT 的优点
    高效,由于各个节点达成共识是在同一时刻决定的首先,所以pBFT 无需等待确认。
    节能,因为pBFT 是无需挖矿的,所以pBFT 不用耗能。

    pBFT 的缺点:
    中心化,由于要保证各个节点间的频繁的通信,所以节点数不能太多。
    门槛高,由于pBFT 不能防止女巫攻击,也就无法防御一个恶意用户用多个账户来进行共识的造假行为,所以需要审核加入节点。

    所以pBFT 比较适合需审批的联盟链,不太适合做无条件加入的公链。

    3. BFT共识开发库

    区块链主流共识算法的15个开源实现
    参考URL: https://zhuanlan.zhihu.com/p/99403520

    Tendermint

    BFT共识算法可以应对分布式系统中的拜占庭故障(Byzantine failures),也就是可以在集群中部分节点存在恶意行为时依然保证整个系统的正常工作。

    Tendermint Core 是一个拜占庭容错的中间件,可以安全的将任何语言开发的状态机复制到集群中的其他机器上。Tendermint Core已经被用于Cosmos、币安链等多种公链环境中。

    在这里插入图片描述
    Tendermint Core的协议详情可以参考这里,开发教程访问这里:tendermint开发详解(http://xc.hubwiz.com/course/5bdec63ac02e6b6a59171df3?affid=csdn7878)。

    开发语言:Go
    下载地址:https://github.com/tendermint/tendermint

    Tendermint Core是一种拜占庭容错(BFT)共识引擎,可以抵御双重攻击,并且能够容忍网络中一组高达1/3的拜占庭角色。Tendermint应用程序区块链接口(ABCI)平台是一个适用于区块链应用程序开发人员的工具包。该工具包与任何编程语言兼容,允许对仅运行业务逻辑的去中心化应用程序进行更高级别的开发,而无需在共识层上进行更低级别的修补。Ethermint等平台建立在Tendermint ABCI平台之上。

    另一个建立在Tendermint ABCI之上的项目是Cosmos Network,它被设计为“区块链互联网”。Cosmos设想了一个可互操作的多链网络,它提供了在独立区块链(称为区域)之间无信任地交换加密资产的方法,通过称为Cosmos Hub的主集线器链。为了使区块链开发人员尽可能轻松,Cosmos还附带了一个名为Cosmos-SDK的工具包,使开发人员可以使用即插即用模块轻松创建自定义区块链。

    BFT-SMaRt

    BFT-SMaRt是一个拜占庭容错的状态机复制实现,采用Java开发,目前由里斯本大学的LsSIGE研究组负责维护。BFT-SMaRt要求JRE 1.8+。

    BFT-SMaRt是最知名的Java版BFT实现,京东的区块链就是采用这个库解决共识问题。

    开发语言:Java
    下载地址:https://github.com/bft-smart/library

    BABBLE

    Babble是用于分布式应用的拜占庭共识平台,它可以让一组计算机表现的如同单一计算机。Babble它使用P2P网络和BFT共识算法来保证一组彼此互联的计算机可以同样的顺序处理同样的命令,也就是通常说的状态机复制。Babble可以让整个系统安全的应对部分节点的故障或恶意行为。

    Babble主要采用Go语言开发,但是其设计目标是可以集成进任何语言开发的应用,如上图所示。

    开发语言:Go
    下载地址:https://github.com/mosaicnetworks/babble

    Concord-BFT

    concord-bft是vmware开源的一个通用的状态机复制库,可以应对集群中的恶意行为(拜占庭故障)。 concord-bft被设计用于分部署数据仓库复制的核心构建模块,特别适合作为许可制区块链系统的基础。

    concord-bft的实现基于这片论文中的算法:SBFT: a Scalable Decentralized Trust Infrastructure for Blockchains。

    开发语言:Python
    下载地址:https://github.com/vmware/concord-bft

    HBBFT

    HBBFT是论文Honey Badger of BFT Protocols提出的蜜獾BFT共识算法的Rust实现。HBBFT要求Rust 1.36+以及cargo

    蜜獾(Honey Badger)共识算法可以让分布式异步环境中的节点交易达成一致,该算法不需要主导节点,可以应对恶意节点的攻击,适合于去中心化数据库和区块链应用。

    开发语言:Rust
    下载地址:https://github.com/poanetwork/hbbft

    libbft

    libbft是一个轻量级的拜占庭容错库,用于neo区块链,采用C++开发,由neo研究院维护,计划移植到Python、go等多种语言。

    开发语言:C++
    下载地址:https://github.com/NeoResearch/libbft

    二、参考

    什么是 pBFT
    参考URL: https://zhuanlan.zhihu.com/p/71075569
    从0到1搞懂拜占庭容错共识机制
    参考URL: https://www.jianshu.com/p/6420eb1661a0?from=groupmessage
    区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述
    参考URL: https://www.cnblogs.com/yuluoxingkong/p/13542788.html
    对PBFT算法的理解
    参考URL: https://www.cnblogs.com/gexin/p/10242161.html
    实用拜占庭容错系统(PBFT)共识算法
    参考URL: https://blog.csdn.net/JonasErosonAtsea/article/details/109236413
    [比较全面,推荐]参考URL: https://github.com/xipfs/IPFS-Internals/blob/master/ebook/13.0.md
    区块链主流共识算法的15个开源实现
    参考URL: https://zhuanlan.zhihu.com/p/99403520

    展开全文
  • 拜占庭容错共识算法介绍

    千次阅读 2020-12-22 17:34:07
    区块链的共识算法中,除了常见的工作量证明(PoW,Proof of Work)和权益证明(PoS,Proof of Stake)外,还有拜占庭容错(Byzantine Fault Tolerance, BFT)共识算法。 拜占庭容错(Byzantine Fault Tolerance, BFT...

    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

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

    展开全文
  •  实用拜占庭容错机制PBFT  PBFT算法由MiguelCastro和Barbara Liskov 1999年提出,初衷是为解决分布式系统中达成一致性的问题,与区块链共识机制的目标重合,其主要特点是网络具有高度容错性,在一个有3f+ 1个...

    详情参见个人博客:

    http://brainware360.cn/%E5%8C%BA%E5%9D%97%E9%93%BE%E5%85%B1%E8%AF%86%E7%AE%97%E6%B3%95%EF%BC%9A%E5%AE%9E%E7%94%A8%E6%8B%9C%E5%8D%A0%E5%BA%AD%E5%AE%B9%E9%94%99%E6%9C%BA%E5%88%B6PBFT.html#more

     

     

      共识机制是区块链的核心组成部分,以POW、POS以及DPOS等为代表的共识机制运行需要以代币为基础,即需要发行各自的货币体系来构成各自网络运行的激励机制,而在于节点已经有一定的互信基础且不需要靠代币来支撑整个网络的区块链,传统的一致性算法如PBFT、PAXOS、RAFT则派上了用场,PAXOS则是第一个被证明的共识算法。

      Paxos算法

      Paxos算法是一种两阶段算法,主要有三类角色,proposer、acceptor、learner,proposer提出议案,acceptor同意或拒绝,learner则是获取达成共识后的最终值。

      准备阶段:

      proposer 选择一个提案编号 n 并将 prepare 请求发送给 acceptors 中的一个多数派;

      acceptor 收到 prepare 消息后,如果提案的编号大于它已经回复的所有 prepare 消息,则 acceptor 将自己上次接受的提案回复给 proposer,并承诺不再回复小于 n 的提案;

      批准阶段:

      当一个 proposor 收到了多数 acceptors 对 prepare 的回复后,就进入批准阶段。它要向回复 prepare 请求的 acceptors 发送 accept 请求,包括编号 n 和value(如果没有已经接受的 value,那么它可以自由决定 value)。

      在不违背自己向其他 proposer 的承诺的前提下,acceptor 收到 accept 请求后即接受这个请求。

      Paxos算法适用于简单容错模型,即系统中只可能存在失效或故障节点,不存在恶意节点,如果失效节点数为x,则只需要未失效节点数为x+1就能维持系统的正常工作。

      Raft算法

      Raft算法包含三种角色,分别是:跟随者(follower),候选人(candidate)和领导者(leader)。一个节点在某一时刻只能是这三种状态的其中一种,这三种角色是可以随着时间和条件的变化而互相转换的。

      所有的节点初始状态都为follower,超时未收到心跳包的follower将变身candidate并广播投票请求,获得多数投票的节点将化身leader,这一轮投票的过程是谁先发出谁有利,每个节点只会给出一次投票。leader节点周期性给其他节点发送心跳包,leader节点失效将会引发新一轮的投票过程。

          

      上图描述了一个Raft提案的执行过程:

      leader收到客户端发来的请求,写入本地日志,但写入日志的条目在提交状态机之前需要将请求发给所有follower请求验证;

      follower对收到的信息进行验证,验证成功后写入本地日志并返回leader验证成功标识;

      leader收到大部分的follower节点验证信息后,就会将当前的日志提交,更新节点的值,并广播更新所有follower节点的值,从而再一次达成共识;

      Raft算法从节点不会拒绝主节点的请求,并且和Paxos一样只能容错故障或失效节点。

      实用拜占庭容错机制PBFT

      PBFT算法由MiguelCastro和Barbara Liskov 1999年提出,初衷是为解决分布式系统中达成一致性的问题,与区块链共识机制的目标重合,其主要特点是网络具有高度容错性,在一个有3f+ 1个节点的网络中,失效节点数为f,网络依然能够正常运行,容错率接近33%。目前,中国ChinaLedger联盟和HyperLedger联盟就在研究探讨PBFT的实际应用。

      算法首先需要引入视图(View)和验证节点(replica)的概念,replica包含主节点和备份节点。主节点(primary)依据某个公式选取,选取好之后,其他replica节点就成为备份(backups)节点。主节点有效时是表示处于同一幅视图当中,当主节点失效时,备份节点检测到之后需要通过timeout机制启动视图更换(view change)过程,选举新的主节点。整个算法流程如下:首先,由某个客户端向主节点发起服务请求,主节点将请求分发给所有备份节点,备份节点处理完后再全部回馈给客户端,客户端只要收到f+ 1个节点回馈的相同结果即为算法的最终结果。

      具体实现流程分为三阶段协议(three-phaseprotocol),即预准备(pre-prepare)、准备(prepare)和确认(commit)。

      预准备(pre-prepare)阶段:主节点收到请求后,给请求编一个序号n,然后向所有备份节点发送信息,信息格式为<<PRE-PREPARE,v,n,d>,m>,v是视图编号,m是客户端发送的请求信息,d是m的摘要。如果该信息满足该备份节点设立的条件(如检查视图编号,序号n是否处于一个合理区间, m是否之前收到过等),则该节点进入准备阶段。备份节点设立某些条件的原因是主节点有可能是失效节点,它可能会给不同的请求编上相同的序号,或者不去分配序号,或者让相邻的序号不连续:

      准备(prepare)阶段:进入准备阶段的节点向所有replica节点发送准备消息<PREPARE,v,n,d,i>,i是节点编号。经过这两个阶段,每个节点都收到了两条信息,每个replica节点验证预准备和准备消息的一致性,即验证视图编号v、消息序号n和摘要d是否一致,如果一致,进入下一个阶段。

      确认(commit)阶段:进入这一阶段,某个replica节点向其他replica节点发送信息,信息格式<COMMIT,v,n,D(m),i>。节点收到其他replica节点确认信息后进行验证,仍是验证视图编号v、消息序号n和摘要d是否一致,一致则验证通过。当replica节点收到2f + 1个(包含自身) 验证通过的确认信息后,向客户端反馈执行结果,并将结果写入区块中,即写入区块前,至少有2f+ 1个(包含自身)节点达成了共识。

      存在一个确认(commit)阶段的缘由在于,单个replica节点收到2f + 1个(包括自己) PREPARE信息并不能保证自己发出的PREPARE信息已被其他replica节点接收到,即其他节点不一定已经准备好Prepared,需要一个确认(commit)阶段来对此进行验证。

      如果连续执行了K条请求,在第K条请求执行完时,向全网发起广播,告诉其他replica节点它已经将这K条执行完毕,要是都反馈说这K条我们也执行完毕了,那就可以删除这K条的信息了,接下来再执行K条,完成后再发起一次广播,即每隔K条发起一次全网共识,这个概念叫checkpoint,每隔K条去征求一下大家的意见,要是获得了大多数的认同,就形成了一个stable checkpoint(记录在第K条的编号),这一机制被称为“GarbageCollection”。

      PBFT是一种静态共识, 在得知有限共识节点的情况可以适用。对于私有链和联盟链,如果节点数不大(不大于100),可采用PBFT形成共识,公有链拥有大量且不断动态变化的节点网络,用PBFT效率太低。

      使用PBFT算法还需要注意的一点是,其不能很好的存贮其交易信息,一些失效的副本可能会导致信息外泄,应有相应应对机制。

     

    我的BTC地址:1K8ni4mnQn7VjFZKjHJHLPWZ55owG9J1jd

    展开全文
  • 原文链接:【链块技术 02期】共识机制拜占庭容错系统   什么是区块链? 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。 显而易见,利用区块链构造基于互联网的去中心...

     

    原文链接:【链块技术 02期】共识机制:拜占庭容错系统

     

    什么是区块链?

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。

    显而易见,利用区块链构造基于互联网的去中心化账本,需要解决的首要问题是如何实现不同节点上的账本数据的一致性和正确性,即如何达成共识,这就需要借鉴已有的分布式系统中实现状态共识的算法。

    在20世纪80年代出现的分布式系统共识算法,是区块链共识算法的基础

    我们从基本的拜占庭容错技术入手,逐步介绍适合于私有链/联盟链和公有链的共识算法。

    (一)拜占庭将军问题

    问题描述

    拜占庭将军问题是20世纪80年代的一个假想问题。

    拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。

    基于一些原因,这10支军队不能集合在一起单点突破,必须在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。

    困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。

    在这种状态下,拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商达成一致,从而赢取战斗?

    区块链网络的记账共识和拜占庭将军问题是相似的:

    • 记账节点——将军

    • 消息传递——信使

    • 恶意节点——拜占庭节点

    • 正常节点——非拜占庭节点

    问题假设

    应该明确的是,在研究拜占庭将军问题的时候,假定了消息传递的信道是没有问题的,并不去考虑通信兵是否会被截获或无法传达信息等问题,并在这个前提下,去做一致性和容错性相关研究。

    问题实质

    寻找一个方法,使得将军们能在一个有叛徒的非信任环境中建立战斗计划的共识。

    条件定义

    回顾问题,一群将军想要实现某一个目标(一致进攻或者一致撤退),但是单独行动行不通,必须合作,达成共识;由于叛徒的存在,将军们不知道应该如何达到一致。

    注意,这里“一致性”才是拜占庭将军问题探讨的内容,如果本来叛徒数量就已经多到了问题不可解的地步,这个就是“反叛”的问题了;

    同时,我们的目标是忠诚的将军能够达成一致,对于这些忠诚的将军来说,进攻或者撤退都是可以的,只要他们能够达成一致就行。

    但是,光靠“一致”就可以解决问题吗?

    如果万事俱备,客观上每个忠诚的将军只要进攻了就一定能够胜利,但是却因为叛徒的存在他们都“一致的”没有进攻;

    反之,条件不利,将军们不应该进攻,但是却因为叛徒的存在所有人都“一致的”进攻了。

    可以发现,只有“一致性”是不足以解决拜占庭将军问题的,我们还需要提出一个“正确性”要求。

    这个要求是值得斟酌的,因为如果客观来看或许会有“绝对正确的”判断,但是针对每一个将军,大家的判断或许都不相同,我们如何定义“正确”呢?

    我们或许可以简单地说,正确就是每个忠诚的将军都正确的表达了自己的意思,不会因为叛徒让别的将军认为忠诚的将军是叛徒而不采用他传达的消息。

    至此,我们将拜占庭将军问题简化成了,所有忠诚的将军都能够让别的将军接收到自己的真实意图,并最终一致行动;而形式化的要求就是,“一致性”与“正确性”。

    • 一致性:每个忠诚的将军必须收到相同的命令值vi(vi是第i个将军的命令)

    • 正确性:如果第i个将军是忠诚的,那么他发送的命令和每个忠诚将军收到的vi相同。

    条件演进

    进一步地讲拜占庭将军的问题可以描述为:

    一个发送命令的将军要发送一个命令给其余n-1个将军,使得

    • C1. 所有忠诚的接收命令的将军遵守相同的命令

    • C2. 如果发送命令的将军是忠诚的,那么所有忠诚的接收命令的将军遵守所接收的命令

    (二)拜占庭容错系统

    拜占庭容错系统要解决的正是分布式系统中存在恶意节点(即拜占庭节点)时,系统的一致性、正确性等问题(即达成上述C1和C2条件

    假设分布式系统拥有n台节点,并假设整个系统拜占庭节点不超过m台(n≥3m+1),拜占庭容错系统需要满足如下两个条件:

    • 1. 所有非拜占庭节点使用相同的输入信息,产生同样的结果。在区块链系统中,可以理解为,随机数相同、区块算法相同、原账本相同的时候,计算结果相同。

    • 2. 如果输入的信息正确,那么所有非拜占庭节点必须接收这个消息,并计算相应的结果。在区块链系统中,可以理解为,非拜占庭节点需要对客户的请求进行计算并生成区块。

    另外,拜占庭容错系统需要达成如下两个指标:

    • 安全性:任何已经完成的请求都不会被更改,它可以在以后请求看到。在区块链系统中,可以理解为,已经生成的账本不可篡改,并且可以被节点随时查看。

    • 活性:可以接受并且执行非拜占庭客户端的请求,不会被任何因素影响而导致非拜占庭客户端的请求不能执行。在区块链系统中,可以理解为,系统需要持续生成区块,为用户记账,这主要靠挖矿的激励机制来保证。

    在分析拜占庭问题的时候,假设信道是可信的。拓展开来,在拜占庭容错系统,普遍采用的假设条件包括:

    • 1. 拜占庭节点的行为可以是任意的,拜占庭节点之间可以共谋;

    • 2. 节点之间的错误是不相关的;

    • 3. 节点之间通过异步网络连接,网络中的消息可能丢失、乱序并延时到达,但大部分协议假设消息在有限的时间里能传达到目的地;

    • 4. 节点之间传递的信息,第三方可以嗅探到,但是不能篡改、伪造信息的内容和破坏信息的完整性。

    注意:并非所有的缺陷或故障节点都称为拜占庭节点,拜占庭节点的行为有不可预测、任意性的特点,例如遭黑客破坏,中木马的服务器就是一个拜占庭服务器。

    (三)实用拜占庭容错系统

    原始的拜占庭容错系统由于需要展示理论上的可行性而缺乏实用性。

    另外,算法的复杂度也是随节点的增加而呈指数级增加。

    实用拜占庭容错系统降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别,使拜占庭协议在分布式系统中应用成为可能。

    实用拜占庭容错系统是一类“状态机”拜占庭系统,要求系统所有节点共同维护一个状态,所有节点采取的行动一致。

    注:这里的状态机可以理解为“系统状态”,以区块链记账为例,系统每新增一个区块,账本就更新到一个新的状态。前面讲过,拜占庭容错系统是一个强一致性协议,每次记账后系统都会达成新的状态。

    实用拜占庭容错系统需要运行三类基本协议:

    • 一致性协议:解决如何达成共识

    • 检查点协议:类似于操作系统的还原点

    • 视图更换协议:系统的每个服务器节点在同样的配置信息下工作,该配置信息被称为“视图”。配置信息由主节点确定,主节点更换,视图也随之变化。

    我们主要关注支持系统日常运行的一致性协议,该协议要求来自客户端的请求在每个服务节点上都按照一个确定的顺序执行。

    一致性协议至少包含:请求(request)、序号分配(pre-prepare)、响应(reply)三个阶段。

    根据协议设计的不同,可能包含:相互交互(prepare)、序号确认(commit)等阶段,如下图所示:

    假设故障节点个数为m个,而整个服务节点数为3m+1个。

    实用拜占庭容错系统中服务节点分为两类:

    • 主节点:全系统有且仅有一个主节点,负责将客户端的请求排序。

    • 从节点按照主节点提供的顺序执行请求。

    上图中,C为客户端,N0~N3为服务节点,N0为主节点,N3为故障节点。协议的节本过程如下:

    1. Request客户端发送请求,激活主节点的服务操作

    2. 当主节点接收请求后,启动三阶段的协议以向各从节点广播请求

    • a) Pre-Prepare:主节点给请求赋值一个序列号n,广播序号分配消息和请求消息,并构造PRE-PREPARE消息给各从节点

    • b) Prepare:从节点接收PRE-PREPARE消息,并向其他服务节点广播PREPARE消息

    • c) Commit:各节点对视图内的请求和次序进行验证后,广播COMMIT消息,执行收到的客户端的请求并给客户端以响应

    3.Reply:客户端等待来自不同节点的响应,若有m+1个响应相同,则该响应即为运算的结果。

    其中,主节点给请求赋值一个序列号是为了保证输入信息的一致性,从而保证执行的一致性。

    从节点将收到的消息向其它节点广播,使得各个节点可以验证所收到的信息,保证输入信息一致,从而保证计算后的输出一致。

    所有从节点将请求返回给用户,使得用户能够知晓请求执行的完成情况。

    根据上述流程,在n≥3m+1的情況下,一致性是可能解決的,其中,n为总节点数,m为恶意节点总数。如下所示:

    由此可以看出:

    实用拜占庭容错系统能够容纳将近1/3的拜占庭节点。

    实用拜占庭容错系统在很多场景都有应用,在区块链应用中,一般适合于对强一致性有要求的私有链和联盟链场景。

    例如,在IBM主导的区块链超级账本项目中,实用拜占庭容错系统是一个可选的共识协议。

     

    参考文献:

    [1]邹均,张海宁等.区块链技术指南[M].北京:机械工业出版社,2017

     

    本文作者:魏红心,链块学院执行院长,清华大学电子系博士

    链块学院:专注于区块链技术研发与教育

     

     

    --------------END--------------

    本文完,获取更多资讯,敬请关注区块链工程师。

     

     

    展开全文
  • 摘要: 计算机的总数>三台有问题的计算机+1以此方法来得以实现解决问题的一致性
  • 简单介绍了一种目前联盟链中常用的共识算法——实用拜占庭容错(PBFT,practical Byzantine fault tolerance)算法,并在其基础上优化算法机制,增加可扩展性,提出了一种改进的算法。经改进后,降低了算法的复杂度,...
  • 拜占庭容错算法(Byzantine Fault Tolerant)是面向拜占庭问题的容错算法,解决的是在网络通信可靠,但节点可能故障和作恶情况下如何达成共识,最早可以追溯到 Leslie Lamport 等学者于 1982 年在论文《The ...
  • 区块链快速入门(三)——CFT(非拜占庭容错共识算法 一、CFT简介 CFT(Crash Fault Tolerance),即故障容错,是非拜占庭问题的容错技术。 Paxos 问题是指分布式的系统中存在故障(crash fault),但不存在恶意...
  • 区块链共识机制拜占庭算法(BFT)及其发展 本文为哈尔滨工程大学计算机学院2020春季区块链技术课程的附加作业,是由三位同学(2017201123王凯出,2017201406韩枫,2017201427王家旭)查阅相关资料和相关论文进行...
  • 异步拜占庭容错(ABFT)是拜占庭容错共识算法的一个属性,它允许网络的诚实节点保证公平、安全地就一组交易的时间和顺序达成一致。 什么是拜占庭容错? 让我们首先了解拜占庭容错实际上意味着什么。术语拜占庭...
  • 区块链是一个分布式账本系统,参与者通过点对点网络连接,所有消息都通过广播的形式来 发送。实用拜占庭容错算法详解,包括拜占庭将军问题、三阶段过程、主节点是拜占庭节点问题、以及视图切换机制
  • 在实用拜占庭容错的基础上进行了改进: 1.将C/S(客户机/服务器)架构的请求响应模式改进为合适P2P网络的对等节点模式; 2.将静态的共识参与节点改进为可动态进入、退出的共识参与节点; 3.为共识参与节点的产生...
  • 区块链共识机制及优缺点

    千次阅读 2019-01-02 14:22:22
    区块链共识算法
  • 共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今POS的变体DPOS(Delegated Proof of ...
  • 拜占庭容错的三个基本理论 1) CAP理论 - "如果网路发生阻断(partition)时,你只能选择资料的一致性(consistency)或可用性(availability),无法两者兼得"。论点比较真观:如果网路因阻断而分隔为二,在其中...
  • 共识算法-PBFT(实用拜占庭容错系统)

    千次阅读 2018-11-02 19:27:19
    title: 共识算法-PBFT(实用拜占庭容错系统) tags: 区块链,共识算法 拜占庭容错系统 区块链网络的记账共识和拜占庭将军问题是相似的。参与共识记账的每一个记账节点相当于将军,节点之间的消息传递相当于信使,某些...
  • 实用拜占庭容错(PBFT)算法详细介绍

    千次阅读 2020-03-18 11:29:54
    本文主要讲述实用拜占庭容错算法(PBFT)的算法部分。
  • 通俗易懂解释拜占庭容错

    千次阅读 2019-11-10 23:10:15
    拜占庭容错问题需要解决的也同样是谁来发起信息,如何实现信息的统一同步的问题。 到这里也可以知道了,基于互联网的区块链技术,它克服了口头协议与书面协议的种种缺点,使用消息加密技术、以及公平的工作量证明...
  • 拜占庭将军问题: 寻找一个方法,使得将军们能在一个有叛徒的非信任环境中建立对战斗计划的共识共识算法的核心是在正常的节点间形成对网络状态的共识共识算法协议的属性: ...BFT拜占庭容错系统: ...
  • CFT就是一个节点坏了,靠其他节点系统还能运行(P2P) BFT就是节点类似三国杀中有主公有忠诚也有叛徒,在有叛徒的情况下系统还能达成一致性。
  • 其中最为核心的部分就是共识算法(consensus plugin),fabric推荐并实现的就是PBFT这一经典算法。 BFT算法 Client会发送一系列请求给各个replicas节点来执行相应的操作,BFT算法保证所有正常的replicas节点执行...
  • 区块链快速入门(四)——BFT(拜占庭容错共识算法 一、BFT简介 1、拜占庭将军问题简介 拜占庭将军问题(Byzantine Generals Problem)是Leslie Lamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题...
  • 拜占庭将军问题大家最为熟知的两种共识机制分别是PoS(工作证明机制)与PoW(权益证明机制)。NEO在其基础上进行改进,拟定了一种新的共识机制,称为dBFT。大家可以阅读NEO白皮书...
  • PBFT即实用拜占庭容错系统,英文全称Practical Byzantine Fault Tolerance。它是第一个基于BFT理论并结合实际产生的新的共识算法。但应用场景是私有链和联盟链,如果用于公链,需要和其他共识算法进行灵活的混用。 ...
  • 简介 拜占庭将军问题(Byzantine Generals ...拜占庭容错技术被设计用来处理现实存在的异常行为,并满足所要解决的问题的规范要求。 区块链网络环境符合拜占庭将军问题模型,有运行正常的服务器(忠诚的拜占庭将...
  • 拜占庭容错(BFT)算法介绍

    千次阅读 2018-07-15 14:07:30
    【原文作者:Jae Kwon,译者:郭光华】 2011年比特币将世界的注意力引向到了区块链。...3、没有什么激励机制来激励POW矿工忠于一条链,所以会导致升级很困难。 我们需要一种安全的共识,并且不会给我们的地球施加...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,730
精华内容 1,092
关键字:

拜占庭容错共识机制