区块链原理与实践- 课件 第11章 Fabric_第1页
区块链原理与实践- 课件 第11章 Fabric_第2页
区块链原理与实践- 课件 第11章 Fabric_第3页
区块链原理与实践- 课件 第11章 Fabric_第4页
区块链原理与实践- 课件 第11章 Fabric_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

超级账本Fabric基础及应用开发目录01.超级账本项目简介03.Fabric链码概念与结构02.HyperledgerFabric基础04.Fabric环境搭建05.Fabric链码实例解析06.基于Fabric的电子合同存证系统开发实例07.本章小结1超级账本项目简介一超级账本项目简介

超级账本项目设计思想超级账本(Hyperledger)项目是全球最大的企业级开源分布式账本平台,2015年年底由IBM以及DataAsset发起,Linux基金会管理。许多科技和金融领域巨头参与超级账本项目,包括IBM、Intel、甲骨文、腾讯、百度、NEC等,根据超级账本官网()显示,超级账本目前包括了十几个顶级项目,该组织会员企业已接近三百家。超级账本的设计理念是能够满足不同应用场景下的不同需求,满足不同场景交易确认时间、信任、共识等不同需求。例如,当参与者是具有法律协议的金融机构这样可信度较高的用户时,可以在实现快速共识及确认交易;当参与者之间信任度较低时,交易处理将增加安全性等措施,交易处理速度降低。总体来说,超级账本项目遵循模块化、高安全性、互操作、完整API、不以发行加密货币的等设计理念。一超级账本项目简介

超级账本项目设计思想1.模块化Hyperledger的框架具有模块化、可重用、可扩展等特点。超级账本体系结构工作组为通信、共识、密码、身份、账本存储、智能合约和背书策略等定义了不同的功能模块和接口。这种模块化的设计使开发人员能够在不同类型组件升级,在不影响系统其它部分的情况下更新单个组件,同时容易进行测试。模块化设计还意味着,不同模块的设计实现可以独立并行,极大提高了系统开发的效率。2.高安全性安全性是超级账本考虑的一个关键因素。安全性和健壮性是区块链在企业应用领域得以快速发展的重要保证。与比特币和以太坊不同,超级账本主要适用于联盟链环境,对用户的身份认证、权限控制、隐私安全、通信安全做了充分设计。一超级账本项目简介

超级账本项目设计思想3.互操性考虑到将来不同的区块链网络面临着通信和数据交换,超级账本项目设计时,充分考虑了智能合约的可移植性等互操作性的设计。4.完整的API超级账本的所有项目都提供了丰富且易于使用的API。定义良好的API可以使外部客户端和应用程序能够快速、轻松地与超级账本的分布式账本网络进行交互,目前支持python、Node.js、JavaSDK。5.不以发行加密数字货币为目的超级账本项目的出现将区块链技术从金融领域拓展到更广泛的范围,超级账本项目的设计特别是Fabric项目实现了许多创新的功能,包括权限管理、多通道、私有数据、模块化架构,以及可拔插的共识、可插拔的身份管理协议等(可参考1.5.3超级账本的内容),其设计核心都是为了满足企业业务需求的多样性。一超级账本项目简介

超级账本顶级项目概述

超级账本(Hyperledger)项目是一个联合项目(CollaborativeProject),由一组开源工具和面向不同目的和场景的多个子项目组成。从本质上来说超级账本顶级项目分为三类:框架、工具以及类库。超级账本框架服务于区块链开发;超级账本项目中的类库主要为提高区块链的开发效率而提供的开发工具及开发库;超级账本项目中的工具一般是用来提供区块链开发完成后的测试服务的。三类项目相互协作,构成了一个较为完善的超级账本生态系统。一超级账本项目简介

超级账本顶级项目概述

