HyperLeger Fabric学习(一)

本文详细介绍了Hyperledger Fabric的架构设计,包括其模块化的设计思路、逻辑架构和网络架构等内容。阐述了Fabric如何通过多链多通道设计实现数据隔离和隐私保护,以及交易流程和账本管理的具体细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、HyperLeger简介

1、HyperLeger简介

Hyperledger(超级账本)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程。由于点对点网络的特性,分布式账本技术是完全共享、透明和去中心化的,故非常适合于在金融行业的应用,以及其它的例如制造、银行、保险、物联网等行业。通过创建分布式账本的公开标准,实现虚拟和数字形式的价值交换,例如资产合约、能源交易、结婚证书、能够安全和高效低成本的进行追踪和交易。

Hyperledger是一个联合项目,超级账本由面向不同目的和场景的子项目构成,包括10个项目,其中区块链框架类项目5个:Fabric,Sawtooth,Iroha,Burrow和Indy;区块链工具类项目5个:Cello,Composer,Explorer,Caliper和Quilt。
在这里插入图片描述

Hyperledger的所有项目都遵守Apache v2许可,并约定共同遵守如下的基本原则:

  • A、重视模块化设计:包括交易、合同、一致性、身份、存储等技术场景。
  • B、重视代码可读性:保障新功能和模块都可以很容易添加和扩展。
  • C、可持续的演化路线:随着需求的深入和更多的应用场景,不断增加和演化新的项目。

Apache v2 许可协议是商业友好的知名开源协议,鼓励代码共享,尊重原作者的著作权,允许对代码进行修改和再发布(作为开源或商业软件)。

Hyperledger社区目前拥有超过 200家全球知名企业和机构(大部分均为各自行业的领导者)会员,其中包括40多家来自中国本土的企业,包括Onchain、三一重工、万达科技、华为、百度、腾讯等。

以比特币为代表的数字货币提供了区块链技术应用的原型,以太坊为代表的智能合约平台延伸了区块链技术的功能,Hyperledger则通过进一步引入权限控制和安全保障,开拓了区块链技术的全新领域。Hyperledger首次将区块链技术引入到分布式联盟账本的应用场景,为未来基于区块链技术打造高效率的商业网络打下了坚实的基础。

Hyperledger项目的出现,实际上宣布区块链技术已经不仅局限在单一应用场景中,也不仅局限在完全开放的公有链模式下,区块链技术已经正式被主流企业市场认可并在实践中采用。同时,Hyperledger中提出和实现了许多创新的设计和理念,包括完备的权限和审查管理、细粒度隐私保护以及可拔插、可扩展的实现框架,对于区块链相关技术和产业的发展都将产生深远的影响。

Hyperledger官网: https://www.hyperledger.org/ Hyperledger源码托管:
https://github.com/hyperledger Hyperledger中文文档:
https://github.com/HyperledgerCN/hyperledgerDocs
https://hyperledgercn.github.io/hyperledgerDocs/

2、Hyperledger社区组织结构

Hyperledger社区自成立起就借鉴了众多开源社区组织的经验,形成了技术开发为主体、积极面向应用的体系结构。

Hyperledger社区的项目开发工作由技术委员会(Technical Steering Committee,TSC)指导,首任主席由来自IBM开源技术部门的CTO Chris Ferris 担任;管理委员会主席则由来自Digital Asset Holdings的CEO Blythe Masters担任。自2016年5月起,Apache基金会创始人Brian Behlendorf担任超级账本项目的首位执行总监(Executive Director)。

Hyperledger社区十分重视大中华地区的应用落地和开发情况,2016年12月,大中华区技术工作组正式成立,负责推动本土社区组织建设和相关的技术发展和应用工作。

Hyperledger社区组织结构如下:
在这里插入图片描述

Hyperledger社区目前主要是三驾马车领导的结构:

  • Technical Steering Committee (技术委员会)负责技术相关的工作,下设多个工作组,具体带动各个项目和方向的发展。
  • Governing Board(管理董事会)负责社区组织的整体决策,由Hyperledger会员中推选出代表。
  • Linux Foundation(Linux基金会)负责基金管理,协助Hyperledger社区在Linux基金会的支持下发展。

Linux 基金会和Hyperledger 社区十分重视项目在大中华区的应用和落地情况,并希望能为开发者们贡献开源社区提供便利。因此,Hyperledger首任执行董事Brian Behlendorf于2016年12月1日提议成立 大中华区技术工作组(TWG-China),并得到TSC成员们的一致支持和通过。
大中华区技术工作组的Wiki首页地址:
https://wiki.hyperledger.org/groups/tsc/technical-working-group-china
大中华区技术工作组的主要职责包括:

  • A、带领和引导大中华区的技术开发相关活动,包括贡献代码、文档、项目提案等。
  • B、推动技术相关的交流,促进会员企业之间的合作和实践案例的落地。
  • C、通过邮件列表、RocketChat、论坛等方式促进社区开发者们的技术交流。
  • D、协助举办社区活动,包括Meetup、***松、Hackfest、技术分享、培训等。

