PBFT共识算法原理

2023-11-02

1 容错类型

PBFT假定错误可以是拜占庭类型的,也就是说可以使任意类型的错误,比如节点作恶、说谎等。这有别于crash-down类型的错误,raft、paxos这类共识算法只能允许crash-down类型错误,节点只能crash而不能产生假消息。

错误类型 总节点数
Byzantine fault 3f+1
Crash-down fault 2f+1

对于拜占庭类错误,总节点数为n,假设系统可能存在f个拜占庭节点,假如需要根据节点发送过来的消息做判断。为了共识正常进行,在收到n-f个消息时,就应该进行处理,因为可能有f个节点根本不发送消息。现在我们根据收到的n-f个消息做判断,判断的原则至少f+1个相同结果。但是,在收到的n-f个消息中,不能确定其中没有错误节点过来的消息,其中也可能存在f个假消息。应该保证n-f-f > f,即n>3f。

2 三阶段消息

在这里插入图片描述
3阶段消息是:Pre-prepare、Prepare和Commit。每个消息都会包含数字签名,证明消息的发送者,以及消息类型,下文中会省略。

Pre-prepare消息由主节点发出,包含:

  • 当前view:v
  • 主节点分配给请求的序号n
  • 请求的摘要d
  • 请求本身m
  • 务必记牢,m、v、n、d,后面会使用缩写。

Prepare是副本节点收到Pre-prepare消息后,做出的响应,发送给所有副本节点,包含:

  • v
  • n
  • d

Prepared状态:副本i有Pre-prepare消息,且收到2f个有效的Prepare消息。

副本i达到Prepared状态,可以发送Commit消息,Commit消息的内容和Prepare消息内容相同,但消息类型和数字签名是不同的,所以可以区分。

m可以使用d代替,所以Prepare和Commit消息使用d代替m,来节省通信量

3 为什么不能只有前2个阶段消息

这个问题的等价问题是:为什么Pre-prepare和Prepare消息,不能让非拜占庭节点达成一致?

Pre-prepare消息的目的是,主节点为请求m,分配了视图v和序号n,让至少f+1个非拜占庭节点对这个分配组合<m, v, n>达成一致,并且不存在<m’, v, n>,即不存在有2个消息使用同一个v和n的情况。

Prepared状态可以证明非拜占庭节点在只有请求m使用<v, n>上达成一致。主节点本身是认可<m, v, n>的,所以副本只需要收集2f个Prepare消息,而不是2f+1个Prepare消息,就可以计算出至少f个副本节点是非拜占庭节点,它们认可m使用<v, n>,并且没有另外1个消息可以使用<v, n>。

既然1个<v, n>只能对应1个请求m了,达到Prepared状态后,副本i执行请求m,不就达成一致了么?

并不能。Prepared是一个局部视角,不是全局一致即副本i看到了非拜占庭节点认可了<m, v, n>,但整个系统包含3f+1个节点,异步的系统中,存在丢包、延时、拜占庭节点故意向部分节点发送Prepare等拜占庭行文,副本i无法确定,其他副本也达到Prepared状态。如果少于f个副本成为Prepared状态,然后执行了请求m,系统就出现了不一致。

所以,前2个阶段的消息,并不能让非拜占庭节点达成一致。

4 View Changes切换

View Changes的战略是:当副本节点怀疑主节点无法让请求达成一致时,发起视图切换,新的主节点收集当前视图中已经Prepared,但未Committed的请求,传递到下一个视图中,所有非拜占庭节点基于以上请求,会达到一个新的、一致的状态。然后,正常运行3阶段消息协议。

具体有4个路径:

  • 正常阶段定时器超时,代表一定时间内无法完成Pre-prepare -> Prepare -> Commit
  • View Changes阶段定时器超时,代表一定时间内无法完成正在进行的View Change
  • 定时器未超时,但有效的view-change消息数量达到f+1个,代表当前已经有f+1个非拜占庭节点发起了新的视图切换,本节点为了不落后,不等待超时而进入视图切换
  • new-view消息不合法,代表当前View Changes阶段的主节点为拜占庭节点

更换主节点

当主节点出现故障,就会触发ViewChange + 1 事件viewchange会有三个阶段,分别是

  • view-change , 从节点认为主节点有问题时,会向其它节点发送view-change 消息,当前存活的节点编号最小的节点将成为新的主节点。

  • view-change-ack ,新的主节点收到 2f 个view-change 消息,则证明 view-change有效,并广播new-view 消息。

  • new-view ,新主节点会继续执行上个视图未处理完的请求,其它节点验证new-view 消息通过后,就会处理执行pbft 过程并进入ViewChange + 1。

