Hyperledger Fabric的网络拓扑图与交易流程
1. Fabric中的四种节点
客户端节点
介于应用程序与底层之间,是两者之间交互的媒介节点。它不能独立存在,必须与Orderer节点
与Peer节点
建立连接,才可以发挥作用,比如连接到Orderer节点
进行通道创建,连接到Peer节点
进行交易模拟执行
Peer节点
Peer节点
是一个统称,包含了Leader(主节点),Anchor(锚节点),Endorser(背书节点)以及Committer(记账节点)
Leader
主节点连接到Orderer节点
并与之通信,从Orderer节点
获取区块,并通知给组织内部的其他节点,主节点可以通过自动选举产生。
Anchor锚节点
是在通道上可以被所有其他Peer
节点发现的节点,负责和其他组织通信,可以有多个。
Endorser背书节点
,可以简单理解为担保,它就是为交易做担保的。Farbic中的共识的第一步,就是应用程序向背书节点发送一个交易提案,交易背书节点经过交易模拟执行以后,返回给应用程序背书结果以及签名。
Endorser背书节点
不是一个固定的节点类型,是和智能合约绑定的。每一个智能合约在安装到区块链上的时候,都会设置其专有的背书策略,指定该智能合约的交易由哪些节点背书以后才是有效的。也就是说只有在Endorser背书节点
上才会运行智能合约。
如果一个Peer节点
不是某些背书策略里的一员,那么就是一个普通的Peer节点
,也就是最后的Committer记账节点
。
Committer记账节点
,所有的Peer节点
都是记账节点,无论它是否是Anchor锚节点
还是Endorser背书节点
。记账节点的主要功能是用于验证从Orderer节点
接收到的区块,验证区块的有效性以及交易的有效性,验证完以后记录到本地的账本中。如果交易有效,同时更改区块链上的状态数据。
Peer节点的几种类型不是互相排斥的,一个节点可能同时是几种类型,也有可能只是Committer记账节点
Orderer节点
Orderer节点
可以称之为排序节点,主要有两个功能
- 从全网的客户端节点接收交易,然后将交易按照一定的规则进行排序
- 将排序好的交易按照固定的时间间隔打包成区块,然后分发给其他组织的主节点
有两种常用类型的排序
- solo,整个网络中只有一个排序节点,它收到的交易的顺序就是整个网络中的排好序的**交易顺序。整个模式仅仅适用于开发和测试时用,如果
Orderer节点
挂掉了,整个网络就是瘫痪的 - kafka,将整个网络中的交易排序过程转交给了kafka集群,每一个
Orderer节点
都是kafka集群的生产者和消费者,生产者将从客户端节点接收到的交易转发给kafka集群,同时消费者中kafka集群里面获取交易,这样或得到的交易就已经是排好序的了
CA节点(可选)
证书颁发机构,鉴定一个区块链的身份是否是合法的,只有被认可的身份才能在区块链中进行交易。
可有选择官方的CA,也可以选择第三方CA,这样就没有CA节点。
2. Fabric的网络拓扑图
整体网络拓扑图如下
基本上包含了上述的所有节点。客户端有4条线与其他组件进行关联,代表不同的操作
- 注册登记,客户端向CA机构表名自己的身份,然后从CA机构获取相应的证书,用于后续的操作,比如交易提案,交易提交等等(图中的CA在区块链外,是一个第三方CA)
- 客户端向两个组织的背书节点发起交易提案请求,组织1与组织2是两个独立的组织,分别代表了一堆peer节点,可以认为是两个商业主体。两个组织相互独立并不会相互通信,他们共同的数据来源就是排序节点
- 排序节点两个功能都在图上显示出了,第一个是从客户端节点接收交易,然后将交易按照一定的规则进行排序,第二个是将排序好的交易按照固定的时间间隔打包成区块,然后分发给其他组织的主节点。这里用的是kafka排序
根据上述的网络拓扑图,就可以更好地理解Fabric的整体流程了。
3. Fabric交易的整体流程
- 客户端节点构造交易提案,选择背书节点提交。背书节点的选择是与智能合约相关的,智能合约在安装的时候必须指定背书节点。如果一个智能合约要求至少两个背书节点进行背书,那么客户端就必须将交易提案发到至少两个背书节点。如果因为网络问题,其中一个背书节点没有返回结果,那么就必须发给第三个背书节点,否则该笔交易就是无效的
- 背书节点模拟执行交易提案并生成签名。背书节点在收到交易提案以后,首先会做一些验证检查方面的工作,比如对交易提案的格式的验证,该交易提案以前是否被提交过,交易发送者的签名是否正确,以及发送者是否有权利去提交这笔交易等等。验证通过以后,背书节点会将交易发送给智能合约进行隔离执行,执行完以后,会返回执行结果,背书节点对结果进行签名(背书),随后返回给应用程序。这个过程是模拟执行的,并不会产生任何持久化操作
- 背书节点将结果返回给客户端。客户端收到以后,首先对消息进行验证,如果验证通过才会执行后续的操作。验证操作以后一般会有两种处理结果。如果该交易是一个查询交易,因为查询并不会对账本产生状态的影响,所以验证签名通过以后,客户单可能就会拿着返回值作为下一步业务逻辑判断的依据,可能会导致下一个交易的产生,而此时交易的流程就结束了
- 客户端提交交易,如果交易是一个写交易,且背书返回了,客户端就需要收集到足够多的背书结果,然后将交易提案,背书结果,再加上自己的签名合起来成为一个交易,然后将该交易发送给排序节点
- 排序节点对交易排序并做成区块
- 排序节点将区块打包并广播区块给组织中的主节点,这里使用的是gRPC通信
- 主节点保存区块,更新世界状态(世界状态代表了所有账本状态当前的值)。主节点在接收到区块以后,在记账的过程中会去验证该笔交易是否有效,如果无效就会被记录成无效交,不会更新状态数据库
- 主节点在组织内部通过
gossip
传递消息同步区块 - 记账节点保存区块,更新世界状态,与主节点做的类似
Hyperledger Fabric的网络拓扑图与交易流程相关推荐
- Hyperledger Fabric从源码分析交易
在上一章Hyperledger Fabric从源码分析区块结构中提到了区块的概念,并从源码角度对区块的结构进行了剖析,知道一个简单的区块包含了下面几个部分 BlockHeader, 区块头 Block ...
- HyperLedger Fabric 1.0的Transaction处理流程
如果把区块链比作一个只能读写,不能删改的分布式数据库的话,那么事务和查询就是对这个数据库进行的最重要的操作.以比特币来说,我们通过钱包或者Blockchain.info进行区块链的查询操作,而转账行为 ...
- Blurring the Lines between Blockchains andDatabase Systems: the Case of Hyperledger Fabric(翻译)
Blurring the Lines between Blockchains and Database Systems: the Case of Hyperledger Fabric ABSTRACT ...
- Linux搭建Hyperledger Fabric区块链框架 - Hyperledger Fabric模型概念
企业选型的区块链底层技术 Hyperledger Fabric 概念 2015年,Linux基金会启动了Hyperledger项目,目标是发展跨行业的区块链技术. Hyperledger Fabric ...
- Hyperledger Fabric 官网翻译入门教程--之关键概念(Hyperledger Fabric 模型)
英文地址:http://hyperledger-fabric.readthedocs.io/en/latest/fabric_model.html Hyperledger Fabric Model/ ...
- 深度探索Hyperledger技术与应用之超级账本的典型交易流程
上一篇分享了超级账本的系统逻辑架构和网络节点架构,本篇主要分享超级账本的典型交易流程. 1 典型交易流程 下图所示为Hyperledger Fabric 1.0典型的交易流程图. 从上一节的网络节点架 ...
- Hyperledger Fabric网络环境手动配置及其链码自动化部署
目录 5.1 网络环境的搭建 5.1.1 生成组织结构与身份证书 5.1.2 生成创世区块和通道 5.1.3 启动Fabric网络 5.1.4 创建Fabric-SDK-GO对象并建立通道 5.1. ...
- 浅析Hyperledger Fabric共识算法
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链系统是一个分布式架构,交易账本信息由各个节点管理,组成一个庞大的分布式账本.在分布式系统中,各个节点收到的交易信息 ...
- HyperLedger Fabric Introduction——区块链超级账本介绍
介绍 HyperLedger Fabric是一个基于模块化架构的分布式账本解决方案平台,它拥有深度加密.便捷扩展.部署灵活及可插拔等特性.它设计之初的目的是支持不同组件的可插拔实现,并适应整个经济生态 ...
最新文章
- 【组合数学】递推方程 ( 非齐次部分是 指数函数 且 底是特征根 | 求特解示例 )
- [设计模式]工厂方法模式
- php裁剪图片白边,php生成缩略图填充白边(等比缩略图方案)_PHP
- spark学习笔记-CentOS 6.4集群搭建(2)
- 声乐学习----关于发声的个人解读
- 金融市场中的NLP——情感分析
- Java爬虫工程师技能列表
- 免费网络管理软件大全
- 大一c语言实验调试步骤,大一c语言实验报告.docx
- wpf DoEvents
- Flashpaper去掉toolbar,去掉打印的方法
- JPEG与jpg的区别
- 大数据基础概念(三)
- Android 串口蓝牙通信开发Java版本
- AS中的typo作用
- 程序员看来都羡慕:一个寒门博士的致谢及其女友回复
- C#可以直接调用的Win32API
- 浅谈text段、data段和bss段
- DDR4相比DDR3的变更点
- 前端学习路线笔记 - html 和 html5 的新特性
热门文章
- 分类信息网和织梦搬家后报错Fatal error: Uncaught ArgumentCountError: Too few arguments to function AddFilter(), 3
- Object类型转换为Integer类型
- 具有 Unity Terrain 功能的简单环境设计
- [附源码]计算机毕业设计SpringBoot高血压分析平台
- 遥信量采集、显示及信息处理功能 遥测及数据处理功能
- 遥测、遥信、遥控、遥调的简要说明
- 解决 docker 中 zsh: command not found: jupyterlab 问题
- 中英三校合作开发新电池结构,可用于改善可穿戴设备体验
- 什么是软文营销?为什么做软文营销?
- [编程题]神奇的口袋 - Java