`

PBFT协议

阅读更多

PBFT协议

前提假设

  • 分布式节点通过网络是连接在一起的
  • 网络节点发送的消息可能会丢,可能会延迟到达,也可能会重复,到达顺序也可能是乱的

为什么至少要3f+1个节点

  • 最坏的情况是:f个节点是有问题的,由于到达顺序的问题,有可能f个有问题的节点比正常的f个节点先返回消息,又要保证收到的正常的节点比有问题的节点多,所以需要满足N-f-f>f => N>3f,所以至少3f+1个节点

术语

  • client:发出调用请求的实体
  • view:连续的编号
  • replica:网络节点
  • primary:主节点,负责生成消息序列号
  • backup:支撑节点
  • state:节点状态

3阶段协议

3阶段协议

从primary收到消息开始,每个消息都会有view的编号,每个节点都会检查是否和自己的view是相同的,代表是哪个节点发送出来的消息,源头在哪里,client收到消息也会检查该请求返回的所有消息是否是相同的view。如果过程中发现view不相同,消息就不会被处理。除了检查view之外,每个节点收到消息的时候都会检查对应的序列号n是否匹配,还会检查相同view和n的PRE-PREPARE、PREPARE消息是否匹配,从协议的连续性上提供了一定程度的安全。

每个节点收到其他节点发送的消息,能够验证其签名确认发送来源,但并不能确认发送节点是否伪造了消息,PBFT采用的办法就是数数,看有多少节点发送了相同的消息,在有问题的节点数有限的情况下,就能判断哪些节点发送的消息是真实的。REQUEST和PRE-PREPARE阶段还不涉及到消息的真实性,只是独立的生成或者确认view和序列号n,所以收到消息判断来源后就广播出去了。PREPARE阶段开始会汇总消息,通过数数判断消息的真实性。PREPARE消息是收到PRE-PREPARE消息的节点发送出来的,primary收到REQUEST消息后不会给自己发送PRE-PREPARE消息,也不会发送PRE-PREPARE消息,所以一个节点收到的消息数满足2f+1-1=2f个就能满足没问题的节点数比有问题节点多了(包括自身节点)。COMMIT阶段primary节点也会在收到PREPARE消息后发送COMMIT消息,所以收到的消息数满足2f+1个就能满足没问题的节点数比有问题节点多了(包括自身节点)。

PRE-PREPARE和PREPARE阶段保证了所有正常的节点对请求的处理顺序达成一致,它能够保证如果PREPARE(m, v, n, i) 是真的话,PREPARE(m’, v, n, j) 就一定是假的,其中j是任意一个正常节点的编号,只要D(m) != D(m’)。因为如果有3f+1个节点,至少有f+1个正常的节点发送了PRE-PREPARE和PREPARE消息,所以如果PREPARE(m’, v, n, j) 是真的话,这些节点中就至少有一个节点发了不同的PRE-PREPARE或者PREPARE消息,这和它是正常的节点不一致。当然,还有一个假设是安全强度是足够的,能够保证m != m’时,D(m) != D(m’)D(m) 是消息m的摘要。

确定好了每个请求的处理顺序,怎么能保证按照顺序执行呢?网络消息都是无序到达的,每个节点达成一致的顺序也是不一样的,有可能在某个节点上n比n-1先达成一致。其实每个节点都会把PRE-PREPARE、PREPARE和COMMIT消息缓存起来,它们都会有一个状态来标识现在处理的情况,然后再按顺序处理。而且序列号n在不同view中也是连续的,所以n-1处理完了,处理n就好了。

VIEW-CHANGE

VIEW-CHANGE

上图是发生VIEW-CHANGE的一种情况,就是节点正常收到PRE-PREPARE消息以后都会启动一个定时器,如果在设置的时间内都没有收到回复,就会触发VIEW-CHANGE,该节点就不会再接收除CHECKPOINT 、VIEW-CHANGE和NEW-VIEW等消息外的其他消息了。NEW-VIEW是由新一轮的primary节点发送的,O是不包含捎带的REQUEST的PRE-PREPARE消息集合,计算方法如下:

相关推荐

    区块链五:共识机制,用Rust原生写PBFT协议

    因为Libra学习rust,想用rust写些东西,而刚好看区块链共识机制的PBFT,就用原生Rust实现一个PBFT的分布式系统,业余中间断断续续写,代码比较零散。 中间也有些逻辑值得记录, 主要在Rust的多线程,网络通信的处理...

    拜占庭容错算法PBFT算法ppt

    主要应用于联盟链中,它的关键技术是一致性协议.将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。 PBFT(Practical Byzantine Fault Tolerance)共识算法可以在少数节点作恶(如伪造...

    Tendermint共识算法(一种改进的PBFT算法).pdf

    一种PBFT算法变种(实用拜占庭容错算法,联盟链共识算法),基于PBFT算法进行的改进。 原文名称:Tendermint: Consensus without Mining 作者:Jae Kwon

    基于改进PBFT算法的PKI跨域认证方案

    一方面,该方案对联盟链在传统实用拜占庭共识算法(PBFT)的基础上加入了节点动态增减功能;改进了主节点选举方式;将三阶段广播缩减为两阶段广播,减少了通信开销。另一方面,该方案设计了联盟链跨域认证协议,给出...

    蜜獾BFT协议 1

    为了证明这一点,我们清晰地构建了一个违反假设的恶意“间歇性同步”网络,使现有的弱同步协议,如PBFT[20]停止(第3节)。其次,即使在实践中满足弱同步协议假设

    gttc:TTC的官方Go实施,一种去中心化和激励式社交网络协议

    TTC协议的Golang实现。 关于gttc gttc基于 ,主要部分在目录中。 我们在其中添加了一个新的共识算法,名为 。 Alien是DPOS-PBFT共识算法的简单版本,在: Alien.go :实现共识界面 custom_tx.go :处理自定义...

    区块链技术在矿山物联网中的应用研究

    应用实用拜占庭容错(PBFT)算法设计了数据共识过程,通过在分布式结构化P2P网络每2个节点间设置共识模块并优化P2P协议,实现了矿山数据安全性共识。测试结果表明,私有区块链的应用保证了矿山物联网数据的准确传输...

    2020年区块链能力提升岗位清单.pdf

    ——深入理解共识机制原理, 熟悉常用共识算法,如PoW、 PoS、BFT、PBFT 、Tendermint、 RAFT等; ——熟悉计算机分布式系统、 分布式存储等概念和理论; ——具备扎实的计算机网络协 议,熟悉软件工程理论; ——...

    Hyperledger Fabric RAFT共识协议探究

    Hyperledger Fabric在发布1.4.3版本时,增加了新的共识策略Raft,以此来循序渐进地迁移至拜占庭容错算法(PBFT),它是一种基于etcd的崩溃容错(CFT)排序服务。Raft 遵循 “领导者和追随者” 模型,其中每个通道...

    AfricaOS:用纯Rust编写的基于提议的分布式复制状态机(RSM)。 AOS是为定制而设计的简单区块链协议

    AfricaOS:用纯Rust编写的基于提议的分布式复制状态机(RSM)。 AOS是为定制而设计的简单区块链协议

    truechain-consensus-core:TrueChain共识协议

    TrueChain共识协议 建立源 建造 步骤1 安装和 。 确保$GOBIN路径中有hmake。 使用hmake和docker构建所有内容 该项目使用: 与工具链(包含容器的环境)进行交互并构建跨平台的二进制文件。 gvt管理依赖项。 $ ...

    仲裁:以太坊的许可实现,支持数据隐私

    Quorum是一个基于以太坊的分布式账本协议,具有交易/合同隐私和新的共识机制。 Quorum是的分支,并根据go-ethereum版本进行了更新。 以太坊的主要增强功能: -Quorum通过公共/私有状态分离来支持私有交易和私有...

    harmony:和谐的核心协议

    和谐 一般文件 API指南 要求 转到1.14.7 GMP和OpenSSL 在macOS上: brew install gmp brew install openssl sudo ln -sf /usr/local/opt/openssl@1.1 /usr/local/opt/openssl 在Linux(Ubuntu)上 ...

    RepChain许可链基础组件-其他

    RepChain(Reactive Permissioned Chain)是第一款采用响应式编程实现的自主可控的许可链基础组件,面向企业应用,强调交易的实时性和分布式环境下的柔韧性,且易于根据不同应用场景...针对不同的共识协议,进行抽象

    FISCO-BCOS:联盟区块链平台(联盟区块链缓慢技术平台)

    该平台提供了丰富的功能,包括组体系结构,跨链通信协议,可插入共识机制,隐私保护算法,OSCCA批准的(国家商业密码管理办公室)密码算法和分布式存储。 它的性能,可用性和安全性已经在现场生产环境中被许多机构...

Global site tag (gtag.js) - Google Analytics