在这里插入图片描述

发生view转换时,需要的保证的是:如果视图转换之前的消息m被分配了序号n, 并且达到了prepared状态,那么在视图转换之后,该消息也必须被分配序号n(safety特性)。因为达到prepared状态以后,就有可能存在某个节点commit-local。要保证对于m的commit-local,在视图转换之后,其他节点的commit-local依然是一样的序号。

参考

https://lessisbetter.site/2020/03/22/why-pbft-needs-viewchange/

其他区块链技术请关注公众号(区块链技术空间)

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PBFT共识算法原理 的相关文章

  • PBFT代码实现

    本篇文章主要是PBFT共识的简单实现 其中有许多地方都做了简化 PBFT的原理已在上篇文章中描述过 如果对PBFT的原理不太清晰的的可以进行查看 文章地址 共识算法学习总结 代码实现的主要功能有 通过客户端添加区块 使用libp2p的mdn
  • 共识算法 —— PoA

    定义 PoA的全称是 Proof Of Authority 权威证明 网上有些文章全称写得是 Proof Of Activity 个人感觉明显不对 大家自行鉴别 最早提出人是Ethereum 以太坊前技术专家Gavin Wood 在2017
  • 【区块链共识算法】-PoW算法

    极客时间 工作量证明 比如小李来 BAT 面试 说自己的编程能力很强 那么他需要做一定难度的工作 比如做个编程题 根据做题结果 面试官可以判断他是否适合这个岗位 工作对于请求方是有难度的 对于验证方则是比较简单的 易于验证的 Pow算法 计
  • 链塔智库

    链塔智库整理最近一周内区块链相关政策 业内动态 人物观点 为大家梳理呈现各个领域的最新发展 目录 一 各地政策要闻 四川 探索建立基于区块链技术的数字资产交易平台 首个区块链领域国家标准在成都举行首场征求意见会 重庆出台优化工业园区规划建设
  • pbft为什么需要2f+1

    将阵营分为两拨 好节点阵营 坏节点阵营 现在坏节点阵营想要误导好节点 让其误以为已经有足够人数发出了投票 并且发生分歧 如何做 假设最极端情况 好节点被等分为两拨A B 坏节点加上任意一个阵营的人数都能达到足够人数达成投票 那坏节点就可以发
  • Hyperledger Fabric全面理解

    Fabric结构 Fabric结构 Fabric 0 6的特点 结构简单 应用 成员管理 Peer的三角形关系 主要业务功能全部集中于Peer节点 架构问题 由于peer节点承担了太多的功能 所以带来扩展性 可维护性 安全性 业务隔离等方面
  • PBFT共识算法原理

    1 容错类型 PBFT假定错误可以是拜占庭类型的 也就是说可以使任意类型的错误 比如节点作恶 说谎等 这有别于crash down类型的错误 raft paxos这类共识算法只能允许crash down类型错误 节点只能crash而不能产生
  • 共识算法1--工作量证明机制简介及算法实现

    共识算法1 工作量证明机制简介及算法实现 所谓 共识机制 是通过特殊节点的投票 在很短的时间内完成对交易的验证和确认 对一笔交易 如果利益不相干的若干个节点能够达成共识 我们就可以认为全网对此也能够达成共识 1 当前 已有多种常见的共识机制
  • 共识算法比较:Tendermint的BFT与EOS的dPoS

    这项技术深入研究由Chjango Unchained编写 本文比较了不同的共识系统 它们为EOS和Tendermint提供了关于每种基础技术以及它们有什么样的独特地类似证明 PoS 能力 在由单个组织运行的传统分布式系统中 信任和安全由防火
  • 共识算法 --- PBFT、Raft和Paxos

    目录 一 Raft共识算法 1 什么是Raft 2 Raft的工作流程 3 Raft的相关应用 4 Raft的缺陷 5 Raft中三个子问题 5 1 Leader选举 Election 5 1 1 节点的三种角色 5 1 2 选举过程 5
  • 香港科技大学(广州)物联网学域李松泽教授课题组现招收博士后研究员、全奖博士、硕士研究生(2023秋季入学)

    香港科技大学 广州 物联网学域李松泽教授课题组现招收博士后研究员 全奖博士 硕士研究生 2023秋季入学 同时开放科研助理 科研访问学生等职位申请 李老师个人简介 Songze Li https songzli github io 李松泽博
  • 关于DAG共识的调研

    内容目录 前言 why DAG DAG 是什么 常见共识机制 主链DAG共识 朴素DAG 平行链DAG 问题与挑战 这是自己看的一篇综述 参考里面的分类并对现在的一些DAG共识做的简要理解 后面会对一些共识的论文做学习笔记 若有错误之处还请
  • 区块链常见的几大共识机制

    区块链技术被广泛应用于许多领域 其中共识机制是构成区块链系统的核心部分 共识机制是指用来维护区块链数据一致性 安全性和可靠性的机制 常见的区块链共识机制有以下几种 1 工作量证明 Proof of Work 是最早的共识机制 它将矿工通过解
  • 陀螺研究院

    摘要 产业动态 由建行发起的价值30亿美元数字债券将推迟上市 15国正式签署RCEP 全球规模最大自贸协定达成 浙江省首个产业区块链赋能中心落地宁波江北 越南教育和培训部计划在2021年实施区块链技术颁发文凭 深圳市政务区块链专委会正式揭牌
  • hyperledger fabric各版本更新内容

    fabric各版本文档 fabric各版本更新内容 fabric 最新版本 fabric2 5更新内容 fabric2 4更新内容 fabric2 3更新内容 fabric2 2更新内容 fabric2 1更新内容 fabric2 0更新内
  • 重磅发布

    导语 后疫情时代 随着各行业线下业务与线上业务的深度结合转型 流量思维的增量导向逐渐转向降本增效 虚假流量已经成为互联网时代信息化数字资产最大的威胁之一 据极验最新行业数据统计 各个行业都有较高比例的虚假流量存在 机器流量最为泛滥的区块链行
  • 【zookeeper】raft 共识算法 动画演示 网站

    1 概述 地址 https cyberdak github io thesecretlivesofdatacn raft
  • 共识算法-PBFT

    简介 1 PBFT简介 BFT Byzantine Fault Tolerance 是区块链共识算法中需要解决的一个核心问题 例如 公有链网络中 比特币和以太访中用的是POW EOS用的是DPOS PBFT一般用于联盟链场景中 它是共识节点
  • 转:Tendermint 简介

    Tendermint 是分布式一致性软件 即使有1 3的机器叛变了 也能保证其余机器上的数据一致 容忍机器以任意方式失败的能力 包括变得恶意 被称为拜占庭容错 BFT 该理论被提出来数十年了 由于bitcoin和ethereum 区块链技术
  • Stellar Consensus Protocol(SCP)的共识算法

    Stellar Consensus Protocol SCP 是一种用于Stellar网络的共识算法 旨在确保网络中所有节点对账本的一致性 SCP的设计灵感来自于拜占庭将军问题 Byzantine Generals Problem 它采用了