目前,工作组由来自IBM、甲骨文、万达、华为、百度等Hyperledger成员企业的数十名技术专家组成,并得到了来自社区的众多志愿者的支持。工作组的各项会议和活动内容都是开放的,可以在Wiki首页上找到相关参与方式。

3、Hyperledger顶级项目

Hyperledger所有项目一般都需要经历提案(Proposal)、孵化(Incubation)、活跃(Active)、退出(Deprecated)、终结(End of Life)等5个生命周期。任何希望加入到Hyperledger社区中的项目,必须首先由发起人编写提案。描述项目的目的、范围和开发计划等重要信息,并由技术委员会来进行评审投票,评审通过则可以进入到社区内进行孵化。项目成熟后可以申请进入到活跃状态,发布正式的版本,最后从社区中退出结束。

(1)Hyperledger Fabric
Hyperledger Fabric是区块链的基础核心平台,目标是成为面向企业的开发应用和解决方案的分布式账本平台,创新的引入权限管理支持,设计上支持可插拔、可扩展,是首个面向联盟链场景的开源项目,也是最早加入到Hyperledger项目中的顶级项目,由 IBM、DAH等企业于2015年底提交到社区。

Hyperledger Fabric基于Go语言实现,包括Fabric、Fabric CA、Fabric SDK(包括Node.Js、Python和Java等语言)和fabric-api等子项目,目前处于活跃状态,已发布1.2正式版本,目前提交次数已经超过10000次,核心代码数超过8万行。

Gerrit地址: https://gerrit.hyperledger.org/r/#/admin/projects/fabric
GitHub地址: https://github.com/hyperledger/fabric

(2)Hyperledger Sawtooth
Sawtooth是高度模块化的分布式账本平台,用以创建、部署和运行分布式账本。Sawtooth基于Python语言实现,目前提交次数已经超过7000次,由Intel等企业于2016年4月提交到社区。

Sawtooth项目利用Intel芯片的专属功能,支持全新的基于硬件芯片的Proof of Elapsed Time(PoET)共识机制,并支持交易族(Transaction Family),方便用户使用进行快速开发应用。

GitHub地址: https://github.com/hyperledger/sawtooth-core

(3)Hyperledger Iroha
Hyperledger Iroha是轻量级分布式账本,是一个业务区块链框架,用于简单和容易地并入需要分布式账本技术的基础设施项目。

Hyperledger Iroha项目基于C++实现,带有面向Web和Mobile的特性,由Soramitsu等企业于2016 年10月提交到社区,目前提交次数已经超过6000次。

GitHub地址: https://github.com/hyperledger/iroha

(4)Hyperledger Burrow
Hyperledger Burrow项目提供了支持以太坊虚拟机的智能合约区块链平台,并支持Proof-of-Stake共识机制(Tendermint)和权限管理,可以提供快速的区块链交易。

Hyperledger Burrow的前身为eris-db,基于Go语言实现,目前提交次数已经超过1600次,由Monax、Intel 等企业于2017年4月提交到社区。

Hyperledger Burrow提供了一个模块化的、带经过许可的智能合约解释器的区块链客户端,采用了部分以太坊虚拟机(EVM)的技术规范,提供以太坊虚拟机的支持,实现支持高效交易的带权限的区块链平台。

GitHub地址: https://github.com/hyperledger/burrow

(5)Hyperledger Indy
Hyperledger Indy致力于打造一个基于区块链和分布式账本技术的数字中心管理平台,支持去中心化,支持跨区块链和跨应用的操作,实现全球化的数字身份管理。

Hyperledger Indy项目主要由Python语言开发,包括服务节点、客户端和通用库等,于2017年3月底正式加入到Hyperledger 项目,目前已有超过2000次提交。

GitHub地址: https://github.com/hyperledger/indy-node

(6)Hyperledger Explorer
Hyperledger Explorer项目的定位是区块链平台的浏览器,基于Node.js语言实现,提供Web操作界面,由Intel、DTCC、IBM等企业于2016年8月提交到社区。Hyperledger Explorer可以查看、调用、部署或者查询区块、事务和相关数据、网络信息、链码和事务序列以及任何其它保存在账本中的相关信息。

Gerrit地址:
https://gerrit.hyperledger.org/r/#/admin/projects/blockchain-explorer
GitHub地址: https://github.com/hyperledger/blockchain-explorer

(7)Hyperledger Cello
Hyperledger Cello项目定位为区块链管理平台,同时提供区块链即服务(Blockchain-as-a-Service),实现区块链环境的快速部署以及对区块链平台的运行时管理。Hyperledger Cello可以让区块链应用人员专注到应用开发,而无需关心底层平台的管理和维护。

Cello 的主要开发语言为Python和JavaScript等,底层支持包括裸机、虚拟机、容器云(包括Swarm、Kubernetes)等多种基础架构,由IBM的技术团队于2017年1月贡献到社区,目前已经提交超过500次。

