区块链四:共识机制——PBFT算法深入讲解

2023-11-06

@TOC

背景介绍

共识机制是区块链一大知识领域, 作用就是维持分布式节点间的一致性,从而支撑去中心化,早在区块链之前,就存在各种分布式的共识机制,共识机制不是因区块链所发明,但区块链却对共识机制推广和进步有着重要影响。

共识算法分类

按应用场景分,共识算法可以分成两大类, 1、有坏人节点, 2、无坏人节点。
1、 有坏人节点,典型拜占庭问题,即系统中可能出现故意传送假结果的节点导致分布式系统结果错误,这种场景重点是在存在坏人的情况下能达成大家认可的一致结果。 其中BFT,PBFT, POW,POS都属于这类。
2、 无坏人几点,此类分布式共识算法,只需要保证各节点行动一致,并在部分节点down后能继续工作,一般在封闭式的分布系统使用,其中有Raft,Paxos。

对几种常见共识算法,大都类似的思路, 就是 一个组长(primary)带着N个成员(backup)干活,由组长派活收集各节点的状态,再确定结果是否一致, 类似分布式事务的二段提交。

其中不同算法主要解决这几个问题思路不一样,

  1. 系统如何判断达成一致?
  2. 组长down了或部分节点down了怎样保持系统可用性?
  3. 出现分叉了怎样处理两边的结果?

PBFT

这部分就讲解PBFT算法,怎样解决以上几个问题。
PBFT的算法思想, 以状态机运作,包括节点状态,消息状态, 由组长带领大家统一步调处理消息,而消息的是否继续迁移下一个状态,则通过多少节点达成一致,最后消息达到处理完的状态。

消息处理:

消息状态迁移路径: request -> pre-prepare -> prepare-> commit -> reply
在这里插入图片描述

C 代表Client, 客户端向系统主节点(0:组长)发送一请求request, 请求开始进入处理阶段
pre-prepare : 主节点参与把request分配一个唯一的编号 request-number n, 并把request跟n一起组成pre-prepare消息广播给所有成员(backup节点)

prepare : 所有成员(backup节点),收到pre-prepare消息, 依靠签名字段检查消息是否来源于主节点,确认无误,将request编号和本节点签名组成prepare消息,广播给其他所有成员,表示自己认可这请求编号和准备好了。

Commit :所有节点,若收到的prepare消息,依靠签名检查是否正确,若prepare消息数量超过全部节点数量的3分之二, 则认为系统达成一致认可该请求和请求编号,对所有节点广播commit消息,表示该节点可以进行request的业务。

Reply : 所有节点, 若收到commit消息,依靠签名检查消息是否正确,若commit的消息数量超过所有节点的3分之一,则完成request要求的业务,并构建reply消息,直接回复给client。Client根据是否收到超过3分之1个节点的正确回复,判断系统是否完成了请求request。

上面的图及说明就是PBFT的请求处理过程,那么回到上面的问题,

问题一:系统判断达成一致?
这里分两个阶段,prepare, commit, 全网超过三分之二个prepare,则达成一致, commit超过三分之一则达成一致。

简单说就是坏几点要少于 三分之一。

灵魂拷问

1、为啥是少于三分之一,而不是少于二分之一?
如果是多数服从多数,二分之一确实能满足,但这里是有两个阶段 prepare, commit。
n个节点,设错误节点 f, 第1到f个是错误节点, f+1 到n 是好节点pre-prepare -prepare, n-f 个节点都正确广播 prepare消息,prepare-commit, 当收到n-f 确认消息时,节点是不能确认这里n-f个消息时有多少来源f节点的,最多可能是f个节点,也就是n-f个消息中最多有个f是假消息,也不能影影响共识结果,因此 n-f-f > f 因此 f< n/3。

另一种理解,n-f个正常节点中,如果出现分歧,也能达成一致性,那么
(n-f)/2 >f,得 n>3f, f<n/3。

从上面的说明也知道,如果对于请求request r1 若commit(m) 成功达成一致,则不可能存在 commit(m’) 也达成一致,因此不可能存在分叉的情况。这里也回答了第三个问题(问题三,出现分叉了怎样处理两边的结果,不存在的)。