接下来,主要介绍两个经常提到的项目:HyperledgerFabric,HyperledgerExplorer。1.HyperledgerFabricHyperledgerFabric是超级账本目前使用最广的核心项目,也是本书重点介绍的内容。其本质是一个开源的分布式共享账本,专为在企业环境中应用区块链而设计,Fabric采用高度模块化和可配置的架构,应用领域包括银行、金融、保险、医疗保健、人力资源、供应链甚至数字音乐分发等领域。2.HyperledgerExplorerHyperledgerExplorer用于监控网络信息,包括区块详情,节点日志,统计信息,智能合约和事务等。Explorer支持Fabric框架。

2HyperledgerFabric基础二HyperledgerFabric基础

Fabric概况HyperledgerFabric是一种许可链,设有身份验证等准入机制,为具有共同目标但彼此之间并不完全信任的参与者提供区块链应用,降低了参与者恶意攻击的风险,因此可以使用崩溃容错(CFT)或拜占庭容错(BFT)类共识协议,替代挖矿等资源耗费较大的共识机制。与非许可链相比,如以太坊、比特币等,发币等激励机制成为可选功能。Fabric在业务处理中引入了称为执行-排序-验证的新架构。该架构为了解决顺序执行模型所面临的可扩展性、灵活性、性能和机密性问题,将交易流分为三个步骤:(1)节点执行一笔交易检查其正确性,并对其进行背书;(2)通过(可插拔的)共识协议对交易进行排序;(3)提交交易到账本前先根据特定应用程序的背书策略来验证交易。

简单来说,Fabric是一个提供模块化分布式账本解决方案的框架。二HyperledgerFabric基础

Fabric版本演进及特点Fabric架构经历了从0.6版本到1.0版本,再到2.0版本的演进,在架构上进行了重大改进,在可扩展、多通道的设计、共识机制等方面有了很大变化和进步。HyperledgerFabric0.6版本以及1.0版本架构如下图所示:二HyperledgerFabric基础

Fabric版本演进及特点近期,Hyperledger官网又新发布的HyperledgerFabric2.0版本。HyperledgerFabric2.0的大部分改进都集中在管理chaincode生命周期的新方法上,最大限度地提高灵活性,创建更多的选项来实现分布式治理。此外,安全和数据隐私也是2.0的重点,因此许多特性和增强都是为了提供对私有通道的更细粒度控制和最小化漏洞。Fabric2.0版本新的特性主要包括以下几个方面:

①智能合约的去中心化处理

②私有数据增强

③外部的链码启动器

④用于提高CouchDB性能的状态数据库缓存

⑤基于Alpine的docker镜像二HyperledgerFabric基础

Fabric架构Fabric为应用开发提供了身份管理、账本管理、交易处理以及智能合约等基本组件。如下图所示,此图描述了fabric的总体架构。二HyperledgerFabric基础

Fabric架构成员管理服务(MembershipService)成员管理(MSP)是Fabric的可插拔组件,通过网络实体成员身份管理认证来实现上述功能。MSP将颁发与校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。一个MSP可以自己定义身份,以及身份的管理(身份验证)与认证(生成与验证签名规则)。Fabric区块链网络可以被一个或者多个MSP管理。以此提供模块化的成员操作,兼容不同成员标准与架构。Fabric网络对身份的鉴别和权限管理采用数字证书的方式来实现,CA节点(FabricCA)负责对Fabric网络节点的身份证书进行生成、撤销等管理。拥有证书后的实体才有权限访问网络。二HyperledgerFabric基础

Fabric架构共识服务(ConsensusService||BlockchainService)共识服务是区块链的核心组件,需要确保区块里面每一笔交易数据的有效性和有序性,以及区块链网络中不同节点之间数据的一致性。为了提高交易性能,Fabric共识是背书节点对即将打包上链的一批交易的发生顺序、合法性及状态达成一致的过程。主要包括节点背书、排序和验证三个环节,为提高共识效率,Fabric将节点根据不同功能分为不同类型节点如背书节点(EndorserPeer)、记账节点(CommitterPeer)和排序节点(Order)等。二HyperledgerFabric基础