Gerrit地址: https://gerrit.hyperledger.org/r/#/admin/projects/cello
GitHub地址: 核心代码: https://github.com/hyperledger/cello 侧重数据分析:
https://github.com/hyperledger/cello-analytics

(8)Hyperledger Composer
Hyperledger Composer是一个协同工具,致力于提供一个Hyperledger Fabric的开发辅助框架,开发人员可以使用Javascript语言定义应用逻辑,再加上资源、参与者、交易等模型和访问规则,生成Hyperledger Fabric支持的链码。

Hyperledger Composer项目主要由NodeJs语言开发,由IBM团队于2017年3月底贡献到社区,目前已有超过 5000次提交。

GitHub地址: https://github.com/hyperledger/composer

(9)Hyperledger Caliper
Hyperledger Caliper是一个区块链基准性能测评框架, 允许用户通过一系列预置的用例来测试特定的区块链技术解决方案。

Hyperledger Caliper生成的报告将会包含一系列区块链性能指标,如TPS(平均每秒交易数),时延,系统资源占用等。Hyperledger Caliper的测试结果将帮助Hyperledger其它的项目进行开发,同时为用户选择满足特定需求的区块链实现提供参考依据。

Hyperledger Caliper的关键组件是适配层,将不同的区块链实现与Caliper框架集成。对每种待测环境(SUT)都会实现一个适配器,其作用是将Caliper的北向接口(NBI)转为为对应区块链实现的协议。Caliper的北向接口是一系列的通用区块链接口,包含和后端区块链系统交互的各种操作(例如安装智能合约,调用智能合约,查询账本状态等)。
在这里插入图片描述

Hyperledger Caliper项目主要采用NodeJs语言开发,由华为公司于2018年3月贡献至Hyperledger社区,目前已经有超过190次提交。

GitHub地址: https://github.com/hyperledger/caliper

(10)Hyperledger Quilt
Hyperledger Quilt是Interledger Protocol (ILP)协议的Java实现,是连接不同账本(ledger)的中间件,用于创建跨账本的交易。

Interledger Protocol (ILP)定义了分布式账本与分布式账本之间、传统账本与分布式账本之间的交互过程,是一种支付协议,旨在分布式账本和传统账本之间进行价值转移。

Hyperledger Quilt可以将Hyperledger区块链与XRP Ledger,Ethereum,Bitcoin(Lightning),Litecoin,Mojaloop和RippleNet等支持ILP的支付系统连接起来。

Hyperledger Quilt项目主要由Java语言开发,由日本NTT Data公司和Ripple于2017年10月贡献至Hyperledger社区,目前已经有超过70次提交。

GitHub地址: https://github.com/hyperledger/quilt

二、Hyperledger开发工具

1、Linux Foundation ID

Hyperledger项目受到 Linux 基金会的支持,采用Linux Foundatio ID(LF ID)作为社区唯一的ID。

个人申请ID完全免费,可以到https://identity.linuxfoundation.org/ 进行注册。

用户使用LF ID即可访问到包括Jira、Gerrit、RocketChat 等社区的开发工具。

2、Jira任务和进度管理

在这里插入图片描述

Jira是Atlassian公司开发的一套任务管理和事项跟踪的追踪平台,提供Web操作界面,使用十分方面。

Hyperledger社区采用jira.hyperledger.org作为所有项目开发计划和任务追踪的入口,使用LF ID即可登录。

登录后,可以通过最上面的Project菜单来查看某个项目相关的事项,还可以通过Create按钮来快速创建事项(常见的包括task、bug、improvement等)。

用户打开事项后可以通过assign按钮分配给自己来领取该事项。事项分为TODO(待处理)、In Process(处理中)、In Review(补丁已提交、待审查)、Done(事项已完成)等多个状态,由事项所有者来进行维护。

3、Gerrit代码仓库和Review管理

在这里插入图片描述

Gerrit 是一个负责代码协同的开源项目,很多企业和团队都使用Gerrit负责代码仓库管理和代码的审阅工作。Gerrit使用十分方便,提供了基于Web的操作界面。

Hyperledger社区采用 gerrit.hyperledger.org作为官方的代码仓库,并实时同步代码到github.com/hyperledger作为只读的镜像。

用户使用自己的LF ID登录后,可以查看所有项目信息,也可以查看自己提交的补丁等信息。每个补丁的页面上会自动追踪修改历史,审阅人可以通过页面进行审阅操作,赞同提交则可以加分,发现问题则注明问题并进行减分。

4、RocketChat在线沟通

在这里插入图片描述

除了邮件列表外,社区也为开发者们提供了在线沟通的渠道RocketChat。

RocketChat 是一款功能十分强大的在线沟通软件,支持多媒体消息、附件、提醒、搜索等功能,虽然是开源软件,但在体验上可以跟商业软件Slack媲美。支持包括网页、桌面端、移动端等多种客户端。