追问

为啥要分开两阶段,一阶段就搞掂不香吗?
——这里是为了保证request的顺序,第一阶段分配顺序号,第二阶段才是做业务。

这里也提到commit阶段可能k节点做视图转换,这是什么?
——这就涉及第二个问题,下面分晓。

问题二: 组长down了或部分节点down了怎样保持系统可用性?

视图转换

上面保证分布式系统的正确性safety,做正确的事,而视图转换则是为了可用性liveness, 假如primary节点down了,系统怎样? 要保证系统继续可用,就要使用view-change。

PBFT有一个全局的视图编号view number: v,主节点primary是根据 v mod n =i 得到 节点i为主节点。视图转换,就是v递增,主节点primary也相应转移到另一个节点。

  1. 当client发送请求primary后,一定时间没收到回复,则会发送请求给其他backup节点, backup 节点收到request后,起一个timer,如果timer过期,还没执行这个request(commit还没达一致),则backup节点发起view-change

  2. Backup 节点会广播一个view-change 消息,包含原来视图编号 v 合下个视图编号v+1
    如果节点收到的view-change 消息多于三分之二,则说明view-change达成一致。

  3. 当 v+1 mod n = j , 新的primary节点j,收到足够的view-change消息后, 就广播new-view消息,告诉其他节点使用新视图。

  4. 其他节点收到new-view后,确认消息签名正确,进入新视图;

有了视图转换,如果主节点down了,就会触发视图转换更换另一个主节点,如果下一个主节点也是down的,则继续切换,直到找到可用的主节点。因此保证只有有超过三分二的节点是好的,系统就可用。

可用性liveness,还要保证当视1图转换时候,可能有节点已经commit序列n,而有的节点只commit到序列n-1.,转移视图后,怎样保证request在各节点都能正确一致执行。
这还要引出下问题,checkpoint 机制。

Checkpoint机制:

这里就需要checkpoint, 这里checkpoint跟其他系统日志checkpoint基本一样。系统定期创建checkpoint,记录最新稳定提交的操作,并广播checkpoint消息,当节点收到超过三分之二的创建checkpoint消息,该checkpoint达成一致。视图转换时候带上最新的checkpoint,在checkpoint以后的请求,视为不稳定的,需要重做。

总结

PBFT算法是通过节点消息状态机方式达成请求处理的一致性,再通过视图转换,checkpoint机制确保系统的可用性,而本文概要介绍了这几方面的原理,但也过滤具体算法细节,有兴趣建议查看论文【引用1】

1 PBFT算法论文 http://pmg.csail.mit.edu/papers/osdi99.pdf

历史

区块链三:深入解析比特币交易原理
区块链二:比特币的区块数据结构
区块链一 :区块链应用介绍和展望

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