Fabric架构链码服务(ChaincodeService)

Fabric的智能合约称为链码(Chaincode),是描述相关业务逻辑的一段代码,是对智能合约的进一步扩展。Fabric链码和底层账本是分开的,升级链码时并不需要迁移账本数据到新链码当中,实现了逻辑与数据的分离。在Fabric中,对区块链账本的改变是通过发起交易(Transaction)和调用链码共同完成的。即应用程序提交区块链的交易,需要通过触发执行相应链码来实现区块链的业务逻辑。只有通过链码才能更新账本数据。例如,当应用程序想要在区块中写入数据时,需要以发起一笔交易的方式来完成。FabricSDK提供了相应的接口,应用程序调用SDK接口,通过交易管理提交交易提案(TransactionProposal),应用程序收集到足够多的背书(Endorsement)之后,将此交易以广播的形式发送给排序服务(Orderer)节点,排序服务节点对交易排序之后将其打包成区块。二HyperledgerFabric基础

Fabric架构fabric网络架构图如下图所示,Fabric网络节点之间构成了P2P网络,通过Gossip协议进行状态同步以及数据分发。二HyperledgerFabric基础

Fabric架构fabric网络架构图由上图可知,节点是区块链中的通信实体,Fabric节点有三大类型:客户端用户:客户端创建交易并提交交易到背书节点中。Peer节点:接收客户端的交易请求,提交交易到排序节点(Orderer)中,Peer节点之间通过gRPC消息进行通信。Peer节点按照实际的功能还可分为背书节点(Endorser)、记账节点(Committer)、锚节点(Anchor)、主节点(Leader)。排序服务节点:排序节点(Orderer)在区块链网络中作用是原子广播(AtomicBroadcast)和全排序(TotalOrderer),即对全网所有交易进行排序后打包.二HyperledgerFabric基础

Fabric架构Fabric数据存储结构账本是HyperledgerFabric网络中最关键的组件。区块链网络中所有交易信息都记录在账本中。Fabric支持多通道,每个通道对应一个账本,每一个Peer节点可以加入一个或多个通道,并且可以维护多个账本的副本,Fabric的账本结构由文件系统、状态数据库,历史数据索引和区块索引组成。区块链结构一般以文件系统的方式进行存储;状态数据库支持CouchDB和LevelDB存储方式;索引数据库以及历史数据库主要支持LevelDB存储方式,如下图所示。二HyperledgerFabric基础

Fabric架构Fabric数据存储结构从整体结构看,账本包括区块链结构和以下三个数据库结构。①索引数据库(IndexDB):是将区块的一些属性和存放位置关联在一起,形成索引,如区块哈希,区块高度以及交易ID等,这样在查找区块时就能够更加方便。②历史数据库(HistoryDB):顾名思义就是区块历史记录。历史数据库不存储交易状态的历史变更结果,只存储数据在某笔交易中变化记录。区块链中利用历史数据库可以提高历史交易信息的查询效率。③状态数据库(StateDB):存储世界状态(WorldState)。状态数据记录的是交易执行结果的最新状态,代表了通道上所有键的最新值。为了提高链码执行的效率,所有状态的最新键值都存储到状态数据库中。状态数据库目前支持LevelDB和CouchDB。二HyperledgerFabric基础

Fabric架构Fabric交易流程Fabric的正常交易流程是基于整个Fabric网络已经搭建完毕,并且能够正常运行的前提下。Fabric整个交易流程如下图所示:二HyperledgerFabric基础

Fabric架构Fabric交易流程