Hyperledger社区采用 chat.hyperledger.org 作为服务器。用户直接使用自己的LF ID登录该网站,即可访问。然后可以自行添加感兴趣项目的频道。
用户也可以下载RocketChat客户端,添加chat.hyperledger.org作为服务器即可访问社区内的频道,跟广大开发者进行在线交流。

通常,每个项目都有一个同名的频道作为主频道,例如#Fabric、#Cello等。同时各个工作组也往往有自己的频道,例如大中华区技术工作组的频道为#twg-china。

三、HyperLeger Fabric逻辑架构

1、HyperLeger Fabric逻辑架构简介

Fabric逻辑架构根据不同角度进行划分,上层基于应用程序角度进行设计,包括SDK、API、事件,通过SDK、API、事件来对底层区块链进行操作:包括身份管理、账本管理、交易管理、智能合约的部署和调用;下层基于底层区块链进行设计,对外提供成员管理服务、共识服务、链码服务、安全和密码服务。

在这里插入图片描述

Fabric为应用开发提供了标准的gRPC接口,在API的基础上封装了不同语言的SDK,包括Go、NODE.JS、Java、Python等,开发人员可以利用SDK开发基于区块链的应用;同时,区块链的强一致性要求各个节点之间达成共识需要较长的执行时间,应用程序也是采用异步通信的模式进行开发的,事件模块可以在触发区块事件或者链码事件的时候执行预先定义的回调函数。

Fabric通过将各个部分分离成不同的模块,做到可插拔性、灵活扩展性。

2、应用层逻辑架构

(1)身份管理

联盟链考虑到商业应用对安全、隐私、监管、审计、性能的需求,提高准入门槛,成员必须被许可才能加入网络。Fabric是目前为止在设计上最贴近联盟链思想的区块链。

Fabric成员管理服务为整个区块链网络提供身份管理、隐私、保密和可审计的服务。成员管理服务通过公钥基础设施PKI和去中心化共识机制使得非许可的区块链变成许可制的区块链。

Fabric区块链中,采用数字证书机制负责对网络中的成员身份进行管理,CA节点实现了PKI服务。

PKI(Public Key Infrastructure)是综合多种密码学手段来实现安全可靠传递消息和身份确认的一个框架和规范。通常,PKI包括三部分:

  • CA(Certification Authority)负责证书的颁发和作废,接收来自RA的请求;
  • RA(Registration Authority)负责对用户身份进行验证,校验数据合法性,负责登记,审核通过则发给CA;
  • 证书数据库用于存放证书,一般采用LDAP目录服务,标准格式采用X.500系列。

CA是PKI体系最核心的组件,主要完成对公钥的管理。密钥有两种类型:用于签名和用于加解密,对应称为签名密钥对和加密密钥对。

用户基于PKI体系要申请一个证书,一般可以由CA来生成证书和私钥,也可以自己生成公钥和私钥,然后由CA来对公钥进行签发。

(2)账本管理

授权的用户是可以查询账本数据的,可以通过多种方式查询,包括:

  • A、根据区块号查询区块
  • B、根据区块哈希查询区块
  • C、根据交易号查询区块
  • D、根据交易号查询交易
  • E、根据通道名称查询区块链信息

(3)交易管理

账本数据只能通过交易执行才能更新,应用程序通过交易管理提交提案(Proposal),在获取到足够数量交易背书(Endorsement)后,再给排序服务节点提交交易,排序服务将批量交易打包生成区块。SDK提供接口,利用用户证书本地生成交易号,背书节点和记账节点都会校验是否存在重复交易。

(4)智能合约

Fabric的智能合约(Smart Contract)称为链码(ChainCode),是一段代码,用于处理网络成员所同意的业务逻辑。Fabric的链码和底层账本是分开的,升级链码时并不需要迁移账本数据到新链码当中,真正实现了逻辑与数据的分离。

Fabric通过智能合约实现了可编程的账本,通过链码执行提交的交易,实现基于区块链的智能合约业务逻辑。只有智能合约才能更新账本数据,其它模块不能直接修改状态数据。

链码可采用Go、Java、Node.js语言编写。链码被编译成一个独立的应用程序,Fabric用Docker容器来运行链码,容器里的base镜像都是经过签名验证的安全镜像,包括OS层和开发链码的语言、runtime和SDK层。一旦链码容器被启动,就会通过gRPC与启动链码的Peer节点连接。

3、底层逻辑架构

(1)成员服务管理

MSP(Member Service Provider)成员服务模块对成员管理进行了抽象,提供包括会员注册,身份保护、内容保密、交易审计等功能,可以使用可插拔的Fabric-CA模块或第三方的CA来代替。

(2)共识服务

共识服务负责节点间共识管理、账本的分布式计算、账本的存储及节点间的P2P协议功能的实现,是区块链的核心组成部分,为区块链的主体功能提供了底层技术支撑

(3)链码服务

链码服务为智能合约实现提供了一系列接口,并为链码的安装、运行、部署提供了环境。智能合约的实现依赖于安全的执行环境,确保安全的执行过程和用户数据的隔离。Fabric采用Docker管理普通的链码,提供安全的沙箱环境和镜像文件仓库,可支持多种语言的链码。

