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节点可以称之为排序节点,主要有两个功能

  1. 从全网的客户端节点接收交易,然后将交易按照一定的规则进行排序
  2. 将排序好的交易按照固定的时间间隔打包成区块,然后分发给其他组织的主节点

有两种常用类型的排序

  1. solo,整个网络中只有一个排序节点,它收到的交易的顺序就是整个网络中的排好序的**交易顺序。整个模式仅仅适用于开发和测试时用,如果Orderer节点挂掉了,整个网络就是瘫痪的
  2. kafka,将整个网络中的交易排序过程转交给了kafka集群,每一个Orderer节点都是kafka集群的生产者和消费者,生产者将从客户端节点接收到的交易转发给kafka集群,同时消费者中kafka集群里面获取交易,这样或得到的交易就已经是排好序的了
CA节点(可选)

证书颁发机构,鉴定一个区块链的身份是否是合法的,只有被认可的身份才能在区块链中进行交易。

可有选择官方的CA,也可以选择第三方CA,这样就没有CA节点。

2. Fabric的网络拓扑图

整体网络拓扑图如下

基本上包含了上述的所有节点。客户端有4条线与其他组件进行关联,代表不同的操作

  1. 注册登记,客户端向CA机构表名自己的身份,然后从CA机构获取相应的证书,用于后续的操作,比如交易提案,交易提交等等(图中的CA在区块链外,是一个第三方CA)
  2. 客户端向两个组织的背书节点发起交易提案请求,组织1与组织2是两个独立的组织,分别代表了一堆peer节点,可以认为是两个商业主体。两个组织相互独立并不会相互通信,他们共同的数据来源就是排序节点
  3. 排序节点两个功能都在图上显示出了,第一个是从客户端节点接收交易,然后将交易按照一定的规则进行排序,第二个是将排序好的交易按照固定的时间间隔打包成区块,然后分发给其他组织的主节点。这里用的是kafka排序

根据上述的网络拓扑图,就可以更好地理解Fabric的整体流程了。

3. Fabric交易的整体流程

  1. 客户端节点构造交易提案,选择背书节点提交。背书节点的选择是与智能合约相关的,智能合约在安装的时候必须指定背书节点。如果一个智能合约要求至少两个背书节点进行背书,那么客户端就必须将交易提案发到至少两个背书节点。如果因为网络问题,其中一个背书节点没有返回结果,那么就必须发给第三个背书节点,否则该笔交易就是无效的
  2. 背书节点模拟执行交易提案并生成签名。背书节点在收到交易提案以后,首先会做一些验证检查方面的工作,比如对交易提案的格式的验证,该交易提案以前是否被提交过,交易发送者的签名是否正确,以及发送者是否有权利去提交这笔交易等等。验证通过以后,背书节点会将交易发送给智能合约进行隔离执行,执行完以后,会返回执行结果,背书节点对结果进行签名(背书),随后返回给应用程序。这个过程是模拟执行的,并不会产生任何持久化操作
  3. 背书节点将结果返回给客户端。客户端收到以后,首先对消息进行验证,如果验证通过才会执行后续的操作。验证操作以后一般会有两种处理结果。如果该交易是一个查询交易,因为查询并不会对账本产生状态的影响,所以验证签名通过以后,客户单可能就会拿着返回值作为下一步业务逻辑判断的依据,可能会导致下一个交易的产生,而此时交易的流程就结束了
  4. 客户端提交交易,如果交易是一个写交易,且背书返回了,客户端就需要收集到足够多的背书结果,然后将交易提案,背书结果,再加上自己的签名合起来成为一个交易,然后将该交易发送给排序节点
  5. 排序节点对交易排序并做成区块
  6. 排序节点将区块打包并广播区块给组织中的主节点,这里使用的是gRPC通信
  7. 主节点保存区块,更新世界状态(世界状态代表了所有账本状态当前的值)。主节点在接收到区块以后,在记账的过程中会去验证该笔交易是否有效,如果无效就会被记录成无效交,不会更新状态数据库
  8. 主节点在组织内部通过gossip传递消息同步区块
  9. 记账节点保存区块,更新世界状态,与主节点做的类似

