区块链100讲:Fabric的PBFT算法

Hyperledger Fabric 1.4.4中添加PBFT并使用caliper压测 由于Fabric1.0后不支持PBFT共识算法,不能支持拜占庭容错。通过给Fabic 1.4添加PBFT共识算法提高Fabric网络的安全性。 阅读详情

image

在公有链中用的最多的是pow算法和pos算法,这些算法都是参与者的利益直接相关,通过利益来制约节点诚实的工作,解决分布式系统中的拜占庭问题。拜占庭容错算法是一种状态机副本复制算法,通过节点间的多轮消息传递,网络内的所有诚实节点就可以达成一致的共识。

使用拜占庭容错算法不需要发行加密货币,但是只能用于私有链或者联盟链,需要对节点的加入进行权限控制;不能用于公有链,因为公有链中所有节点都可以随意加入退出,无法抵挡女巫攻击(sybil attack)。下面主要介绍Fabric的PBFT算法。

1

系统模型

该系统要达成的目的是:让所有正常的replicas节点执行相同的序列操作。

1、系统假设是异步分布式的,通过网络传播的消息可能丢失、延迟、重复或乱序,节点可能失效但节点失效是相互独立的。传递的消息都是通过签名的,恶意节点可以控制失效节点,但是不能够篡改正常节点的签名信息。

2、安全性:在R>=3f+1的前提下,系统能保持安全性和活性。R为总结点数,f为错误节点数。

3、角色分工:

  • replica(副本)所有参与的节点,总数为R

  • primary(主节点):负责将来自client的请求排好序,然后发给所有的备份节点。

  • backup(备份节点):接收并检查主节点的排序信息,如果主节点作恶可以进行换选。

其中主节点的选举方法是:p = v mod R ,其中v是系统的view编号,每次换选时发生view change,view编号+1。

4、quorums

quorums有两个重要的属性:

  • Intersection: 任意两个quorums至少有一个共同的并且正确的replica

  • Availability: 总是存在一个没有faulty replicas的quorum

如果一个replica把信息写给一个quorum,并让该quorum来存储信息,在收到每一个quorum中的成员的确认反馈后,那么我们可以认为该replica的信息已经被可靠的保存在了这个分布式系统中。这是强的约束,当然还有一个weak certificates:就是至少f+1个节点来共同存取信息,这样至少有一个正确的replica存到了这份信息。

2

算法流程

PBFT算法通过三阶段广播协议来使所有正常节点按相同的顺序执行请求,三阶段分别为pre-prepare、prepare和commit。执行流程如图所示。

prepare阶段和commit阶段用来确保那些已经达到commit状态的请求即使在发生view change后在新的view里依然保持原有的序列不变,比如一开始在view 0中,共有req 0, req 1, req2三个请求依次进入了commit阶段,假设没有坏节点,那么这四个replicas即将要依次执行者三条请求并返回给Client。但这时主节点问题导致view change的发生,view 0 变成 view 1,在新的view里,原本的req 0, req1, req2三条请求的序列被保留,作数。那些处于pre-prepare和prepare阶段的请求在view change发生后,在新的view里都将被遗弃,不作数。

image

假设replica 0为主节点,下面详细介绍三阶段:

  • pre-prepare阶段

主节点收到client发送的一条请求,给这条请求编号为n,然后想所有的备份节点发送pre-prepare消息,消息的格式为<

3

垃圾回收

节点在一次三阶段协议中收到的pre-prepre,prepare,commit等消息是非常多的,这小消息都要记录在本地的日志中,为了节省存储空间,可以把已经确认无误的消息给清除掉。只有当至少f+1个节点执行了请求的消息的时候,才能将相应的日志删除。

于是,当一个节点执行完某条请求后,可以广播一条消息,当全网有2f+1个节点都执行完这条请求后就可以删除它的日志了。但是每条消息都进行广播来确认是否删除是低效的,所以可以k条消息放一起确认,每当k条请求执行完后,就广播一条消息,当2f+1个节点都执行完这个请求后,就可以将这k条请求的日志删除了。

这就是建立检查点checkpoint,当节点i执行完k条请求后,就生成一个checkpoint,并广播checkpoint消息:

4

视图变现

以下内容直接从这篇文章(https://blog.youkuaiyun.com/bluecloudmatrix/article/details/51898105?utm_source=tuicool&utm_medium=referral)中摘取过来,原文讲的很明白。

当主节点挂掉后就触发了view change协议。我们需要确保在新的view中如何来延续上一个view最终的状态,比如给这时来的新请求的编号,还有如何处理上一个view还没来得及完全处理好的请求。

  • Data Structures

所以我们需要记录上一个view里发生什么。

有两个集合P和Q,replica i 的P存着 i 在上一 view 中达到prepared状态的请求的一些信息,有了P,在新的view中,replica i就会明白接下来处于prepared状态的请求不能与上一个view中处于prepared状态的请求的编号相同。Q是记录在上一个view里到达pre-prepared状态的请求的一些信息。

  • View-Change Messages

我们来看一下Fig 2, 当备份节点 i 怀疑 view v中的主节点出问题(比如是坏节点)后,它会进入 view v+1,并广播一条VIEW-CHANGE信息给所有的replicas,其中包含该replica i最新的stable checkpoint的编号,还有 replica i上存的每一个checkpoint的编号和digest的集合,还有上面所说的该replica的P和Q两个集合。

  • View-Change-Ack Messages

replicas 会收集VIEW-CHANGE信息并发送ACK确认给 view v+1 中的主节点。

新的主节点收集了VIEW-CHANGE和VIEW-CHANGE-ACK(包含自己的信息),它会将VIEW-CHANGE存在一个集合S中。主节点需要选出一个checkpoint作为新view处理请求的起始状态。它会从checkpoint的集合中选出编号最大(假设编号为h)的checkpoint。接下来,主节点会从h开始依次选取h到h+L(L就是normal case阶段我们提到的设置值)之间的编号n对应的请求在新的view中进行pre-prepare,如果一条请求在上一个view中到达了committed状态,主节点就选取这个请求开始在新的view中进行三阶段。

之所以选取committed的请求,是因为上面我们提到增加COMMIT阶段为了across view来考虑的,处于committed状态的请求的编号在新的view中是有效的,可以继续使用。但是如果选取的请求在上一view中并没有被一个quorum给prepare,那它的编号n有可能是不被一个quorum给同意的,我们选择在新的view中作废这样的请求。

image

参考文章:

https://blog.youkuaiyun.com/bluecloudmatrix/article/details/51898105?utm_source=tuicool&utm_medium=referral#commentBox

https://www.jianshu.com/p/fb5edf031afd

内容来源:区块链兄弟

原文来源:zhj_fly的博客

原文链接:http://t.cn/RdHmOvo

《区块链100讲》专栏策划及内容编辑:HiBlock区块链社区Cynthia

如需转载,需申请并注明专栏及原文出处。

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

image

Hperledger Fabric入门课程1 ——了解Fabric Hyperledger Fabric 入门课程第一节 阅读详情

相关推荐

大数据领域分布式计算的分布式区块链应用

随着全球每天产生超过500亿条社交媒体数据、3000万次电商交易记录和2000PB传感器数据,传统集中式服务器已无法满足"秒级响应+海量存储+多方互信"的需求。本文将聚焦分布式计算与区块链的技术融合,探讨其在大数据存储、处理、协作中的核心价值,覆盖技术原理、算法实现、实战案例与未来趋势。用图书馆协作故事引出分布式计算与区块链的互补性;拆解分布式计算(算力分工)、区块链(可信账本)、共识算法(群体决策)三大核心;通过PBFT共识算法代码示例与大数据存证系统实战,展示技术落地;

AI架构全栈开发实战笔记 333

Fabric中PBFT源码解读——状态同步

文章目录1.写在前面1.1 前置阅读1.2 instance.skipInProgress字段2. 标记需要进行“状态同步”3. 启动“状态同步”操作4. retryStateTransfer函数的实现细节5. simpleConsumer.skipTo函数的实现细节参考文献 1.写在前面 1.1 前置阅读 本篇博客是建立在之前一些博客的基础上。一切重复的知识介绍,笔者在这篇博客中就不再赘述了。 因此,强烈建议读者先去阅读一下以下这几篇博客。 Fabric中PBFT源码解读 (1) Fabric中PBFT

seafooler的专栏 1023

深入理解EtherCAT状态机:从IGH代码看伺服电机如何从‘上电’到‘使能’

本文深入解析EtherCAT状态机的工作原理,重点探讨伺服电机从'上电'到'使能'的状态转换过程。通过分析状态字(Status Word)和控制字(Control Word)的交互机制,结合IGH代码实例,揭示DS402状态机的核心逻辑,帮助工程师解决60%以上的伺服控制问题,提升EtherCAT网络调试效率。

weixin_42549037的博客 289

使用fabric搭建PBFT网络教程

0. 前言 现需要搭建一个基于PBFT共识机制的区块链网络,将使用fabric0.6实现。 0.1 环境介绍 ubuntu-desktop 16.04 amd64 Docker version 20.10.6 docker-compose version 1.27.0 1. 网络搭建 本文是基于yeasy/docker-hyperledger-fabric-peer项目搭建的网络。使用的链码为docker-compose-files/hyperledger_fabric/v0.6.0/。 除了参考上述两个项

Fourier_1024的博客 2241

带挂牵引车倒车运动模型推导及仿真实现

半挂牵引车在倒车时,由于鞍座主销的连接限制,其运动方式与乘用车有显著差异。例如,乘用车在右侧倒车入库时,只需确定泊车起点并将方向盘向右打死。相反,牵引车在倒车时需要先向左转方向盘,当铰接角达到防折叠的临界值时,再将方向盘向右转回,以调整牵引车与挂车至直线状态,完成泊车入库。本研究旨在建立一个基于牵引车带挂车倒车运动学模型,该模型基于以下假设: 道路在车辆行驶过程中保持平坦,无凹凸不平; 车辆以低速行驶,且在运行过程中车身不发生侧倾或俯仰; 行驶过程中,轮胎无变形,无侧向滑动,且不产

jianmo的博客 2697

2、瑞丽-伯纳德对流的拉格朗日拟序结构(FTLE场结果对比)

在中,我简单比较了瑞丽伯纳德对流的FTLE场,但是因为粒子追踪采用的是欧拉方法,所以精度不是很高, 因此与文献中的结果还是有些差别。下面放一张文献中的FTLE场,参数与上篇文章是一致的,Ra = 1e8;Pr = 1;本文将详细的介绍如何得到这样的图片,好吧,其实也不是很详细。总之,先展示以下我个人的结果。可以看出,上图基本上与文献是一致的,因为这里展示的是瞬时场,所以当然不可能是完全一致,至于提取的LCS结构,我在下面也会提及。本着详细介绍的原则,所以这里我很良心的从流场计算开始介绍。

ambu1230的博客 1786

拜占庭容错共识(PBFT)

文章目录一、拜占庭容错共识1. 什么是PBFT拜占庭将军的问题是什么?pBFT 原理2. 与最传统的PoW共识机制相比,PBFT优势和劣势二、参考 一、拜占庭容错共识 1. 什么是PBFT 共识机制堪称区块链的核心。我们知道,EOS、Hyperledger以及Stellar等著名的项目,都采用了BFT(拜占庭容错)共识机制,那么,BFT到底是什么? 什么是 pBFT? Practical Byzantine Fault Tolerance ,实用拜占庭容错。 什么是 BFT? Byzantine Fault

西京刀客 1万+

开源数显表

开源数显表,广泛应用于车床、铣床、磨床、镗床、火花机、线切割等。市面上此类液晶数显表多数都是基于此项目。 一、基本配置 硬件 主控:STM32F407VGT6 LCD:群创AT070TN92 显示驱动:RA8875 光栅尺:3 x 输入(X/Y/Z) 串口:1 x MAX3232 继电器:2 x 输出 存储:AT24C64 模拟输入:LM324C 电源:AC 220V 软件 工程版本:Keil 5 STM32库:V1.4.0 图形界面:uCGUI 多语言支持:中文、英文 二、项目文

m0_70934529的博客 438

在 Fabric v1.4 下添加 PBFT并使用Caliper进行测试

pbft共识算法的实现仅存在于的版本中。在v0.6之后的版本,如fabric v2.x 采用的是kafka、solo、raft共识算法。中所周知,fabric是支持共识可插拔功能的,因此本文对fabric1.4进行共识替换,将自行开发的pbft共识算法加入到fabric v1.x的版本中。smart-go/fabric是对fabricV2.3的改进,smart-go/fabric内部支持pbft,在文章fabric切换共识算法并对pbft和Raft进行测试中对于raft和pbft进行了部署和测试。

weixin_39299288的博客 388

STM32F407ZGT6开发板跑马灯实战:从原理图到烧录全流程(附FlyMcu配置)

本文以正点原子F4探索者开发板(STM32F407ZGT6)为例,手把手指导完成跑马灯实验。内容涵盖从原理图解读、GPIO驱动逻辑分析、HAL库工程搭建,到代码编写与FlyMcu串口烧录配置的全流程,帮助嵌入式开发新手快速实现第一个LED控制程序,打通软硬件开发链路。

weixin_29183637的博客 223

别再只会插卡了!用示波器实测SIM卡上电时序与通信波形(附故障排查)

本文深入解析了SIM卡通信的电气信号与时序规则,通过示波器实测波形揭示SIM卡上电时序与通信协议的关键细节。从VCC、CLK、RST、DATA四路信号的协同工作,到ATR(Answer to Reset)的解析,再到常见故障的波形诊断与排查方法,为硬件工程师提供了实用的调试指南。文章还分享了高级调试技巧与现代化工具链搭建建议,帮助提升物联网设备SIM卡通信的可靠性与效率。

weixin_42567279的博客 328

fabric pbft共识算法加入到fabric1.x或2.x

Fabric1.4搭建 Fabric2.X搭建 Fabric0.6 PBFT测试 有问题的朋友欢迎加 q 260261476 联系 install go wget -c https://studygolang.com/dl/golang/go1.16.3.linux-amd64.tar.gz sudo tar -xz -f ./go1.16.3.linux-amd64.tar.gz -C /usr/local sudo gedit ~/.bashrc # 把下面这 4 行加入到文件末尾 export GO

TBBetter的博客 1万+

Altium Designer应用技巧13: 四层板的拼版方法

本文介绍在Altium Designer中,进行4层板的拼版方法。Altium Designer有多种拼版方法,本文选择最直观的复制、删帖方法来完成,步骤如下: 1、看一下原始文件,如下图所示,我们要对该板进行拼版操作。 2、通过菜单“报告”-“板子信息”得到板子大小,在这里一般切换为mm比较好操作,我们可以使用快捷键"q"。 3、如果是水平拼版,我们需要关心水平长度;如果是垂直拼版...

snmplink的博客 1万+

自己动手部署区块链-hyperledger/fabric-01

Hyperledger(又名Fabric) 来源于伟大的IBM,从最初IBM将44,000行代码进行开源到现在,已经刚好有100个成员参与其发展,参考以下链接: Hyperledger Community:(https://www.hyperledger.org/community) Hyperledger mailing lists and archives:(http://lists.hyp

架构狮老颜 9508

CAPL诊断功能实现

UDS(Unified Diagnostic Services)是一种用于汽车电子系统诊断的标准协议。它定义了一系列诊断服务,用于读取和写入车辆电子控制单元(ECU)中的数据,以及处理诊断故障码(DTC)。UDS协议通常运行在CAN总线上,使用ISO 15765-2(ISO-TP)协议进行数据传输。通过本文的学习,读者应该对CAPL诊断功能实现有了初步的了解,并能够编写复杂的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1517

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

FABRIC架构详解

原文地址 1、区块链解决方案的特性 1.1 分布式帐本 区块链核心概念是分布式帐本,就像下面的图1所示,同样的帐本(全量的交易数据,详见下节)在任意一台节点(不包括客户端)上都有。所以,其优点是数据很难造假,造假后也可以通过追溯记录来追究法律责任。而缺点就是极大的浪费,传统服务每份数据都尽量少存几份,即使存了三份拷贝都已经考虑到诸多异常,并使服务可用性达到N个9了。而区块链这种特性,同时造成的另一...

sangyi1122的博客 4787

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

区块链 Hyperledger Fabric - 超级账本项目在centos7环境下的安装与部署

作用:多人记账,去中心化,每个人都是一个中心,每个人都能进行记账,每个人操作账本时候都会把结果同步到所有人的账本上,防止篡改。 搭建: 一:安装docker 1)执行代码: curl -sSL https://get.daocloud.io/docker | sh 2)安装后查看是否安装成功 docker -v 3) 修改docker,开启docker远程配置 DOCKER_OPTS="$DOCK...

qq_16234927的博客 503

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

如何用区块链技术解决信任问题?Fabric 架构深度解读

阿里妹导读:区块链技术,随着比特币的兴起而为大家所知。但是具体到技术本身,大家相对熟悉的几个词可能是“数据不可篡改”、“公开链”、“分布式数据”、“共识机制”等。这篇文章将抛砖引玉,通过深度解读Hyperledger Project旗下的Fabric,介绍区块链适合的应用场景,如何从技术上去解决实际业务中的问题,希望能和大家一起探讨、学习。前言Hyperledger Project 由Linux基

阿里技术 2954

区块链实战:Hyperledger Fabric多节点网络部署与高性能业务链码

联盟链采用​PBFTRAFT。

2501_91516851的博客 1956

区块链开源实现hyperledger fabric架构详解

、区块链解决方案的特性1.1 分布式帐本区块链核心概念是分布式帐本,就像下面的图1所示,同样的帐本(全量的交易数据,详见下节)在任意一台节点(不包括客户端)上都有。所以,其优点是数据很难造假,造假后也可以通过追溯记录来追究法律责任。而缺点就是极大的浪费,传统服务每份数据都尽量少存几份,即使存了三份拷贝都已经考虑到诸多异常,并使服务可用性达到N个9了。而区块链这种特性,同时造成的另一个问题是帐本不能...

qq_42334029的博客 495

【转载】区块链开源实现hyperledger fabric架构详解

hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM、Intel、各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量。本文中我们依次讨论:区块链的共通特性、fabric核心概念、fabric的交易执行流程。本文来源于笔者欲对公司部分业务上链而进行培训的PPT,故图多文字少,不要怕太长。 区块链核心概念是分布式帐本,就像下面的图1所示,同样的...

weixin_30632883的博客 222

hyperledger fabric_鼎诚鬼才|超级账本入门(四):HYPERLEDGER 权限管理

权限管理权限管理机制是 hyperledger fabric 项目的一大特色。下面给出使用权限管理的一个应用案例。启动集群首先现在相关镜像。$ docker pull yeasy/hyperledger:latest $ docker tag yeasy/hyperledger:latest hyperledger/fabric-baseimage:latest $ docker pull yea...

weixin_39969257的博客 225

区块链联盟链性能优化:共识算法改进与交易吞吐量提升实战​

以下是对“区块链联盟链性能优化:共识算法改进与交易吞吐量提升实战”的完整解析。我将从问题分析入手,逐步讲解共识算法改进的核心方法、交易吞吐量提升策略,并提供实战代码示例。整个回答基于区块链技术原理和行业最佳实践,确保真实可靠。联盟链(如Hyperledger Fabric)常用于企业场景,性能瓶颈主要在共识算法的高延迟和低吞吐量。优化目标是通过算法改进和系统调整,显著提升交易处理能力(例如从每秒数百交易提升到数千)。

idhsajkhs的博客 479

从零开始,5分钟创建并玩转属于自己的区块链-图文攻略

前言区块链今年发展真是飞快!从最初一个陌生的概念,到如今已经在各个行业起步,星星之火大有燎原之势。真希望能拥有自己的区块链练练手O(∩_∩)O~!可是一个人、一台电脑,怎么才能搭起来区块链环境……火到不行的区块链,想说爱你不容易!Don’t Worry! 小编已经沉迷于区块链和智能合约不可自拔!现在就手把手带你从零开始,5分钟玩转属于自己的区块链!IBM中国研究院开发的超能云(SuperVesse...

macair123的博客 4428
上一篇: 如何优雅的发布并使用 ERC875 非同质代币(non-fungible token - NFTs)
下一篇: 众说区块链:区块链应用场景之Token
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值