(4)安全和密码服务

安全问题是企业级区块链关心的问题,Hyperledger Fabric专门定义了一个BCCSP(BlockChain Cryptographic Service Provider)模块,实现密钥生成、哈希运算、签名验签、加密解密等基础功能。

4、HyperLeger Fabric逻辑架构的特点

Hyperledger Fabric采用模块化架构设计,利用通用的功能模块和接口。模块化的方法带来了可扩展性、灵活性等优势,会减少模块修改、升级带来的影响,能很好的利用微服务实现区块链应用系统的开发和部署。

(1)模块插件化

Fabric很多功能模块(如CA模块、共识算法、状态数据库存储、ESCC、VSCC、BCCSP等)都是可插拔的。Fabric提供的通用接口和默认实现可以满足大多数的业务需求,同时功能模块也可以根据需求进行扩展,集成到Fabric区块链网络系统中。

(2)充分利用容器技术

Fabric中不仅节点使用容器作为运行环境,链码也默认运行在安全的容器中。应用程序或者外部系统不能直接操作链码,必须通过背书节点提供的接口转发给链码来执行。容器给链码运行提供安全沙箱环境,把链码的环境和背书节点的环境隔离开,链码存在安全问题也不会影响到背书节点。

(3)可扩展性

Hyperledger Fabric1.x版本对节点的角色进行了不同的拆分,有主节点(Leader)、背书节点(Endorser)、记账节点(Committer)、排序服务节点(Orderer)等,不同角色的节点有不同的功能。节点可以加入不同的通道中,链码可以运行在不同的背书节点上,可以更好的提升并行执行的效率和吞吐量。

(4)安全性

Hyperledger Fabric提供授权访问的区块链网络,节点共同维护成员信息,只有MSP(Member Service Provide)模块验证、授权的终端用户才能使用区块链网络的功能。多链和多通道的设计容易实现数据隔离,也提供了应用程序和链码之间的安全通道,实现了隐私保护。

四、HyperLeger Fabric网络架构

1、HyperLeger Fabric网络架构简介

Fabric网络是通过组织来划分的,每个组织内都包含承担不同功能的Peer 节点,每个Peer节点又可以担任多种角色。所有的组织共用一个统一的Orderer排序服务集群。基于Hyperledger Fabric区块链网络的设计时需要考虑组织之间的业务关系以及内部每个模块之间的联系,统一进行规划。
在这里插入图片描述

Fabric网络包含客户端节点、CA节点、Peer节点、Orderer节点。
在这里插入图片描述

每个组织通常拥有自己的客户端、Peer节点和CA节点,并且可以根据需要创建一个或多个不同的类型节点。Orderer节点不属于某个组织的实体,属于组织共同维护的节点。
在这里插入图片描述

2、客户端节点

客户端或应用程序代表由终端用户操作的实体,必须连接到某一个Peer节点或者排序服务节点上与区块链网络进行通信。客户端向背书节点(Endorser Peer)提交交易提案(Proposal),当收集到足够背书后,向排序服务节点广播交易,进行排序,生成区块。

客户端的主要作用是与Fabric区块链交互,实现对区块链的操作。区块链操作分为管理类和链码类的两种,管理类操作包括启停节点和配置网络等;链码类操作主要是链码的生命周期管理,如安装、实例化以及调用链码。最常用的客户端是命令行客户端(CLI),此外是使用Fabric SDK开发的应用客户端。

3、CA节点

CA节点主要给Fabric网络中的成员提供基于数字证书的身份信息,可以生成或取消成员的×××书(certificate)。CA节点是Fabric网络的证书颁发节点(Certificate Authority),由服务器(fabric-ca-server)和客户端(fabric-ca-client)组成。

CA节点接收客户端的注册申请,返回注册密码用于登录,以便获取×××书。在区块链网络上所有的操作都会验证用户的身份。

CA节点是可选的,也可以用其它成熟的第三方CA颁发证书。

4、Peer节点

Fabric区块链网络中的每个组织可以拥有一到多个Peer节点。每个Peer节点可以担任多种角色:Endorser Peer(背书节点)、Leader Peer(主节点)、Committer Peer(记账节点)、Anchor Peer(锚节点)。

每个Peer节点必定是一个记账节点,除记账节点外,也可以担任其它一到多种角色,即某个Peer节点可以同时是记账节点和背书节点,也可以同时是记账节点、背书节点、主节点,锚节点。

(1)Endorser Peer(背书节点)

部分Peer节点会执行交易并对结果进行签名背书,充当背书节点的角色 。

背书(Endorsement)是指特定Peer节点执行交易并向生成交易提案( proposal )的客户端应用程序返回YES/NO响应的过程。

背书节点是动态的角色,是与具体链码绑定的。每个链码在实例化的时候都会设置背书策略(Endorsement policy),指定哪些节点对交易背书才有效。

也只有在应用程序向节点发起交易背书请求时才成为背书节点,其它时候是普通的记账节点,只负责验证交易并记账。