区块链四:共识机制——PBFT算法深入讲解 的相关文章

  • 每天都在谈SOA和微服务,但你真的理解什么是服务吗?

    近几年来 我一直从事着和面向服务相关的底层软件研发工作 逐渐的形成了一些自己的看法 其中我觉得比较重要的看法就是服务需要一个更准确细致的定义 简单来说 服务的本质就是行为 业务活动 的抽象 为了更好的阐述新服务的概念 并方便与传统的SOA中
  • 区块链能提供有效的身份管理?

    随着身份盗窃和数据泄露在世界各地越来越多的情况下 身份验证是一个主要问题 对访问数据的人进行身份验证实际上是他们要求的 每天 数以百万计的人在网上进行不同的活动 从研究一个学术话题 到购买新的项目 到在社交媒体平台上发表评论 甚至进行不同的
  • 2018年区块链人才趋势:降温、调节、蓄势待发

    2018年 戊戌年 是一个不平静的年份 自960年前的戊戌年王安石变法 到最近两百年的四个戊戌年 其间发生的大事无不与 变革 息息相关 年初 从科技圈 金融圈里 引爆出一个叫 区块链 的公众热点 从技术角度而言 这并非新生事物 但因其巨大的
  • 区块链程序要怎么去测试?

    区块链程序开发越来越多 区块链怎么做测试 让大家很好奇 与传统测试不同的是区块链系统边界模糊 不管是是独立的应用程序 还是客户端 服务器模式的应用程序 传统软件都具备明显的系统边界 可以通过UI用户界面或者客户端去进行测试 区块链底层则不同
  • 区块链数据的存储和更新

    目录 1 引言 2 主要流程 2 1数据库读取 2 1 1 从数据库加载块数据 2 1 2从数据库读取账户信息 2 2 区块链数据更新与回滚 2 2 1 交易数据 2 2 2 块数据 1 引言 在第一篇文章里我们从静态的角度讲解了以太坊的数
  • Bridge Champ举办人机对战赛:NFT游戏与传统竞技共生发展编织新格局

    概要 现在 NFT与体育竞技正日益紧密地联系在一起 一些体育项目开始推出与赛事或球队相关的NFT 同时也有部分NFT游戏开始举办电子竞技赛事 这种共生发展正在改变体育竞技的生态 笔者采访了桥牌冠军项目相关负责人 探讨NFT游戏与传统体育竞技
  • 如何使用区块链技术保护个人隐私和数据安全

    区块链技术是一种分布式账本技术 它具有不可篡改 去中心化 透明度高等特点 区块链技术能够实现数据的可信存证 隐私保护和交易安全 并且能够通过智能合约的自动执行 因此被广泛应用于金融 电商 物流 社交网络等领域 区块链技术的核心是 分布式账本
  • AWS动手实验 - 创建一个Web3网站

    实验操作和录播 亚马逊云科技开发者社区 web3 dApp demo README CN md at main Chen188 web3 dApp demo GitHub 注意事项 按照操作手册进行即可 需要注意到的几个地方 1 EC2 的
  • 圆石说│彭一鸣:运用区块链技术赋能实体旅游产业;微软开放6万项专利包括一个开源区块链项目……

    智联招聘 区块链岗位需求主要集中在一线和新一线城市 智联招聘报告显示 从目前区块链职位的城市分布来看 该领域的岗位需求主要集中在一线和新一线城市中 其中 北京 上海和深圳位于第一梯队 职位占比分别达到24 20 和10 杭州 广州和成都紧随
  • 自己动手部署以太坊联盟链

    一个区块链学习项目 GitHub https github com xianfeng92 Love Ethereum 假设已经在Ubunbu 14 04 LTS上安装好了以太坊客户端Geth 使用Geth部署以太坊联盟链 以太坊Geth客户
  • Fabric private data入门实战

    Hyperledger Fabric private data是1 2版本引入的新特性 fabric private data是利用旁支数据库 SideDB 来保存若干个通道成员之间的私有数据 从而在通道之上又提供了一层更灵活的数据保护机制
  • "我为区块链赋能实体经济代言"第二批代言人:复旦大学张江研究院教授陈文君

    我为区块链赋能实体经济代言 推出以来 颇受行业关注 为进一步规范行业发展 落实区块链赋能实体经济的目标 为行业发展 正本清源而发声 新一轮的 我为区块链赋能实体经济代言 于9月3日重磅启动 我为区块链赋能实体经济代言100人第二批 第3位代
  • 区块链中的哈希算法

    区块链中的密码学 密码学在区块链中的应用主要有两个 哈希算法与非对称加密算法 这次主要对哈希算法进行详细的说明 哈希算法 哈希算法的特点有 1 输入可以为任意大小的字符串 2 产生固定大小的输出 3 可以在合理的时间内算出输出值 若要满足密
  • 【区块链与密码学】第2-3讲:区块链基础技术大剖析之哈希函数

    本课堂内容全部选编自PlatON首席密码学家 武汉大学国家网络安全学院教授 博士生导师何德彪教授的 区块链与密码学 授课讲义 教材及互联网 版权归属其原作者所有 如有侵权请立即与我们联系 我们将及时处理 2 4 1 哈希函数 区块链作为一个
  • 区块链交易平台服务器该怎么选

    区块链交易平台服务器该怎么选 随着互联网技术的发展 区块链也发展成为一种潮流 越来越多的人加入到区块链行业中来 尤其是区块链交易平台 但也有很多人不了解区块链对服务器的要求 那么我们就要好好说说搭建区块链交易平台服务器该怎么选 1 区块链交
  • 凌晨!比特币突破4万美元,本轮上涨分析与未来展望!

    比特币在上周五 1日 成功突破38000美元大关后 就持续震荡走高 在今晨06 30左右 更是一举突破4万大关 最高来到41750美元 再度刷下2023年新高 以太坊 ETH 在差不多同样时间 最高来到2265美元 刷新年内新高 近24小时
  • Sui生态DeFi将参加Builder DAO举办的活动,为期三天畅谈如何Build on Sui

    LeadUp the Night是一个定期举办的MeetUp活动 由Builder DAO邀请区块链各方项目开发者 VC担任本活动的讲师 这个活动旨在促进区块链技术的发展和应用 让参与者有机会开发创新的区块链应用 探索区块链技术的潜力 12
  • Stellar Consensus Protocol(SCP)的共识算法

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

    Substrate是用于构建特定类型区块链的工具箱 它本身并不是一个区块链 而是开发者用来创建独特而强大的区块链的一套工具 Substrate允许开发者可以自己创建所需所想功能的区块链 无需受限于现有的设计 Substrate使用FRAME
  • 【网络安全】——区块链安全和共识机制

    区块链安全和共识机制 摘要 区块链技术作为一种分布式去中心化的技术 在无需第三方的情况下 使得未建立信任的交易双方可以达成交易 因此 区块链技术近年来也在金融 医疗 能源等多个行业得到了快速发展 然而 区块链为无信任的网络提供保障的同时 也

