区块链智能合约技术与应用 课件 第5章 Hyperledger Composer入门_第1页
区块链智能合约技术与应用 课件 第5章 Hyperledger Composer入门_第2页
区块链智能合约技术与应用 课件 第5章 Hyperledger Composer入门_第3页
区块链智能合约技术与应用 课件 第5章 Hyperledger Composer入门_第4页
区块链智能合约技术与应用 课件 第5章 Hyperledger Composer入门_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

第5章HyperledgerComposer入门5.1HyperledgerComposer简介5.2环境搭建5.3

HyperledgerComposer的建模语言5.4开发你的第一个业务网络5.5部署和测试本章小结

5.1

HyperledgerComposer简介

1.工作流步骤1——搭建并启动Fabric网络首先,要明确HyperledgerComposer只是我们开发业务网络的助手,而不是区块链网络本身的模块。HyperledgerComposer仅仅为我们提供了应用打包、安装部署、可视化测试等功能,但由于应用包最终将部署在Fabric区块链网络上,因此启动Fabric网络以及HyperledgerComposer框架的安装是一切开发工作的基础。搭建并启动Fabric网络分为安装依赖、编写网络配置文件和启动三个步骤,如图5-1所示。

图5-1

HyperledgerComposer工作流步骤1

2.工作流步骤2——部署和测试业务网络

借助HyperledgerComposer独特的建模语言和工程结构,能够轻松地进行应用程序的开发。

开发完成后,首先需要使用HyperledgerComposer命令将工程代码打包成一个BNA(BusinessNetworkApplication,业务网络应用包);接着将该网络包(BNA)安装部署到Fabric网络的Peer节点上,然后启动该网络;最后可通过HyperledgerComposer的RestServer工具生成RestfulAPI进行可视化测试。为了让用户可以方便调试,HyperledgerComposer提供了日志功能,用户可以通过查看交易日志来分析测试结果,如图5-2所示。图5-2

HyperledgerComposer工作流步骤2

5.2环

使用HyperledgerComposer之前,必须先搭建好FabricRuntime(运行时环境)。官网已经提供了一键安装并搭建环境的脚本,所有的依赖都会自动安装,免除了从Github上克隆项目再手动安装的麻烦。

安装步骤如下:

(1)使用Cd命令切换至想要安装HyperledgerComposer框架的目录,命令行如下:

(2)用Curl命令远程下载自动安装脚本,命令行如下:

(3)下载完毕后执行脚本。如遇到无法执行的问题,可先使用Chmod命令修改脚本权限为可执行,然后再执行该脚本,命令行如下:

(4)退出系统当前用户并重新登录,使系统设置生效,命令行如下:

(5)安装HyperledgerComposer相关工具所需的Linux指令如下:

(6)安装Fabric运行时环境:

创建并切换至fabric工作目录,稍后要将Fabric工具下载到该目录中,命令行如下:

下载并解压Fabric测试服务器压缩包,命令行如下:

运行解压后的脚本并安装Docker镜像文件,命令行如下:

(7)启动Fabric测试网络并创建网络节点访问卡(证书),命令行如下:

5.3

HyperledgerComposer的建模语言

1. CTO建模语言的特点

(1)简单易懂:其语法类似于面向对象语言中的Class和SQL中的建表。开发人员编写CTO的过程就像编写数据库实体类和建表一样,大大降低了开发复杂度。

(2)语法灵活:定义对象的属性时可指定多个特殊字段,如“可选的”、指定范围和校验等。

2. CTO文件的内容

CTO文件后缀为 .CTO。一个完整的CTO模型文件包含下面几个方面:

(1)命名空间。

(2)资源定义(资产、参与者、交易等)。

(3)从其他命名空间导入(按需)。

5.3.1命名空间

CTO中命名空间的概念和其他语言的概念基本一致,类似于文件系统中的文件目录或Java中的包,主要作用是对代码文件进行合理的划分。