(2)Leader Peer(主节点)

主节点负责和Orderer排序服务节点通信,从排序服务节点处获取最新的区块并在组织内部同步。可以强制设置,也可以选举产生。

(3)Committer Peer(记账节点)

负责验证从排序服务节点接收的区块里的交易,然后将区块提交(写入/追加)到其通道账本的副本。记账节点还将每个块中的每个交易标记为有效或无效。

(4)Anchor Peer(锚节点)

在一个通道上可以被所有其它Peer节点发现的Peer节点,通道上的每个成员都有一个Anchor Peer(或多个Anchor Peer来防止单点故障),允许属于不同成员的Peer节点发现通道上的所有现有Peer节点。

5、Orderer(排序服务节点)

排序服务节点接收包含背书签名的交易,对未打包的交易进行排序生成区块,广播给Peer节点。

排序服务提供的是原子广播,保证同一个链上的节点为接收到相同的消息,并且有相同的逻辑顺序。

排序服务独立于Peer进程存在并且以先来先服务的方式对Fabric网络上的所有通道进行排序交易。排序服务旨在支持超出现有的SOLO和Kafka的可插拔实现。排序服务是整个网络的公共绑定,包含绑定到每个成员的加密身份材料。

排序服务节点按照一定规则确定交易顺序后,发给各个记账节点,把交易持久化到区块链的账本中。排序服务节点支持互相隔离的多个通道,使得交易只发送给相关的记账节点(Peer节点)。

五、Fabric多链多通道设计

1、通道简介

商业应用的一个重要的需求是私密×××易,为此Fabric设计了通道(Channel)来提供成员之间的隐私保护。通道是部分网络成员之间拥有独立的通信渠道,在通道中发送的交易只有属于通道的成员才可见,因此通道可以看作是Fabric的网络中部分成员的私有通信子网。

通道由排序服务管理。在创建通道的时候,需要定义通道的成员和组织、锚节点(anchor peer)和排序服务节点,一条与通道对应的区块链会同时生成,用于记录账本的交易,通道的初始配置信息记录在区块链的创世区块中,可以通过增加一个新的配置区块来更改通道的配置信息。

每个组织可以有多个节点加入同一个通道,组织内的节点中可以指定一个锚节点或多个锚节点(增强系统可靠性,避免单点故障)。组织的锚节点代表本组织与其它组织的节点交互,从而发现通道中的所有节点。另外,同一组织的节点会选举或指定主导节点(leading peer),主导节点负责接收从排序服务发来的区块,然后转发给本组织的其它节点。主导节点可以通过特定的算法选出,可以保证在节点数量不断变动的情况下仍能维持整个网络的稳定性。

在Fabric网络中,可能同时存在多条彼此隔离的通道,每条通道包含一条私有的区块链和一个私有账本,通道中可以实例化一个或多个链码,以操作区块链上的数据。

2、Fabric多链多通道设计

Fabric 1.x版本支持多链和多通道。Fabric的一条区块链是包含Peer节点、账本、排序服务的逻辑结构,将参与者与数据(包含链码)进行隔离,满足不同业务场景下的不同的人访问不同数据的基本要求。

在这里插入图片描述

通道是共识服务提供的一种通讯机制,基于发布-订阅关系,将Peer节点和排序节点根据某个Topic连接在一起,形成一个具有保密性的通讯链路(虚拟),实现业务隔离的要求。

排序服务提供了供Peer节点订阅的主题(如发布-订阅消息队列),每个主题是一个通道。Peer节点可以订阅多个通道,并且只能访问自己所订阅通道上的交易,因此一个Peer节点可以通过接入多个通道参与到多条链中。
目前通道分为系统通道(System Channel)和应用通道(Application Channel)。排序服务通过系统通道来管理应用通道,用户的交易信息通过应用通道传递。

通道由排序服务节点负责管理,同时排序服务节点还负责对通道中的交易进行排序。在通道中一般包含有若干成员(组织),若两个网络实体的×××书能够追溯到同一个根CA,则认为这两个实体属于同一组织。此外,通道中的每个组织都会有一个或以上的锚节点,锚节点负责与其它组织交换共享账本的数据。

创建通道的时候定义了成员,只有通过成员MSP验证的实体,才能够加入到通道并访问通道的数据。

排序服务支持多通道,提供了通向客户端和Peer节点的共享通信通道,提供了包含交易的消息广播服务(broadcast和deliver)。客户端可以通过通道向连接到通道的所有节点广播(broadcast)消息,向连接到通道的所有节点投递(deliver)消息。多通道使得Peer节点可以基于应用访问控制策略来订阅任意数量的通道,应用程序根据业务逻辑决定将交易发送到1个或多个通道。

在这里插入图片描述

共识服务与(P1、PN)、(P1、P2、PN)、(P2、PN)组成三个相互独立的通道,加入到不同通道的Peer节点能够维护各个通道对应的账本和状态。不同通道对应现实世界中不同业务场景下的参与方,如银行、保险公司、物流企业、生产企业等实体结构。