应用程序客户端通过SDK调用证书服务(CA)服务,进行注册和登记,并获取身份证书;②应用程序客户端通过SDK向区块链网络发起一个交易提案(Proposal),交易提案把带有本次交易要调用的合约标识、合约方法和参数信息以及客户端签名等信息发送给背书(Endorser)节点。③背书(Endorser)节点收到交易提案(Proposal)后,验证签名并确定提交者是否有权执行操作,同时根据背书策略模拟执行智能合约,并将结果及其各自的CA证书签名发还给应用程序客户端。④应用程序客户端收到背书(Endorser)节点返回的信息后,判断提案结果是否一致,以及是否参照指定的背书策略执行,如果没有足够的背书,则中止处理;否则,应用程序客户端把数据打包到一起组成一个交易并签名,发送给Orderers。⑤Orderers对接收到的交易进行共识排序,然后按照区块生成策略,将一批交易打包到一起,生成新的区块,发送给提交(Committer)节点。⑥提交(Committer)节点收到区块后,会对区块中的每笔交易进行校验,检查交易依赖的输入输出是否符合当前区块链的状态,完成后将区块追加到本地的区块链,并修改世界状态。3Fabric链码概念与结构三Fabric链码概念与结构

Fabric架构Fabric链码概念智能合约又称为链码,是在区块链上运行的一段代码,是应用系统与区块链底层交互的中间件,通过智能合约可以实现各种复杂的应用。

链码会对fabric客户端应用程序发出的交易或CLI命令做出相应,执行链码的业务逻辑,并与账本进行交互。

链码被编译成一个独立的应用程序,在Docker容器中运行。链码容器被启动后会通过gRPC与启动该链码的Peer节点连接,也就是说,peer节点和链码容器之间是通过gRPC来交互的。三Fabric链码概念与结构

Fabric架构Fabric数据存储结构由于链码运行在Docker容器中,被调用的基本流程如右图所示。1)客户端发送请求给Peer节点,Peer节点收到请求后,给链码发送一个相应的消息对象请求链码。2)链码通过输入的函数和参数向状态数据库获取或写入数据。3)链码通过执行调用的函数和参数得到对应的执行结果,链码会向Peer节点发送预提交的状态数据。4)Peer节点收到提交的数据,进行验证并进行背书签名。5)Peer节点把背书签名后的执行结果返回给客户端。三Fabric链码概念与结构

Fabric架构Fabric链码结构1.链码接口链码需要一个SimpleChaincode的结构体(struct),在该结构体上定义了Init和Invoke两个函数。Init函数主要实现链码的实例初始化或升级等交易;Invoke主要是实现链码的调用或查询等交易的处理逻辑。链码还包含一个main函数,作为链码的启动入口。在go语言下的“shim”包中,接口规范如下:typeChaincodeinterface{Init(stubChaincodeStubInterface)peer.ResponseInvoke(stubChaincodeStubInterface)peer.Response}三Fabric链码概念与结构

Fabric架构区块链开发者模式链码不同于一般的程序,必须安装到网络中才能执行,在网络中调试也比较繁琐。因此为了便于链码调试,就有了“开发者模式”。在此模式中省去了建设通道等操作,让链码调试能够更加快捷、简单。这里介绍的是HyperledgerFabric官方提供的方法,需要在三个命令行终端下执行,只需要按照右图所示步骤操作即可。4Fabric环境搭建三Fabric链码概念与结构

Fabric环境搭建Fabric环境准备1.操作系统安装2.常用工具安装(Git、Curl、Wget)3.Go语言环境安装4.Docker环境配置5.拉取Fabric镜像以上为主要的步骤,具体的操作见附录。三Fabric链码概念与结构

Fabric环境搭建Fabric网络搭建Fabric开发环境准备好后,要根据实际的应用场景来搭建Fabric网络。①首先要根据应用实际来规划组织数量,组织中的节点数量,排序节点数量,并给各节点分配相应网络地址。②接着,要为各节点颁发公钥证书;③生成创世区块和通道文件;④启动orderer节点和peer节点;⑤创建通道,节点加入通道;⑥在通道上部署智能合约。至此,Fabric网络搭建就完成了,具体搭建流程可见附录。5Fabric链码实例解析五Fabric链码实例解析