随机推荐

  • 阿里云商标注册入口/查询/买卖/分类表/撤三/续展/驳回复审入口汇总一键直达

    阿里云商标服务包括商标注册申请 商标近似查询 商标买卖 商标分类表 商标撤三申请 商标续展申请 商标驳回复审 商标起名及商标管理后台等服务 阿里云百科汇总阿里云商标服务入口大全 本文长期更新阿里云商标注册各种链接地址 阿里云商标服务入口链接
  • matplotlib学习

    figure axes axis add subplot subplot figure包括axes figure是画板 axes是画板上的子图 figure 使用add subplot pyplot使用的是subplot生成一个figure
  • (理财八)普通必须掌握的理财方式----定投

    理财八 普通必须掌握的理财方式 定投 我们先要了解一种 一直会用到的 打理股权类产品的投资方式一一基金定投 基金定投不是一个产品 是打理账户用的方法 是未来讲到股票基金配置时候 买入频率的方法 这种方法是被验证确实能帮小白理财者挣到钱的方式
  • 计算机网络01之计算机网络分层结构

    计算机网络01 1 计算机网络分层结构 1 下层为上层提供服务 SDU数据单元 为完成用户所要求功能而应传送的数据 PCI协议控制单元 控制协议操作的信息 PDU协议数据单元 对等层次之间传送的数据单位 2 OSI 7层参考模型 OSI 7
  • 微分中值定理定义及几何意义

    微分中值定理定义及几何意义 1 罗尔定理 2 拉格朗日中值定理 3柯西中值定理 1 罗尔定理 如果函数f x 满足 1 在闭区间 a b 上连续 2 在开区间 a b 内可导 3 f a f b 则在 a b 内至少有一点 a b 使得f
  • QT信号和槽

    系列文章目录 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一
  • Node.js后端开发 - 基础篇 #2 全局对象

    文章目录 一 前言 二 全局对象 1 console打印输出 2 setTimeout超时输出 3 setInterval循环间隔输出 4 clearInterval 清除循环间隔输出 5 dirname输出当前所在目录 6 filenam
  • 周志华 机器学习 Day26

    学习与推断 基于概率图模型定义的联合概率分布 我们能对目标变量的边际分布或以某些可观测变量为条件的条件分布进行推断 边际分布是指对无关变量求和或积分后得到的结果 例如在马尔可夫网中 变量的联合分布呗表示成极大团的势函数乘积 于是 给定参数
  • 华为OD机试 - 不含101的数(Java)

    题目描述 小明在学习二进制时 发现了一类不含 101的数 也就是 将数字用二进制表示 不能出现 101 现在给定一个整数区间 l r 请问这个区间包含了多少个不含 101 的数 输入描述 输入的唯一一行包含两个正整数 l r 1 l r 1
  • NodeMcu arduino ESP8266 使用WIFIManager 库

    WiFiManager库使用说明 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 W
  • matlab作出马鞍面,[2018年最新整理]实验一马鞍面绘制实验.ppt

    2018年最新整理 实验一马鞍面绘制实验 10 实验一 马鞍面绘图实验 实验目的和实验内容 实验原理 实验相关的思考问题 熟悉几个函数 mesh contour linspace figure 显示图形框 mesh X Y Z Meshz
  • 项目上线后遇到的问题总结

    项目上线了 一堆堆的问题也随之出现了 除了时间比较匆忙导致没有细致的做验证之外 当初也确实没有在最重要的功能需求上把好关 导致后来要做很多的修改而弥补之前的错误 下面是上线后遇到的问题和解决办法总结 问题一 用户非正常流程导致的错误 用户注
  • 【读书笔记->统计学】07-03 离散型概率分布-泊松分布概念简介

    泊松分布 假设一个情境 下星期电影院有一个大型促销 影院经理希望一切都完美无缺 爆米花机每一周的平均故障次数为3 4 或者说爆米花机的故障率为3 4 求爆米花机下一周不发生故障的概率有多大 如果预计故障太多次 就打算买个新的爆米花机了 与前
  • 嵌入式系统编程中常用的回调处理

    在嵌入式编程中经常看到形如下图所示的一些函数调用或者函数初始化 这种形式的原理 以及在编程过程中能带来什么好处 可以通过下面这篇文章来简单的解释和说明 函数是C语言的核心概念 主调函数 caller 调用被调函数 callee 是一般的调用
  • 用《文心一言》1分钟写一篇博客简直yyds

    文章目录 前言 文心一言是什么 文心一言可以做什么 文心一言写博客 申请体验 写在最后 创作者 全栈弄潮儿 个人主页 全栈弄潮儿的个人主页 个人社区 欢迎你的加入 全栈弄潮儿的个人社区 专栏地址 AI大模型 前言 当今社会 博客已成为了许多
  • Java从List中删除元素的正确用法

    还是先举个例子 你侄女对天文知识感兴趣 然后你就用程序写了太阳系九大星系 水星 金星 地球 火星 木星 土星 天王星 海王星 冥王星 的运行轨迹图 然后拿给侄女看 然后她说错了错了 你的知识太旧了 多了一颗星 根据2006年8月24日国际天
  • 把每八行格式重复的txt文件导入数据库

    记录代码 private static String url unic useUnicode true characterEncoding utf8 public static void main String args throws SQ
  • Java思维编程

    编程思维可以具体分为四个方面 分解 拥有编程思维的人 会把一个复杂的大问题 拆解成更可执行 更好理解的小步骤 复杂问题很难一下子破解 但如果把它细分成很多个小问题 逐步解决 就容易多了 模式识别 什么是模式识别呢 所谓识别模式 其实就意味着
  • JAVA基础之单元测试

    目录 1 单元测试介绍 2 环境搭建 2 1 JUnit 4 2 2 JUnit 5 3 快速上手 3 1 JUnit 4 3 2 JUnit 5 1 单元测试介绍 单元测试就是针对最小的功能单元编写测试代码 Java程序最小的功能单元是方
  • 区块链四:共识机制——PBFT算法深入讲解

    TOC 背景介绍 共识机制是区块链一大知识领域 作用就是维持分布式节点间的一致性 从而支撑去中心化 早在区块链之前 就存在各种分布式的共识机制 共识机制不是因区块链所发明 但区块链却对共识机制推广和进步有着重要影响 共识算法分类 按应用场景