3、通道的配置

通道的配置信息都被打包到一个区块中,并存放在通道的共享账本中,成为通道的配置区块,配置区块除了配置信息外不包含其它交易信息。通道可以使用配置区块来更新配置,因此在账本中每新添加一个配置区块,通道就按照最新配置区块的定义来修改配置。通道账本的首个区块一定是配置区块,也称为创世区块(Genesis Block)。

4、通道管理命令

通道的CLI客户端可以使用命令对通道进行管理。

  • peer channel create: 用于创建通道,主要参数有-c, -f, -o分别用于指定通道ID, configtx的路径和orderer的地址。
  • peer channel fetch:抓取通道中的特定区块,通过-c和-f参数来指定通道ID和orderer地址。
  • peer channel join:加入通道,通过-b参数指定初始区块。
  • peer channel list:列出peer加入的通道。
  • peer channel update :签名并且发送configtx以升级通道配置,需要通过-c, -f, -o参数分别指定通道ID, configtx的路径以及排序节点的地址。

5、动态修改通道配置

在通道创建后,通道相关的配置以区块的形式存在于通道的账本中。如果需要修改通道的配置,可通过生成新的配置区块去更新。修改通道配置的步骤如下:

  • A、通过SDK或CLI获得最新的配置区块。
  • B、编辑配置区块。
  • C、计算配置更新量。
  • D、为配置区块添加配置更新量。
  • E、SDK或CLI签名并发送配置区块。

若新的配置区块通过验证,则通道配置以最新配置区块为准。

六、交易流程简介

1、交易简介

Fabric区块链的交易分两种,部署交易和调用交易。

部署交易把链码部署到Peer节点上并准备好被调用,当一个部署交易成功执行时,链码就被部署到各个背书节点上。

调用交易是客户端应用程序通过Fabric提供的API调用先前已部署好的某个链码的某个函数执行交易,并相应地读取和写入KV数据库,返回是否成功或者失败。

2、Fabric交易流程简介

Fabric v1.0的交易流程如下:

区块链的账本由Peer节点维护,并不是由排序服务集群维护,所以,只有Peer节点(背书节点和确认节点)包含完整的区块链信息,而排序服务集群只负责对交易进行排序,只保留处理过程中的一部分区块链信息。

Hyperledger Fabric网络中的节点是一个逻辑的概念,并不一定是一个台物理设备,但对于生产环境,为了系统架构的解耦,提高扩展性以及通过主机隔离提高安全性,Peer节点不能和排序服务节点部署在一台机器上,而背书节点和确认节点可以部署在同一台机器上。背书节点校验客户端的签名,然后执行智能合约代码模拟交易。交易处理完成后,对交易信息签名,返回给客户端。客户端收到签名后的交易信息后,发给排序服务节点排序。排序服务节点将交易信息排序打包成区块后,广播发给确认节点,写入区块链中。
在这里插入图片描述

3、客户端构造交易提案

客户端应用程序利用SDK(Node.js,Java,Python)构造交易提案(Proposal)。交易提案是一个调用智能合约功能函数的请求,用来确认哪些数据可以读取或写入账本。

客户端把交易提案发送给一个或多个背书节点,交易提案中包含本次交易要调用的合约标识、合约方法和参数信息以及客户端签名等。

SDK将交易提案打包为可识别的格式(如gRPC上的protobuf),并使用用户的加密凭证为该交易提案生成唯一的签名。
在这里插入图片描述

4、背书节点模拟执行交易

背书节点(endorser)收到交易提案后,验证签名并确定提交者是否有权执行操作。背书节点将交易提案的参数作为输入,在当前状态KV数据库上执行交易,生成包含执行返回值、读操作集和写操作集的交易结果(此时不会更新账本),交易结果集、背书节点的签名和背书结果(YES/NO)作为提案的结果返回给客户端SDK,SDK解析信息判断是否应用于后续的交易。

在这里插入图片描述

5、客户端把交易发送到排序服务节点

客户端应用程序(SDK)验证背书节点签名,并比较各节点返回的提案结果,判断提案结果是否一致以及是否参照指定的背书策略执行。
客户端收到各个背书节点的应答后,打包到一起组成一个交易并签名,发送给排序服务节点。

在这里插入图片描述

6、共识排序,生成新区块

排序服务节点对接收到的交易进行共识排序,然后按照区块生成策略,将一批交易打包到一起,生成新的区块,调用deliver API投递消息,发送给确认节点。
在这里插入图片描述

7、交易校验

确认节点收到区块后,会对区块中的每笔交易进行校验,检查交易依赖的输入输出是否符合当前区块链的状态,完成后将区块追加到本地的区块链,并修改K-V状态数据库。

七、账本简介