在Composer开发中,业务网络可能会有一个或多个.CTO模型文件。通常,每个模型文件以命名空间作为文件名,用于对不同资源进行划分。

一个CTO文件必须在文件开头指定一个命名空间。该文件中定义的资源只属于该命名空间,不同命名空间的资源相互独立。

5.3.2资源

资源可以理解为区块链业务网络中出现的对象,是Composer的重要概念。

1.资源的种类

资源对象包含以下种类:

(1)资产(Asset):即有价值的、可被交易的物品。

(2)参与者(Participant):参与业务网络的角色。

(3)交易(Transaction):业务网络中的资产转移。

(4)事件(Event):业务网络中触发的某种通知。

(5)枚举(Enum):一组同类型的值的集合。

(6)概念(Concept):资源中的通用属性集。

2.资源的特点

资源的特点如下:

(1)资源属于某命名空间。

(2)资源名在命名空间内唯一。

(3)资源类型为Asset和Participant时,必须指定主键(Identifiedby)。

(4)资源类型为Transaction时,会自动生成ID和交易时间,因此不能显式地指定主键。

(5)资源具有属性(o表示属性)。

(6)资源可互相依赖(-->表示依赖)。

(7)资源支持单继承(Extends关键字)。

(8)资源支持抽象类(Abstract关键字)。

资源定义格式如下:

5.3.3属性

每种资源都可能具有属性,用“o+属性类型+属性名”表示。如电脑可能有名称、生产数量、价格、功能、生产日期等属性。

1.属性的样例代码

2.属性的基本类型

属性包括如下基本类型:

(1) String(UTF-8字符串);

(2) Double(64位带符号浮点数);

(3) Integer(32位带符号整数);

(4) Long(64位带符号整数);

(5) Boolean(布尔类型:true/false);

(6) DataTime(与ISO-8601兼容的时间,具有可选的时区和UTZ偏移)。

3.属性的引用类型

属性包括如下引用类型:

(1) Array(数组,基本类型或引用类型后加中括号);

(2) Concept;

(3) Enum;

(4) 依赖类型。

5.3.4依赖

资源之前可能存在依赖(引用)关系(依赖也是一种属性),用“-->+依赖资源名+属性名”表示。如电脑和生产者存在依赖关系。

依赖样例代码如下:

5.3.5枚举

枚举通常是一组相关值的集合,无法被实例化,其中定义的属性最好全大写;多单词间用下划线分隔。比如表示订单的状态。

枚举样例代码如下:

5.3.6概念

概念表示多个资源中通用的属性,无法被实例化。比如参与者类型很多时,我们可以将所有参与者共有的属性用概念来表示(也可以使用抽象类和继承)。

概念样例代码如下:

5.3.7

CTO语言特性

CTO建模语言和SQL建表语句——指定名称、标识主键、列举字段——十分相似。此外,CTO语法还包括属性默认值以及可选属性。

属性默认值和可选属性样例代码如下:

1.正则表达式

Composer还可以限制属性取值范围,支持正则表达式。

正则表达式为用户姓名和年龄属性定制了规则,其样例代码如下。

2.继承样例代码

CTO建模语言使用面向对象的思想,支持资源之间的继承(Extends)以及抽象类(Abstract)。

继承样例代码如下:

3.CTO建模语言须遵循的规范

CTO建模语言还有一些高级特性,如注解,但须遵循以下规范:

(1)注解可以定义在除概念和枚举外的所有资源上。

(2)注解可以定义在除概念之外的所有属性和依赖上。

(3)同一资源和属性上可定义多个注解,但不能同名。

(4)每条注解可定义多个参数。

下面样例的注解是合法的:

4.导入其他命名空间

CTO建模语言还支持导入其他命名空间。

通过Import语句,可以使用其他命名空间中定义的资源,但注意资源名称不能冲突。

导入命名空间样例代码如下:

5.4开发你的第一个业务网络

