PBFT 算法的基本流程主要有以下四步:

  1. 客户端(不是主节点)发送请求给主节点(PBFT算法只是在各个服务器节点上运行的)
  2. 主节点广播请求给其它节点,节点执行 pbft 算法的三阶段共识流程。
  3. 节点处理完三阶段流程后,返回消息给客户端。
  4. 客户端收到来自 f+1 个节点的相同消息后,代表共识已经正确完成。(要注意各个阶段确认消息的数量)

下面介绍 pbft 算法的核心三阶段流程,如下图所示:

算法的核心三个阶段分别是

  • pre-prepare 阶段(预准备阶段)
  • prepare 阶段(准备阶段)
  • commit 阶段(提交阶段)

图中的C代表客户端,0,1,2,3 代表节点的编号,打叉的3代表可能是故障节点或者是问题节点,这里表现的行为就是对其它节点的请求无响应。0 是主节点。整个过程大致是如下:

首先,客户端向主节点发起请求,主节点 0 收到客户端请求,会向其它节点(不包括主节点)发送 pre-prepare 消息,其它节点就收到了pre-prepare 消息,就开始了这个核心三阶段共识过程了。

Pre-prepare 阶段:节点收到 pre-prepare 消息后,会有两种选择

  • 一种是接受
  • 一种是不接受

什么时候才不接受主节点发来的 pre-prepare 消息呢?
一种典型的情况就是如果一个节点接受到了一条 pre-pre 消息,消息里的 v 和 n 在之前收到里的消息是曾经出现过的(各个节点都有要给消息缓存池,可以将收到过的消息存储起来[1]),但是 d 和 m 却和之前的消息不一致,或者请求编号不在高低水位之间(高低水位的概念在下文会进行解释),这时候就会拒绝请求。拒绝的逻辑就是主节点不会发送两条具有相同的 v 和 n ,但 d 和 m 却不同的消息。

Prepare 阶段:节点同意请求后会向其它节点发送 prepare 消息。

这里要注意一点,同一时刻不是只有一个节点在进行这个过程,可能有 n 个节点也在进行这个过程。因此节点是有可能收到其它节点发送的 prepare 消息的。在一定时间范围内,如果收到超过 2f 个不同节点的 prepare 消息,就代表 prepare 阶段已经完成。

Commit 阶段:于是进入 commit 阶段。(是在这个阶段后才执行客户的请求)

向其它节点(包括主节点)广播 commit 消息,同理,这个过程可能是有 n 个节点也在进行的。因此可能会收到其它节点发过来的 commit 消息,当收到2f+1个 commit 消息后(包括自己),代表大多数节点已经进入 commit 阶段,这一阶段已经达成共识,于是节点就会执行请求,写入数据。

注解:
V:当前视图的编号。视图的编号是什么意思呢?比如当前主节点为 A,视图编号为 1,如果主节点换成 B,那么视图编号就为 2,这个概念和 raft 的 term 任期是很类似的。
N:当前请求的编号。主节点收到客户端的每个请求都以一个编号来标记。
M:消息的内容
d或D(m):消息内容的摘要
i: 节点的编号

【1】PBFT算法会将每个节点收到的请求都缓存下来,知道所有的节点都完成这个请求的时候(PBFT算法有一个stable checkpoint变量来表示当前所有节点已完成的最大请求序号),会在缓存中将这个消息清除,并且会记录到日志当中

参考 https://zhuanlan.zhihu.com/p/35847127