随机推荐

  • 淘宝应对"双11"的技术架构分析

    http www uml org cn zjjs 201311272 asp http www uml org cn 火龙果软件
  • Ubuntu 14.04安装TeamViewer

    1 到官网下载teamviewer的deb包 2 拷贝到 下 打开文件 双击 deb包 3 在Ubuntu软件中心中点击安装 如果缺少依赖包 sudo apt get install f修复依赖关系
  • UAV021(五):STM32F429实现TIM6计时、TIM3输出4路PWM波、TIM5输入捕获

    目录 序 一 STM32F4定时器介绍 二 定时器配置 2 1 TIM6实现计数 2 2 TIM3输出4路PWM波 2 3 TIM5输入捕获 序 现在需要实现计时 输出PWM和输入捕获 其中计时实现0 1ms加1 用于陀螺仪积分计时 输出4
  • 离线win7上用anaconda离线创建虚拟环境

    本文所需文件的下载路径为 百度云链接 https pan baidu com s 14S xkERRhQVNfV dauVYzw 提取码 5hzn 第一步 安装anaconda win7系统不支持python3 9 因此不能在win7系统上
  • 凭借这5步,我30分钟学会了Python爬虫

    在不同公司的许多人可能出于各种原因需要从Internet收集外部数据 分析竞争 汇总新闻摘要 跟踪特定市场的趋势 或者收集每日股票价格以建立预测模型 无论你是数据科学家还是业务分析师 都可能时不时遇到这种情况 并问自己一个永恒的问题 我如何
  • win系统电脑如何打开sketch?

    2 个方法快速使用 Windows 系统打开 Sketch 文件 使用 Adobe XD 打开 Sketch 文件或者使用浏览器中就能做设计的即时设计直接打开 Sketch 文件 众所周知 Sketch 只能在 Mac 电脑上使用 因此只有
  • SQuirrel SQL Client数据库连接工具的配置与使用

    SQuirrel SQL Client介绍 SQuirrel SQL Client是一个用Java写的数据库客户端 用JDBC统一数据库访问接口以后 可以通过一个统一的用户界面来操作MySQL PostgreSQL MSSQL Oracle
  • Java Html嵌入applet 来读取客户端串口

    写在前面 之前没搞过html嵌入applet来读取本地客户端串口 就直接使用RXTXcom jar 来直接读取本机串口 这个是没问题的如下 RXTX 有三个文件 有针对操作系统64 还有32的 1 RXTXcomm jar 导入项目中 2
  • 【LaTeX】矢量图转为pdf格式(为了将高清矢量图插入LaTeX)

    在论文编写的时候 需要插入高清的矢量图 但是不同的图片生成软件 图片处理软件 论文编写软件所支持的矢量图格式都是不一致的 如 matplotlib可以保存的矢量图格式为 svg eps 等 visio可以保存的格式为 svg emf 等 但
  • 聊聊 Java 泛型

    概述 什么是泛型 为什么需要泛型 如何使用 是什么原理 如何改进 这基本上就是我们学习一项技术的正确套路 本文将按照以上顺序展开阐述 介绍我所了解的泛型 什么是泛型 泛型的本质是参数化类型 即给类型指定一个参数 然后在使用时再指定此参数具体
  • Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerExcepti

    问题描述 在异常信息当中我发现到一个redis连接不上的异常 项目当中我使用的是多环境 我运行的时候是运行的dev 这里的 profile active 我们在idea的maven的配置处进行快速的切换 启动项目的时候报的是连接不上redi
  • RabbitMq基础篇-09-channel接口常用几种参数详解

    文章目录 1 背景概述 2 通常参数解释 3 Channel一些Api解释 3 1 basicNack 不确认消息 3 2 basicReject 拒绝消息 3 3 RecoverOk 是否恢复消息到队列 3 4 exchangeDecla
  • PM产品经理面试 面经汇总

    系列文章目录 第一章 如何找到一份PM产品经理的工作 第二章 PM 面试技巧 文章目录 系列文章目录 一 PM面试准备 二 面试流程 1 行测 2 Behavioral Question 3 product design question
  • MySQL--主从复制--01--原理

    MySQL 主从复制 01 原理 一 故事 爸爸在酒店做厨师 正准备做西红柿炒蛋 妈妈也想做 于是让女儿给爸爸打电话 爸爸接到电话后 于是就把他目前正在做的事情 洗菜 切菜 告诉女儿 女儿记在笔记里 妈妈看笔记 按笔记的内容做菜 就这样爸爸
  • 绝对想不到,Chatgpt 优缺点都有这些

    ChatGPT 是一种基于自然语言处理 NLP 模型的对话生成程序 它的核心是通过机器学习算法训练得到的语言模型 GPT Generative Pre trained Transformer 是ChatGPT的基础 这是一种使用Transf
  • 寻找一维数组的连续数值波峰波谷

    如果一维数组中有波峰和波谷 但是波峰会持续好几个同样的数值或者差异很小而不是只有一个数值 波谷同理 要去寻找这种类型的波峰波谷就会有点难度 数据类似这种 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0016790
  • AH协议与ESP协议简析

    http www gxu edu cn college hxhgxy sec COURSE ch12 2 1 htm http www gxu edu cn college hxhgxy sec COURSE ch12 2 2 htm ht
  • MATLAB实现dijkstra算法的障碍物规避

    MATLAB实现dijkstra算法的障碍物规避 在自主导航系统中 机器人需要能够避开障碍物以安全地到达目标点 其中 dijkstra算法是一种常用的路径规划算法 能够在无权重图中求解最短路径 在本篇文章中 我们将介绍如何使用MATLAB实
  • Java 的VO、DTO、TO、BO等概念总结

    当涉及到Java中的数据传输和对象封装时 有几个常见的概念 它们在不同的上下文中具有不同的用途 以下是这些概念的总结 VO Value Object 含义 VO表示值对象 用于封装一组相关的数据字段 通常没有业务逻辑 用途 VO通常用于数据
  • PBFT共识算法原理

    1 容错类型 PBFT假定错误可以是拜占庭类型的 也就是说可以使任意类型的错误 比如节点作恶 说谎等 这有别于crash down类型的错误 raft paxos这类共识算法只能允许crash down类型错误 节点只能crash而不能产生