5.4.1网络定义卡牌交易网络是一个简单的网络。在卡牌交易网络中,卡牌商人可以生产卡牌,玩家可以从商人手里购买卡牌。该网络由如下资源组成:

(1)资产:卡牌。

(2)参与者:卡牌商人,玩家。

(3)交易:卡牌商人生产卡牌,玩家购买卡牌。

开发流程如下:

(1)生成工程目录模板。

(2)资源建模:编写CTO文件。

(3)业务逻辑:编写交易JS脚本。

(4)访问控制:编写ACL。

5.4.2生成工程目录模板

(1)进入到配置环境时指定的Fabric工作目录文件夹,命令行如下:

(2)通过Yeoman自动生成工程目录结构模板(搭建环境时已安装Yoeman和模板),如图5-3所示。图5-3使用Yeoman生成工程目录结构模板

(3)选择生成空模板,将创建模板文件,如图5-4所示。图5-4使用Yeoman生成模板文件成功

5.4.3资源建模

资源建模是指在CTO文件中定义卡片交易网络中的资源。Yeoman已经自动生成了models文件夹和一个CTO文件,在该CTO文件开头指定了命名空间(与文件名相同),代码如下:

1.资产定义

卡片属于资产。定义卡片的代码如下:

2.参与者定义

定义参与者时有一个小技巧,由于卡片商人和玩家有很多共同的属性,如ID、姓名和资金,因此可以定义一个抽象类,让二者去继承。

卡片商人和玩家的定义代码如下:

3.定义交易

在定义交易时,交易的属性和后面要编写的交易函数的传入参数相对应。当通过交易创建资产时,属性通常包含要被创建的资产的属性。类似于创建一个对象时,要通过传参来对其属性进行初始化。

生产卡片交易Transaction的定义代码如下:

购买卡片交易Transaction的定义代码如下:

注意:在该交易中只包含了buyer和card两个依赖,因为卡片的主人(即商人)可以在Card的owner属性中获取。交易传递参数时将会递归地传递依赖及依赖的依赖。

5.4.4业务逻辑

HyperledgerComposer中的业务逻辑是写在js函数中的,CTO中定义的每个交易都必须对应着一个js中的函数。

通过Yeoman生成的空项目模板并不包含lib文件夹和js文件,需要开发者手动创建。现在的工程目录如图5-5所示。图5-5

card-network工程目录

接下来依次编写CTO中定义好的交易。注意:不是所有js中的函数都会被识别为交易函数,必须使用doc注释和注解来声明一个函数为交易函数,代码如下:

代码说明如下:

@param注解用于指定在CTO中定义的交易,tx表示向js函数中传入的参数名。

@transaction注解用于声明该函数为交易函数。

二者缺一不可。

编写交易函数非常简单,代码如下(建议在logic.js开头先定义一些常量):

此处定义的命名空间名称(NS)能够方便后续获取资源实例和注册器。logic.js中所有的新实例和关系都需要通过factory对象去创建(factory对象的实现基于设计模式中的工厂模式)。

生产卡片交易的实现代码如下:

这段代码包含最简单的业务逻辑判断,即商人有足够的钱即可生产卡片。其整体业务逻辑可被简述为检查商人的参与者信息,判断金额是否足够→产生新的卡片实例并对其属性进行赋值操作→与注册器交互,更新相关资源的状态。注释已经足够详细,相信大家都能读懂。但是注意这段代码有几个要点:

(1)函数前加async,这是ES7的异步关键字。获取注册器和CRUD操作都是异步的,因此需要进行同步控制,否则将会获取不到注册器或是在多个CRUD时代码提前返回时导致调用失败。开发者只需在函数调用前加await即可使异步函数同步执行,省略了定义promise的麻烦。

(2)获取新实例时需传入ID,这个ID要由自行拼接或参数传入。

(3)使用注册器的方法进行CRUD操作,注意要加await关键字来同步。

(4)通过抛出异常的方式来使交易失败。

第一个交易函数实现了新建资产,下面编写转移资产的代码。