Fabric使用建立在HTTP/2上的P2P协议来管理分布式账本,采取可插拔的方式来根据具体需求来设置共识协议,比如PBFT,Raft,PoW和PoS等。
Fabric网络的数据以分布式账本的形式存储。账本由一系列有顺序和防篡改的记录组成,记录包含着数据的全部状态改变。账本中的数据项以键值对的形式存放,账本中所有的键值对构成了账本的状态,称为世界状态(World State)。

每个通道中有唯一的账本,通道的账本由通道中所有成员共同维护,每个记账节点上都保存所属通道的账本的一个副本,因而是分布式账本。对账本的访问需要通过链码实现对账本键值对的增加、删除、更新和查询等操作。

账本由区块链和状态数据库两部分组成。

区块链是一组不可更改的有序的区块(数据块),记录着全部交易的日志。每个区块中包含若干个交易的数据,不同区块所包含的交易数量可以不同。区块之间用哈希链(Hashed-link)关联:每个区块头包含本区块所有交易的哈希值,以及上一个区块头的哈希值。链式结构可以确保每个区块的数据不可更改,以及每个区块之间的顺序关系不可更改。因此,区块链的区块只可以添加在链的尾部。

状态数据库记录了账本中所有键值对的当前值,相当于对当前账本的交易日志做了索引。链码执行交易的时候需要读取账本的当前状态,从状态数据库可以迅速获取键值的最新状态。

如果没有状态数据库,要获得某个键值时,需要遍历整个区块链中和该键值相关的交易,效率非常低,因此,读取状态数据库可以认为是快速定位和访问某个键值的方法。另外,当状态数据库出现故障的时候,可以通过遍历账本重新生成。

当一个区块附加到区块链尾部的时候,如果区块中的有效交易修改了键值对,则会在状态数据库中作相应的更新,确保区块链和状态数据库始终保持一致。

区块链的数据块以文件形式保存在各个节点中。状态数据库可以是各种键值数据库,Fabric缺省使用LevelDB ,同时支持CouchDB选项。CouchDB除了支持键值数据外,也支持JSON格式的文档模型,能够做复杂的查询。
在这里插入图片描述

八、Fabric开发流程

1、Fabric开发简介

Fabric联盟链的开发人员主要分为三类:底层开发者负责系统部署与维护;组织管理者负责证书、MSP权限管理、共识机制等;业务开发者负责编写链码、创建维护通道、执行交易等。
在这里插入图片描述

2、Fabric区块链开发流程

Fabric区块链开发流程主要包括智能合约编写,通过SDK调用智能合约,订阅各类事件。
开发者创建客户端应用和链码,链码被部署到区块链网络的背书节点上。通过链码来操作账本,当客户端调用一个交易时,实际上是在调用链码中的一个实现业务逻辑的函数方法,并对账本进行get, put, delete操作。客户端应用提供用户交互界面,并提交交易到区块链网络上。
在这里插入图片描述

参考文章

HyperLeger Fabric开发(一)——HyperLeger简介
HyperLeger Fabric开发(三)——HyperLeger Fabric架构

Hyperledger Fabric开源区块链分布式账本-学习参考资料合集,共37份。 Hyperledger开发资料 0. 票据背书详细介绍 1. 设置组织结构 2. 网络环境 3. 使用Fabric SDK Go 4.0. 链码开发_数据结构 4.1. 链码开发_票据相关请求处理 4.2. 链码开发_背书相关请求处理 4.3. 链码安装及实例化 5. 链码调用 6. 在网络应用程序中进行设置 GoWeb编程 二、Hyperledger技术资料 超级账本Hyperledger白皮书(中文版) 快速带你上手Hyperledger Fabric环境搭建+开发测试 性能基准测试和优化Hyperledger Fabric 区块链平台 An Introduction to Hyperledger Architecture of the Hyperledger Blockchain Fabric Cryptography and Protocols in Hyperledger Fabric FabNet- an Automatic Hyperledger Fabric Network Wizard Hyperledger 白皮书 Hyperledger 源码分析之 Fabric - 整体结构 Hyperledger Blockchain Performance Metrics Hyperledger Fabric - A Distributed Operating System for Permissioned Blockchains Hyperledger Fabric 实验指导 HyperLedger Fabric 在携程区块链平台中的应用实战 Hyperledger Fabric Access Control System for Internet of Things Layer in Blockchain-Based Applications Hyperledger Fabric Blockchain:Secure and Efficient Solution for Electronic Health Records Hyperledger fabric- towards scalable blockchain for business Hyperledger Fabric架构概览 hyperledger-fabricdocs Documentation-release-2.0 HyperLedgerFabric智能合约速成 Integrating Blockchain for Data Sharing and Collaboration Support in Scientific Ecosystem Platform Performance Analysis of Hyperledger Fabric Platforms Performance Benchmarking & Optimizing Hyperledger Fabric Blockchain Platform Performance Modeling & Analysis of Hyperledger Fabric (Permissioned Blockchain Network)-177页 Principle Foundations of Hyperledger Fabric Supporting Private Data on Hyperledger Fabric with Secure Multiparty Computation The privacy protection mechanism of Hyperledger Fabric and its application in supply chain finance
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yitahutu79

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值