Fabric链码实例解析本小节通过解析一个github上的链码示例,来分析讲解Fabric链码的编写方法。本示例链码主要实现牛奶商品信息在销售和溯源过程的信息创建、查询、交易和溯源等功能。链码实现了Init方法和Invoke方法。Invoke方法具体实现了牛奶信息初始化、增加牛奶销售信息、牛奶信息查询和牛奶历史信息查询等功能。具体方法和参数说明如下表所述。

具体的代码不在此赘述,详情可见文档中的内容。6基于Fabric的电子合同存证系统开发实例六基于Fabric的电子合同存证系统开发实例

系统开发实例本节介绍一个基于Fabric的电子合同存证系统的完整开发实例,以期通过实例介绍让读者对Fabric应用开发过程有个整体的了解。为突出介绍重点,系统仅实现合同签署方及法院两个角色及电子合同上链存证及溯源的简单功能。

无论是区块链开发还是传统系统的开发,首先要做的就是需求分析,而做区块链开发需要找到行业存在的痛点,针对这些痛点,采用区块链的技术解决。六基于Fabric的电子合同存证系统开发实例

系统需求分析痛点:传统的电子合同签订成本高,合同纠纷效率低、举证难,中心化存储数据易被篡改,电子合同存在易丢失等风险。

解决:采用区块链系统实现电子合同上链,可以有效解决上述问题。

具体方案:本实例用户角色为两种,分别是行业普通用户和法院用户,普通用户即合同签订者。普通用户在线下完成合同的沟通,并签署完成电子合同,通过登陆区块链电子合同存证平台,将合同Hash值存储在区块链上。合同签订方均有权随时查看区块链上存储的合同详情。当合同出现争议等纠纷时,普通用户可以向法院提出申诉请求。法院受理后,可以调看区块链电子存证平台上所存的申诉用户的电子合同证据,并进行核验,如果需要,还可以对区块链上存储的电子合同信息进行溯源。上述业务流程如图11-15所示。六基于Fabric的电子合同存证系统开发实例

搭建区块链网络本实例基于fabric1.4.1,在centos7上搭建网络环境,采用raft共识,网络搭建包括3个orderer,2个组织,每个组织下有2个peer。每个组织下面都有一个CA节点,其中节点ca.court负责为法院组织内用户颁发证书,节点ca.customer负责为行业普通用户组织内的用户颁发证书。

系统网络架构图如右图所示,具体搭建的步骤参照附录。六基于Fabric的电子合同存证系统开发实例

系统详细设计本系统的开发环境如下表所示:

六基于Fabric的电子合同存证系统开发实例

系统详细设计

客户端设计系统客户端由VUE框架搭建而成,具体细分为行业普通用户和法院用户。(1)行业普通用户行业普通用户主要功能有:合同上链、查看合同、溯源,查看个人信息。

(2)法院用户法院用户主要功能有:查看合同信息、溯源,查看法院信息。法院用户可以查看所有普通用户上传的合同。点击详情也可查看某个合同的主要信息以及Hash值等信息。

六基于Fabric的电子合同存证系统开发实例

系统详细设计

客户端设计(1)行业普通用户在合同上链界面中,用户需填写电子合同名称,选择上传的合同文件,选择性填写合同的描述信息。点击提交按钮即可将合同杂凑值保存到链上,合同具体信息保存到链下MySQL数据库中。合同上链如下图所示:

六基于Fabric的电子合同存证系统开发实例

系统详细设计

客户端设计(1)行业普通用户合同列表界面显示出用户所上传的所有合同文件。点击详情按钮,可以查看该合同文件名等详细信息以及上链信息,如所在区块、区块Hash、上一区块Hash、交易号及上链日期等。合同列表如下图所示:

六基于Fabric的电子合同存证系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论