购买卡片交易代码如下:

5.4.5访问控制

通过访问控制,可以限制哪些参与者能够对哪些资源进行何种权限的访问。访问控制列表文件后缀为.acl。

虽然本示例中不需要使用ACL,但是默认不配置ACL会使所有资源禁止被任何参与者访问,因此必须在permissions.acl中配置开放管理员的访问权限。访问权限包含访问网络和访问系统资源两部分。

Yeoman已经自动生成了默认配置文件permissions.acl,可直接查看。

配置文件permissions.acl代码如下:

5.5部

5.5.1打包进入终端,使用cd命令切换当前目录至card-network目录,通过Composer命令打包全部代码,命令行如下:

card-network目录下生成了card-network@0.0.1.bna文件,即业务网络包,如图5-6所示。图5-6项目目录结构及生成的bna包

5.5.2手动部署

手动部署方式需要经历如下步骤:启动Fabric网络、创建节点管理员、安装网络包、启动网络包、生成业务网络管理员卡等,较为复杂。

1.启动FabricRuntime

通过Composer提供的一键启动脚本启动网络,方便快捷,命令行如下:

2.创建节点管理员

启动网络之后要创建节点管理员Card。由于业务网络是部署在Peer节点上的,因此必须要拥有管理权限,使Composer能够访问Fabric网络并在节点上部署应用。创建节点管理员命令行如下:

3.安装网络包

使用composernetworkinstall命令安装网络包,命令行如下:

4.启动网络包

使用composernetworkstart命令启动网络包,命令如下:

5.访问网络

使用composercardimport命令将刚生成的业务网络管理员卡导入钱包,之后就可以通过管理员身份访问网络,命令行如下:

6.查看card文件列表

使用composercardlist命令查看Card文件列表,命令行如下:

7.网络测试

使用composernetworkping命令测试网络是否启动成功,命令行如下:

8.启动rest-server

指定以网络管理员身份启动rest-server,-n参数表示不使用命名空间,命令行如下:

5.5.3自动部署

采用自动部署时,推荐使用HyperledgerPlayground可视化界面自动部署项目。

ComposerPlayground的Web界面会调用ComposerRestServer提供的接口来访问业务网络,如图5-7所示。图5-7

ComposerPlayground工作流

使用ComposerPlayground部署业务网络非常简单,下面介绍详细步骤。

1.启动ComposerPlayground

直接执行下列命令即可启动ComposerPlayground:

ComposerPlayground支持连接实际业务网络(即本地FabricRuntime)和Web模拟业务网络(利用localStorage)。我们使用Web方式即可,省去了启动Fabric的麻烦,如图5-8所示。图5-8

Web方式部署业务网络包

2.导入业务网络包

如图5-9所示,在可视化界面导入文件即可导入业务网络包。图5-9可视化导入业务网络包

3.部署

点击Deploy即可确认部署,如图5-10所示。图5-10确认部署

4.连接业务网络

完成上述步骤,回到主页,可以看到关于Card-Network业务网络的访问框。点击Connectnow即可连接网络,如图5-11所示。图5-11连接业务网络

5.测试

切换至test界面,进行测试,如图5-12所示。图5-12切换至测试界面

1)创建卡片商人

左边列表可以切换资源,方法为:选中CardSeller,点击最右边按钮,添加一个CardSeller;然后点击弹窗下方GenerateRandomData生成随机数据;最后创建一个ID为1、拥有10块钱的卡片商人即可,如图5-13所示。图5-13创建ID为1、资金为10的卡片商人

卡片商人创建成功后会看到如图5-14所示的信息。图5-14创建卡片商人成功

2)创建玩家

按照上述方法继续创建一个ID为1、有100块钱的玩家,如图5-15所示。图5-15创建ID为1、资金为100的玩家

3)执行交易

下面执行交易,点击左下方按钮,如图5-16所示。

图5-16执行交易按钮

温馨提示

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

评论

0/150

提交评论