Hyperledger Fabric的网络拓扑图与交易流程相关推荐

  1. Hyperledger Fabric从源码分析交易

    在上一章Hyperledger Fabric从源码分析区块结构中提到了区块的概念,并从源码角度对区块的结构进行了剖析,知道一个简单的区块包含了下面几个部分 BlockHeader, 区块头 Block ...

  2. HyperLedger Fabric 1.0的Transaction处理流程

    如果把区块链比作一个只能读写,不能删改的分布式数据库的话,那么事务和查询就是对这个数据库进行的最重要的操作.以比特币来说,我们通过钱包或者Blockchain.info进行区块链的查询操作,而转账行为 ...

  3. 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 ...

  4. Linux搭建Hyperledger Fabric区块链框架 - Hyperledger Fabric模型概念

    企业选型的区块链底层技术 Hyperledger Fabric 概念 2015年,Linux基金会启动了Hyperledger项目,目标是发展跨行业的区块链技术. Hyperledger Fabric ...

  5. Hyperledger Fabric 官网翻译入门教程--之关键概念(Hyperledger Fabric 模型)

    英文地址:http://hyperledger-fabric.readthedocs.io/en/latest/fabric_model.html Hyperledger Fabric Model/ ...

  6. 深度探索Hyperledger技术与应用之超级账本的典型交易流程

    上一篇分享了超级账本的系统逻辑架构和网络节点架构,本篇主要分享超级账本的典型交易流程. 1 典型交易流程 下图所示为Hyperledger Fabric 1.0典型的交易流程图. 从上一节的网络节点架 ...

  7. Hyperledger Fabric网络环境手动配置及其链码自动化部署

    目录 5.1 网络环境的搭建 5.1.1 生成组织结构与身份证书 5.1.2 生成创世区块和通道 5.1.3 启动Fabric网络 5.1.4  创建Fabric-SDK-GO对象并建立通道 5.1. ...

  8. 浅析Hyperledger Fabric共识算法

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链系统是一个分布式架构,交易账本信息由各个节点管理,组成一个庞大的分布式账本.在分布式系统中,各个节点收到的交易信息 ...

  9. HyperLedger Fabric Introduction——区块链超级账本介绍

    介绍 HyperLedger Fabric是一个基于模块化架构的分布式账本解决方案平台,它拥有深度加密.便捷扩展.部署灵活及可插拔等特性.它设计之初的目的是支持不同组件的可插拔实现,并适应整个经济生态 ...

最新文章

  1. 【组合数学】递推方程 ( 非齐次部分是 指数函数 且 底是特征根 | 求特解示例 )
  2. [设计模式]工厂方法模式
  3. php裁剪图片白边,php生成缩略图填充白边(等比缩略图方案)_PHP
  4. spark学习笔记-CentOS 6.4集群搭建(2)
  5. 声乐学习----关于发声的个人解读
  6. 金融市场中的NLP——情感分析
  7. Java爬虫工程师技能列表
  8. 免费网络管理软件大全
  9. 大一c语言实验调试步骤,大一c语言实验报告.docx
  10. wpf DoEvents
  11. Flashpaper去掉toolbar,去掉打印的方法
  12. JPEG与jpg的区别
  13. 大数据基础概念(三)
  14. Android 串口蓝牙通信开发Java版本
  15. AS中的typo作用
  16. 程序员看来都羡慕:一个寒门博士的致谢及其女友回复
  17. C#可以直接调用的Win32API
  18. 浅谈text段、data段和bss段
  19. DDR4相比DDR3的变更点
  20. 前端学习路线笔记 - html 和 html5 的新特性

热门文章

  1. 分类信息网和织梦搬家后报错Fatal error: Uncaught ArgumentCountError: Too few arguments to function AddFilter(), 3
  2. Object类型转换为Integer类型
  3. 具有 Unity Terrain 功能的简单环境设计
  4. [附源码]计算机毕业设计SpringBoot高血压分析平台
  5. 遥信量采集、显示及信息处理功能 遥测及数据处理功能
  6. 遥测、遥信、遥控、遥调的简要说明
  7. 解决 docker 中 zsh: command not found: jupyterlab 问题
  8. 中英三校合作开发新电池结构,可用于改善可穿戴设备体验
  9. 什么是软文营销?为什么做软文营销?
  10. [编程题]神奇的口袋 - Java