PBFT(一):过程相关推荐

  1. DNBFT共识——一种可动态调节网络节点数的PBFT优化方案

    摘要 区块链类比于一种分布式存储系统, 这种存储系统有可持续增长,不可篡改的特点. 区块链中的共识是多个节点对某一个状态达成一致的过程. PBFT是一种快速的共识机制. 但有无法动态调整网络的缺陷. ...

  2. 区块链共识机制 (Consensus)(PoW,PoS,PAXOS,RAFT,PBFT)

    文章目录 Consensus Proof of Work(PoW) Proof of Stake(PoS) PAXOS Phases in PAXOS Prepare Phase Accept Pha ...

  3. Hands-On Hyperledger Fabric——Byzantine-fault tolerant(BFT)过程详解

    文章目录 拜占庭问题描述 分布式架构遭遇的问题 Practical Byzantine Fault Tolerance(PBFT) PBFT过程详解 拜占庭问题描述 拜占庭将军问题是分布式计算中的一个 ...

  4. 联盟链中的Hyperledger Fabric、FISCO BCOS和CITA

    本文援引自链接:https://mp.weixin.qq.com/s/4JAZGwI32bZNlxBqPfkihg 一.摘要 第 46 届世界经济论坛达沃斯年会将区块链与人工智能.自动驾驶等一并列入& ...

  5. 区块链与联邦学习的研究

    本文分别介绍了区块链与联邦学习的研究现状.架构和运行原理.主要技术及局限性,并针对区块链与联邦学习所存在的问题,通过分析区块链与联邦学习各自的特点,探讨了如何将区块链与联邦学习进行融合互补,介绍了两种 ...

  6. 初链主网上线技术解读之-混合共识

    背景 从2017年11月启动至今,经过历时近一年的研究.开发与测试,初链主网Beta版于新加坡时间2018年09月28日08:00正式上线,在此之前,07:56分PBFT委员会第一次共识出块和True ...

  7. 【概念】FISCO-BCOS证书进行Dapp开发需要注意什么?讲解config.ini,group.id.genesis,group.id.ini

    前言 FISCO-BCOS是联盟链,一说到联盟链就少不了证书的存在,无论是节点证书还是加密证书都有着重要的作用,目前证书配置最多的是hyperledger fabric,这一节我们就简单的讲一下爱FI ...

  8. 【全网首发】FISCO-BCOS从底层讲起链从配置文件开始解析,拆开build_chain.sh,从配置文件解读,起链时会有哪些文件产生,区块链端口解读RPC,P2P,channel,账本文件

    前言 今天学习了FISCO-BCOS的节点信息配置讲解,来分开讲一下FISCO-BCOS是在正常单群组四节点的情况下如何调用文件.篇幅较长请耐心观看,如果觉得小弟写的还可以,留下红心和关注帮助小弟冲一 ...

  9. 开源架构Fabric、FISCO BCOS(以下简称“BCOS”)、CITA 技术对比

    转自 https://www.coingogo.com/news/41300 联盟链技术哪家强?开源架构Fabric.FISCO BCOS(以下简称"BCOS").CITA 技术对 ...

  10. 区块链技术:架构及进展

    title: 区块链技术:架构及进展 总结归纳 1 引言 传统数据库 传统的关系型数据库管理系统.NoSQL数据库管理系统 单一机构进行管理和维护 单一机构对所有数据拥有绝对的控制权 其他机构无法完整 ...

最新文章

  1. vue路由 routers的写法:require用与不用
  2. 液晶显示模块的分类和基本知识
  3. php 模拟ip访问网页,curl模拟浏览器,ip,来源,进行网站采集的实现方法
  4. 【杂项】2021年年度报告
  5. 利用STM32F103单片机输出SPWM波
  6. 黄聪:Delphi 日期格式问题 - is not a valid date
  7. 99se 封装属性设置大全
  8. 怎样做中国的自由译者
  9. 拖库 洗库 撞库的概念
  10. 用Ventoy同时引导ubuntu/centos/windows多系统安装
  11. 串行外设接口(Serial Peripheral Interface, SPI)
  12. c语言生成exe文件的作用,c语言怎么生成exe文件
  13. Quick BI、帆软Fine BI等BI产品,优势详细介绍
  14. (十四)STM32——外部中断(EXTI)
  15. npm 安装淘宝镜像报错 npm ERR! code EEXIST
  16. 树-生成树-最小生成树
  17. index.php g wap,index.php?g=Wap
  18. 天龙八部手游服务器等级哪里显示,天龙八部手游
  19. 微信小程序初体验-苏州实时公交API
  20. 降级论–只需要降级,就能创造更大的价值,也能获得更大的满足。

热门文章

  1. 基于javaweb+jsp的会议室管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
  2. 14、CSS渲染:CSS是如何绘制颜色的?
  3. Gradle使用教程
  4. UVa OJ 10361 自动作诗机
  5. EEG有效连接工具包SIFT的介绍与安装
  6. CODESYS Softmotion(一)功能介绍
  7. 利用拉格朗日中值定理求极限
  8. 反编译微信小程序工具之抓取小程序图片素材详细教程
  9. 使用ADB安装Apk到手机
  10. 色环电阻计算器_色环电感标示法_