Hyperledger Composer使用教程

 

基本概念介绍

1. 欢迎来到Hyperledger作曲家

Hyperledger Composer是一个广泛的,开放的开发工具集和框架,可以使开发区块链应用程序变得更容易。我们的主要目标是加快实现价值的时间,并使您更容易将区块链应用程序与现有业务系统集成。您可以使用Composer快速开发用例,并在几周内部署区块链解决方案,而不是几个月。Composer允许您为业务网络建模,并将现有系统和数据与区块链应用程序集成。

Hyperledger Composer支持现有的Hyperledger Fabric区块链基础架构和运行时,支持可插入区块链一致性协议,以确保交易根据指定业务网络参与者的策略进行验证。

日常应用程序可以使用来自商业网络的数据,为最终用户提供简单和受控的接入点。

您可以使用Hyperledger Composer快速建立您当前的业务网络模型,包含您现有的资产以及与之相关的交易; 资产是有形的或无形的商品,服务或财产。作为业务网络模型的一部分,您可以定义可与资产交互的交易。商业网络还包括与他们互动的参与者,每个参与者都可以与多个商业网络中的唯一身份相关联。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

Hyperledger Composer如何在实践中工作?

有关业务网络的实例; 房地产经纪人可以快速建立自己的业务网络模型:

· 资产:房屋和房源

· 参与者:买家和房主

· 交易:购买或出售房屋,创建和关闭房源

参与者可以根据其作为买方,卖方或房地产经纪人的角色来限制交易。然后,房地产经纪人可以创建一个应用程序,通过一个简单的用户界面向买卖双方展示查看公开列表和提供报价。这个业务网络也可以与现有的库存系统相结合,增加新的房屋作为资产并移除出售的物业。相关的其他方可以注册为参与方,例如土地注册处可能会与买方互动以转让土地所有权。

 

2. Hyperledger Composer中的重要概念

Hyperledger Composer是一种包含建模语言和一组API的编程模型,用于快速定义和部署允许参与者发送交换资产的交易的业务网络和应用程序。

Hyperledger Composer组件

您可以使用称为Hyperledger Composer Playground的基于浏览器的用户界面体验Hyperledger Composer。游乐场可作为托管版本(无需安装)或本地安装(适用于离线编辑和测试示例业务网络)。

想要使用Hyperledger Composer的完整应用程序开发功能的开发人员应安装开发人员工具。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

Hyperledger Composer中的重要概念

区块链状态存储

通过商业网络提交的所有交易都存储在区块链分类帐中,资产和参与者的当前状态存储在区块链状态数据库中。区块链通过一组对等点分配账本和状态数据库,并确保对使用一致算法的所有对等点的分类账和状态数据库的更新保持一致。

连接配置文件

Hyperledger Composer使用连接配置文件来定义要连接的系统。连接配置文件是一个JSON文档,它是业务网卡的一部分。这些配置文件通常由系统的创建者提供,并且应该用于创建业务网卡以便能够连接到该系统。

资产

资产是有形或无形的商品,服务或财产,并存储在注册管理机构中。资产几乎可以代表商业网络中的任何东西,例如,待售房屋,销售清单,该房屋的土地登记证书以及该房屋的保险文件可能都是一个或多个商业网络中的资产。

资产必须具有唯一标识符,但除此之外,它们可以包含您定义的任何属性。资产可能其他资产或参与者有关。

参与者

参与者是商业网络的成员。他们可能拥有资产并提交交易。参与者类型是建模的,并且像资产一样,必须具有标识符并且可以根据需要具有任何其他属性。参与者可以映射到一个或多个身份。

身份

身份是数字证书和私钥。身份用于在业务网络上进行交易,并且必须映射到业务网络中的参与者。单个身份存储在商业网卡中,如果该身份已映射到参与者,则它允许该商业网卡的用户在该参与者的商业网络上进行交易。

业务网卡

业务网卡是标识,连接配置文件和元数据的组合,元数据可以包含要连接的业务网络的名称。业务网卡简化了连接到业务网络的过程,并将业务网络之外的身份概念扩展为身份的“钱包”,每个身份都与特定的业务网络和连接配置文件相关联。

交易

交易是参与者与资产交互的机制。这可以像参与者对拍卖中的资产投标或拍卖人标记拍卖关闭一样简单,自动将资产所有权转移给出价最高的投标人。

查询

查询用于返回有关区块链世界状态的数据。查询在业务网络中定义,并且可以包含用于简单定制的可变参数。通过使用查询,可以轻松地从您的区块链网络中提取数据。查询通过使用Hyperledger Composer API发送。

活动

业务网络定义中的事件与资产或参与者相同。一旦事件已被定义,它们可以由事务处理器功能发出,以向外部系统指示分类账发生了重要的事情。应用程序可以通过composer-clientAPI 订阅发出的事件。

访问控制

业务网络可能包含一组访问控制规则。访问控制规则允许对参与者访问业务网络中的哪些资产以及在什么条件下进行细粒度控制。访问控制语言足够丰富,可以通过声明捕捉复杂的条件,例如“只有车主才能转让车辆所有权”。事务处理器功能逻辑的外部访问控制使检查,调试,开发和维护变得更加容易。

历史记录注册表

历史学家是一个专门的登记处,记录成功的交易,包括提交他们的参与者和身份。历史记录将事务存储为HistorianRecord资产,这些资产在Hyperledger Composer系统名称空间中定义。

3. 典型的Hyperledger Composer解决方案架构

Hyperledger Composer使架构师和开发人员能够快速创建“全栈”区块链解决方案。即运行在区块链上的业务逻辑,将区块链逻辑暴露给Web或移动应用程序的REST API,以及将区块链与现有企业记录系统集成在一起。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

Hyperledger Composer由以下高级组件组成:

· 执行运行时

· JavaScript SDK

· 命令行界面

· REST服务器

· LoopBack连接器

· 游乐场Web用户界面

· Yeoman代码生成器

· VSCode和Atom编辑器插件

执行运行时

Hyperledger Composer设计用于支持不同的可插入运行时,目前有三种运行时实现:

· Hyperledger Fabric v1.1。状态存储在分布式账本上。

· Web,它在网页中执行,并被Playground使用。状态存储在浏览器本地存储中。

· 嵌入式,在Node.js过程中执行,主要用于单元测试业务逻辑。状态存储在内存中的键值存储中。

连接配置文件

Hyperledger Composer使用连接配置文件来指定如何连接到执行运行时。每种类型的执行运行时都有不同的配置选项。例如,Hyperledger Fabric v1.1运行时的连接配置文件将包含Fabric对等体的TCP / IP地址和端口,以及加密证书等。

连接配置文件是商业网卡的一部分。

JavaScript SDK

Hyperledger Composer JavaScript SDK是一组Node.js API,使开发人员能够创建应用程序来管理和与部署的业务网络进行交互。

这些API分为两个npm模块:

1. composer-client 用于向业务网络提交事务或对资产和参与者执行创建,读取,更新和删除操作

2. composer-admin 用于管理业务网络(安装,启动,升级)

所有API的细节都以JSDocs的形式提供(请参阅参考资料)。

作曲家客户端

通常将该模块安装为应用程序的本地依赖项。它提供了业务应用程序用来连接到业务网络以访问资产参与者和提交事务API 。在生产时,这只是需要添加的模块,作为应用程序的直接依赖。

作曲家管理员

通常将该模块安装为管理应用程序的本地依赖项。该API允许创建和部署业务网络定义

命令行界面

composer命令行工具使开发人员和管理员部署和管理的业务网络定义。

REST服务器

Hyperledger Composer REST服务器自动为业务网络生成Open API(Swagger)REST API。REST服务器(基于LoopBack技术)将业务网络的Composer模型转换为Open API定义,并在运行时实现对资产和参与者的创建,读取,更新和删除支持,并允许提交事务以进行处理或检索。

LoopBack连接器

Hyperledger Composer LoopBack Connector由Composer REST Server使用,但它也可以由本机支持LoopBack的集成工具单独使用。或者,它可以与LoopBack工具一起使用,以创建更复杂的REST API自定义。

游乐场Web用户界面

Hyperledger Composer Playground是定义和测试业务网络的Web用户界面。它允许业务分析师快速导入在Web或Hyperledger Fabric运行时执行的样本和原型业务逻辑。

Yeoman代码生成器

Hyperledger Composer使用Open Source Yeoman代码生成器框架来创建框架项目:

· Angular web应用程序

· Node.js应用程序

· 骨架业务网络

VSCode和Atom编辑器扩展

Hyperledger Composer为VSCode和Atom提供了社区贡献的编辑器扩展。VSCode扩展功能非常强大,可验证Composer模型和ACL文件,提供语法高亮显示,错误检测和片段支持。Atom插件要简单得多,只有基本的语法高亮。

 

区块链环境安装

1. 安装先决条件

Hyperledger Composer的先决条件可以安装在Ubuntu或MacOS上。选择您的操作系统以跳转到相应的部分,

Ubuntu的

要运行Hyperledger Composer和Hyperledger Fabric,我们建议您至少拥有4Gb的内存。

以下是安装所需开发工具的先决条件:

· 操作系统:Ubuntu Linux 14.04 / 16.04 LTS(均为64位)或Mac OS 10.12

· Docker引擎:版本17.03或更高

· Docker-Compose:版本1.8或更高版本

· 节点:8.9或更高(注意版本9不支持)

· npm:v5.x

· git:2.9.x或更高版本

· Python:2.7.x

· 您选择的代码编辑器,我们推荐VSCode。

**如果使用Linux安装Hyperledger Composer,请注意以下建议:

· 以普通用户身份登录,而不是root用户。

· 不要su根。

· 安装先决条件时,使用curl,然后使用sudo进行解压缩。

· 以普通用户身份运行prereqs-ubuntu.sh。它可能会提示输入root密码,因为它的某些操作需要以root身份运行。

· 不要使用npm sudosuroot来使用它。

· 避免以root身份全局安装节点。**

如果您在Ubuntu上运行,则可以使用以下命令下载先决条件:

复制

curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.shchmod u+x prereqs-ubuntu.sh

接下来运行脚本 - 因为这个脚本在执行过程中使用了sudo,所以会提示您输入密码。

复制

./prereqs-ubuntu.sh

 

 

2. 安装开发环境

按照这些说明获取Hyperledger Composer开发工具(主要用于创建业务网络)并且站立Hyperledger Fabric(主要用于在本地运行/部署您的业​​务网络)。请注意,您创建的业务网络也可以部署到其他环境(例如云​​平台)中的Hyperledger Fabric运行时。

在你开始之前

确保您已按照安装先决条件中的说明安装了必需的先决条件

这些说明假定您以前没有安装这些工具并使用它们。如果不是这种情况,那么在开始按照本指南进行操作之前,您可能需要检查以前的设置是否完全被破坏。要了解如何执行此操作,请跳至附录

为了提供灵活性并支持最大数量的开发,测试和部署方案,Composer作为一组组件提供,您可以使用npmCLI 安装和控制组件。这些说明将告诉你如何首先安装所有东西,然后如何控制你的开发环境。

安装组件

1步:安装CLI工具

Composer开发人员有几个有用的CLI工具。最重要的是composer-cli,它包含了所有必要的操作,所以我们会先安装它。接下来,我们也会拿起generator-hyperledger-composercomposer-rest-serverYeoman加上generator-hyperledger-composer。最后3个不是开发环境的核心部分,但如果您遵循教程或开发与您的商业网络交互的应用程序,它们将非常有用,因此我们现在会安装它们。

请注意,您不应该使用susudo为以下npm命令。

1.基本的CLI工具:

npm install -g composer-cli

2.在您的计算机上运行REST服务器以将您的业务网络公开为RESTful API的实用程序:

npm install -g composer-rest-server

3.生成应用程序资产的有用工具:

npm install -g generator-hyperledger-composer

4.Yeoman是一种产生应用程序的工具,它利用generator-hyperledger-composer

npm install -g yo

2步:安装游乐场

如果您已经在线尝试了Composer,则会看到浏览器应用程序“Playground”。您也可以在您的开发机器上本地运行此功能,为您提供查看和演示业务网络的用户界面。

1.用于简单编辑和测试的浏览器应用商业网络:

npm install -g composer-playground

3步:设置您的IDE

虽然浏览器应用程序用于处理商业网络代码,但大多数用户更喜欢在IDE中工作。我们最喜欢的是VSCode,因为Composer扩展可用。

1.从此URL安装VSCode:https//code.visualstudio.com/download

2.打开VSCode,进入扩展,然后Hyperledger Composer从市场中搜索并安装扩展。

步骤4:安装超级结构结构

此步骤为您提供本地Hyperledger Fabric运行时来部署您的业务网络。

1.在您选择的目录中(我们将假设~/fabric-dev-servers),获取.tar.gz包含安装Hyperledger Fabric的工具的文件:

mkdir ~/fabric-dev-servers && cd ~/fabric-dev-servers

curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz

tar -xvf fabric-dev-servers.tar.gz

zip如果您愿意,也可以使用A :只需使用上面的代码片段中的命令替换.tar.gz文件fabric-dev-servers.ziptar -xvf使用该unzip命令即可。

1.使用刚刚下载并解压缩的脚本下载本地Hyperledger Fabric运行时:

cd ~/fabric-dev-servers

./downloadFabric.sh

恭喜,您现在已经安装了典型开发环境所需的一切。请继续阅读以了解您在此环境中开展并测试区块链商业网络时最常见的一些事情。

控制你的开发环境

启动和停止Hyperledger结构

您可以使用一组脚本来控制运行时间,~/fabric-dev-servers如果您遵循了建议的默认值,那么您将在其中找到这些脚本。

第一次启动一个新的运行时,您需要运行启动脚本,然后生成一个PeerAdmin卡:

    cd ~/fabric-dev-servers

    ./startFabric.sh

    ./createPeerAdminCard.sh

您可以使用启动和停止运行时~/fabric-dev-servers/stopFabric.sh,然后再次启动它~/fabric-dev-servers/startFabric.sh

在开发阶段结束时,你运行~/fabric-dev-servers/stopFabric.sh然后~/fabric-dev-servers/teardownFabric.sh。请注意,如果您已经运行了拆卸脚本,那么下次启动运行时,就需要像第一次启动时那样创建一个新的PeerAdmin卡。

本地运行时旨在频繁启动,停止和拆除,以供开发使用。如果您正在寻找具有更持久状态的运行时,则需要在开发环境外部运行一个运行时环境,并将业务网络部署到该环境。这方面的例子包括通过Kubernetes运行它,或者在诸如IBM Cloud之类的托管平台上运行它。

启动网络应用程序(“Playground”)

要启动Web应用程序,请运行:

    composer-playground

它通常会自动打开您的浏览器,地址如下:http:// localhost:8080 / login

您应该在Web应用程序的“我的商业网络”屏幕上看到[email protected]您使用该createPeerAdminCard脚本创建的卡片:如果您没有看到该卡片,则可能没有正确启动您的运行时间!

恭喜你,所有组件都在运行,并且在完成开发会话时,你也知道如何停下来并拆除它们。

 

创建游乐场教程

在这一步一步教程中,我们将通过建立业务网络,定义我们的资产,参与者和交易,以及通过创建一些参与者和资产来测试我们的网络,并提交交易以将资产的所有权从一个更改为另一个。本教程旨在介绍使用在线操场环境的Hyperledger Composer概念。

第一步:打开Hyperledger Composer游乐场

Open Composer Playground(注意,此链接将带您进入Web Composer Playground--如果您已经安装了开发环境,您也可以在本地版本中继续使用)。

您应该看到我的商业网络屏幕。“ 我的商家网络页面显示您可以连接的商业网络摘要以及可用于连接的身份。暂时不要过于担心,因为我们要创建自己的网络。

第二步:创建一个新的业务网络

接下来,我们要从头开始创建一个新的业务网络。一个商业网络有几个定义的属性; 名称和可选说明。您还可以选择在现有模板上建立新的业务网络,或导入您自己的模板。

1.点击在Web浏览器标题下部署新的业务网络即可开始。

2.新的商业网络需要一个名称,我们称之为tutorial-network

3.或者,您可以输入您的商业网络的描述。

4.接下来,我们必须选择一个基于我们的业务网络,因为我们要从头开始构建网络,请点击空白业务网络

5.现在我们的网络已经定义好了,点击部署

第三步:连接到商业网络

现在我们已经创建并部署了业务网络,您应该会在我们的钱包中看到一个名为admin的新业务网络卡,用于我们的业务网络教程 - 网络。钱包可以包含业务网卡以连接到多个部署的业务网络。

连接到外部区块链时,业务网卡代表连接到业务网络所需的所有内容。它们包括连接详细信息,身份验证资料和元数据。

要连接到我们的业务网络,请点击我们业务网络卡下的立即连接

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

第四步:添加模型文件

正如您所看到的,我们现在处于“ 定义选项卡中,在使用“ 测试选项卡进行部署和测试之前,此选项卡是您创建和编辑构成业务网络定义的文件的位置。

当我们选择一个空的商业网络模板时,我们需要修改提供的模板文件。第一步是更新模型文件。模型文件定义了我们业务网络中的资产,参与者,交易和事件。

有关我们建模语言的更多信息,请查看我们的文档

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

点击Model File查看它。

1.删除模型文件中的代码行并将其替换为:

/**

 * My commodity trading network

 */

namespace org.example.mynetwork

asset Commodity identified by tradingSymbol {

    o String tradingSymbol

    o String description

    o String mainExchange

    o Double quantity

    --> Trader owner

}

participant Trader identified by tradeId {

    o String tradeId

    o String firstName

    o String lastName

}

transaction Trade {

    --> Commodity commodity

    --> Trader newOwner

}

该域模型定义了单个资产类型Commodity和单个参与者类型Trader以及Trade用于修改商品所有者的单个交易类型。

第五步:添加事务处理器脚本文件

现在已经定义了域模型,我们可以定义业务网络的事务逻辑。Composer使用JavaScript函数表达业务网络的逻辑。这些功能在交易提交处理时自动执行。

有关编写事务处理器功能的更多信息,请查阅我们的文档

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

点击script File按钮。

单击脚本文件并单击添加

删除脚本文件中的代码行并将其替换为以下代码:

/**

 * Track the trade of a commodity from one trader to another

 * @param {org.example.mynetwork.Trade} trade - the trade to be processed

 * @transaction

 */async function tradeCommodity(trade) {

    trade.commodity.owner = trade.newOwner;

    let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');

    await assetRegistry.update(trade.commodity);}

此功能仅owner根据newOwner收到的Trade交易的财产更改商品的财产。然后它将修改Commodity后的内容保存到资产注册表中,用于存储Commodity实例。

第六步:访问控制

访问控制文件定义了业务网络的访问控制规则。我们的网络很简单,所以默认的访问控制文件不需要编辑。基本文件为当前参与者提供了networkAdmin对业务网络和系统级操作的完全访问权限。

虽然可以有多个模型或脚本文件,但在任何业务网络中只能有一个访问控制文件。

有关访问控制文件的更多信息,请查看我们的文档

第七步:部署更新的业务网络

现在我们有模型,脚本和访问控制文件,我们需要部署和测试我们的业务网络。

单击deploy changes以升级业务网络。

注意:如果您在本地使用操场并连接到真正的 Fabric,请参阅教程底部的其他注释。

第八步:测试业务网络定义

接下来,我们需要建立一些参与者(在这种情况下,以测试我们的业务网络交易商),创造了一个素材资源(商品),然后使用我们的贸易交易改变所有权的商品

单击Test选项卡开始。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

第九步:创建参与者

我们应该添加到我们的业务网络的第一件事是两个参与者。

1. 确保您在左侧选择了Trader选项卡,然后点击右上角的Create New Participant

2.你可以看到交易者参与者的数据结构。我们需要一些容易识别的数据,因此删除那里的代码并粘贴以下内容:

{

  "$class": "org.example.mynetwork.Trader",

  "tradeId": "TRADER1",

  "firstName": "Jenny",

  "lastName": "Jones"

}

3.点击Create New Participant创建参与者。

4.您应该能够看到您创建的新交易者参与者。我们需要另一个交易者来测试我们的交易交易,所以创建另一个交易者,但这次使用以下数据:

{

  "$class": "org.example.mynetwork.Trader",

  "tradeId": "TRADER2",

  "firstName": "Amy",

  "lastName": "Williams"

}

在继续之前,确保两个参与者都存在于交易者视图中!

第十步:创建资产

现在我们有两个交易者参与者,我们需要他们交易的东西。创建资产与创建参与者非常相似。我们正在创建的商品将拥有一个所有者属性,表明它属于交易者,并且tradeIdTRADER1

1.点击ASSETS下的Commodity标签,然后点击Create New Asset

2.删除资产数据并将其替换为以下内容:

{

  "$class": "org.example.mynetwork.Commodity",

  "tradingSymbol": "ABC",

  "description": "Test commodity",

  "mainExchange": "Euronext",

  "quantity": 72.297,

  "owner": "resource:org.example.mynetwork.Trader#TRADER1"

}

创建此资产后,您应该能够在“ ASSETS选项卡中看到它。

1. 

第十一步:在参与者之间转移商品

现在我们有两个交易员和一个商品在他们之间进行交易,我们可以测试我们的交易交易。

事务是Hyperledger Composer业务网络中所有变化的基础,如果您想在本教程后尝试使用自己的尝试,请尝试从“ 我的业务网络屏幕创建另一个业务网络并使用更高级的业务网络模板。

测试交易交易:

1.点击左侧的Submit Transaction按钮。

2.确保交易类型为交易

3.将交易数据替换为以下内容,或者更改详细信息:

{

  "$class": "org.example.mynetwork.Trade",

  "commodity": "resource:org.example.mynetwork.Commodity#ABC",

  "newOwner": "resource:org.example.mynetwork.Trader#TRADER2"

}

4.点击submit

5.检查我们的资产已经改变所有权从TRADER1TRADER2,通过扩大资产数据部分。你应该看到所有者被列为resource:org.example.mynetwork.Trader#TRADER2

6.要查看我们业务网络的完整交易历史记录,请点击左侧的所有交易。以下是每个交易提交时的清单。您可以看到,我们使用用户界面执行的某些操作(例如创建交易参与者和商品资产)被记录为交易,即使它们未在我们的业务网络模型中定义为交易。这些事务被称为“系统事务”,并且对于所有业务网络都是通用的,并且在Hyperledger Composer运行时中定义。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

注销业务网络

现在交易已成功运行,我们应该注销商业网络,最终在我们开始的“ My Business Network屏幕上结束。

1. 在屏幕的右上角是一个标有admin的按钮。这将列出您当前的身份,注销,单击管理以打开下拉菜单,然后单击My Business Network

将业务网络部署到真正的结构。

在本地使用Playground,您可以使用连接到在浏览器本地存储中工作的“Web浏览器”,或者您可以使用连接到通常在名为“hlfv1”的组中使用真实结构的连接

如果你连接到一个真正的 Fabric,那么你很可能已经创建了一个卡,用于PeerAdmin和ChannelAdmin角色的身份 - 这通常称为PeerAdmin。这是您用于使用Composer部署和更新网络的卡。

当您将网络部署到真正的 Fabric时,需要完成其他字段才能点击“ 部署按钮 - 您需要提供网络管理员的详细信息。

滚动到部署屏幕的底部以查找网络管理员的凭据。对于简单的开发结构和许多测试网络,您可以提供ID和秘密。注册ID - 管理员注册密码 - adminpw

当指定ID和秘密时,您可以单击“ 部署按钮并在第三步中继续教程。

如果您正在使用自定义或生产结构 - 请联系您的结构管理员以获取网络管理员的详细信息。

连接到真实Fabric时更新业务网络

当您使用真实光纤网并单击部署更改时,您将看到一个添加弹出式对话框,要求您从下拉列表中指定安装卡和升级卡。通常,您指定与用于部署初始网络相同的PeerAdmin卡。如果您不确定,请联系您的Fabric Administrator。

选择卡片,然后点击升级按钮。请注意,在真正的Fabric上,这可能需要几分钟才能完成。

在步骤八继续教程。

 

附录:销毁先前的设置

如果您以前使用的是旧版本的Hyperledger Composer,现在正在设置新安装,则可能需要终止并删除所有以前的Docker容器,您可以使用以下命令执行此操作:

    docker kill $(docker ps -q)

    docker rm $(docker ps -aq)

    docker rmi $(docker images dev-* -q)

 

3. 更新开发环境

如果您已经安装了Hyperledger Composer开发工具,并且希望将安装更新到最新版本的Hyperledger Composer,请按照这些说明进行操作。

在你开始之前

这些说明假设您已经安装了开发工具并在之前使用过它们。如果您之前尚未安装开发工具,请按照安装开发环境中的说明进行操作。

更新组件

1步:更新CLI工具

任何正在运行的CLI工具实例都应该在继续之前停止。如果您有任何正在运行的Composer REST服务器实例,请确保这些实例在继续之前停止。composer-rest-server如果您不确定是否有任何正在运行的实例,则可以查找该进程。

卸载所有CLI工具的当前安装版本:

npm uninstall -g composer-cli composer-rest-server generator-hyperledger-composer

安装所有CLI工具的最新版本:

npm install -g composer-cli composer-rest-server generator-hyperledger-composer

2步:更新Playground

如果您在开发机器上安装了浏览器应用程序“Playground”,则还需要进行更新。如果您有任何正在运行的浏览器应用程序实例,请确保在继续之前停止这些实例。composer-playground如果您不确定是否有任何正在运行的实例,则可以查找该进程。

卸载当前安装的浏览器应用程序版本:

npm uninstall -g composer-playground

安装最新版本的浏览器应用程序:

npm install -g composer-playground

恭喜,您已经使用最新版本的开发工具更新了您的开发环境。您现在可以继续使用最新功能和错误修复来开发您的区块链应用程序!

创建Hyperledger Composer解决方案的开发人员教程

本教程将引导您从头开始构建Hyperledger Composer区块链解决方案。在几个小时的时间内,您将能够从破坏性区块链创新的想法转变为针对真正的Hyperledger Fabric区块链网络执行交易,并生成/运行与区块链网络交互的示例Angular 2应用程序。

本教程概述了适用于您自己的用例的技术和资源。

注意:本教程是针对使用Hyperledger Fabric v1.1运行的Ubuntu Linux上构建的最新的Hyperledger Composer编写的,其中引用了下文,并且还针对Mac环境进行了测试。

先决条件

开始本教程之前:

· 设置你的开发环境

· 安装编辑器,例如VSCode或Atom

第一步:创建业务网络结构

Hyperledger Composer的关键概念是商业网络定义(BND)。它为您的区块链解决方案定义了数据模型,事务逻辑和访问控制规则。要创建一个BND,我们需要在磁盘上创建一个合适的项目结构。

最简单的入门方法是使用Yeoman生成器创建骨架业务网络。这将创建一个包含业务网络的所有组件的目录。

1.使用Yeoman创建一个骨架业务网络。此命令将需要业务网络名称,说明,作者姓名,作者电子邮件地址,许可证选择和命名空间。

yo hyperledger-composer:businessnetwork

2.输入 tutorial-network 网络名称以及所需的描述信息,作者姓名和作者电子邮件。

3.选择 Apache-2.0 作为许可证。

4.选择 org.example.mynetwork 作为命名空间。

5.选择 No 当被问及是否生成一个空网络时。

1. 

第二步:定义一个商业网络

业务网络由资产,参与者,交易,访问控制规则以及可选的事件和查询组成。在前面步骤中创建的骨架业务网络中,有一个model(.cto)文件,其中将包含业务网络中所有资产,参与者和事务的类定义。骨架业务网络还包含permissions.acl具有基本访问控制规则的访问控制()文档,logic.js包含事务处理器功能的脚本()文件以及package.json包含业务网络元数据的文件。

建模资产,参与者和交易

第一个要更新的文档是model(.cto)文件。该文件使用Hyperledger Composer建模语言编写。模型文件包含每类资产,交易,参与者和事件的定义。它隐含地扩展了建模语言文档中描述的Hyperledger Composer系统模型。

1.打开 org.example.mynetwork.cto 模型文件。

2.用以下内容替换内容:

/**

 * My commodity trading network

 */

namespace org.example.mynetwork

asset Commodity identified by tradingSymbol {

    o String tradingSymbol

    o String description

    o String mainExchange

    o Double quantity

    --> Trader owner

}

participant Trader identified by tradeId {

    o String tradeId

    o String firstName

    o String lastName

}

transaction Trade {

    --> Commodity commodity

    --> Trader newOwner

}

3.保存您的更改org.example.mynetwork.cto

添加JavaScript事务逻辑

在模型文件中,Trade定义了事务,指定与资产和参与者的关系。事务处理函数文件包含执行模型文件中定义的事务的JavaScript逻辑。

Trade交易旨在简单地接受Commodity正在交易的资产的标识符以及Trader要设置为新所有者的参与者的标识符。

1.打开 logic.js 脚本文件。

2.用以下内容替换内容:

/**

 * Track the trade of a commodity from one trader to another

 * @param {org.example.mynetwork.Trade} trade - the trade to be processed

 * @transaction

 */async function tradeCommodity(trade) {

    trade.commodity.owner = trade.newOwner;

    let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');

    await assetRegistry.update(trade.commodity);}

3.保存您的更改logic.js

添加访问控制

1.替换文件中的以下访问控制规则 permissions.acl :

/**

 * Access control rules for tutorial-network

 */

rule Default {

    description: "Allow all participants access to all resources"

    participant: "ANY"

    operation: ALL

    resource: "org.example.mynetwork.*"

    action: ALLOW

}

rule SystemACL {

  description:  "System ACL to permit all access"

  participant: "ANY"

  operation: ALL

  resource: "org.hyperledger.composer.system.**"

  action: ALLOW

}

2.保存您的更改permissions.acl

1. 

第三步:生成业务网络存档

现在已经定义了业务网络,它必须打包到可部署的业务网络存档(.bna)文件中。

1.使用命令行,导航到 tutorial-network 目录。

2.tutorial-network目录中运行以下命令:

composer archive create -t dir -n .

该命令运行后,[email protected]在该tutorial-network目录中创建了一个调用的业务网络存档文件。

第四步:部署业务网络

创建.bna文件后,业务网络可以部署到Hyperledger Fabric实例。通常情况下,来自Fabric管理员的信息需要创建一个PeerAdmin身份,具有将链接代码安装到对等体的权限以及在composerchannel通道上启动链接代码的权限。但是,作为开发环境安装的一部分,PeerAdmin已经创建了一个身份。

业务网络安装完成后,网络就可以启动。为了最佳实践,应该创建一个新的标识以在部署后管理业务网络。这个身份被称为网络管理员。

检索正确的凭证

一个PeerAdmin有正确的凭据业务网络卡已为开发环境安装的一部分创建的。

部署业务网络

将业务网络部署到Hyperledger Fabric需要在对等设备上安装Hyperledger Composer业务网络,然后才能启动业务网络,并且必须创建新参与者,身份和关联卡才能成为网络管理员。最后,必须导入网络管理员业务网卡才能使用,然后可以ping通网络以检查它是否正在响应。

1.要从目录安装业务网络tutorial-network,请运行以下命令:

composer network install --card [email protected] --archiveFile [email protected]

composer network install命令需要一个PeerAdmin业务网卡(在这种情况下,预先创建并导入一个网卡)以及.bna定义业务网络的文件路径。

2.要启动业务网络,请运行以下命令:

composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card [email protected] --file networkadmin.card

composer network start命令需要企业网卡,以及业务网络的管理员身份名称,业务网络的名称和版本以及要创建的文件的名称,以准备将其导入为业务网卡。

3.要将网络管理员标识导入为可用的业务网卡,请运行以下命令:

composer card import --file networkadmin.card

composer card import命令需要指定的文件名composer network start来创建卡片。

4.要检查业务网络是否已成功部署,请运行以下命令以ping网络:

composer network ping --card [email protected]

composer network ping命令需要使用企业网卡来识别要ping的网络。

第五步:生成REST服务器

Hyperledger Composer可以基于业务网络生成定制的REST API。为了开发Web应用程序,REST API提供了一个有用的语言无关抽象层。

 

1.要创建REST API,请导航到 tutorial-network 目录并运行以下命令:

composer-rest-server

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

2.输入 [email protected] 作为名片。

3.选择 never use namespaces询问是否在生成的API中generated Rest API时使用名称空间。

4.选择 No 当被问及是否保护生成的API secure the REST API

5.选择 No 当被问及是否保护生成的Passport  he REST API using Passport

6.选择 yes 当被问及是否启用事件发布时。

选择 No 当被问及是否启用TLS安全。

生成的API连接到部署的区块链和业务网络。

 

第六步:生成一个应用程序

Hyperledger Composer还可以生成针对REST API运行的Angular 4应用程序。

1.要创建您的Angular 4应用程序,请导航至 tutorial-network 目录并运行以下命令:

yo hyperledger-composer:angular

2.选择 yes 当被要求连接到运行业务网络时。

3.输入标准package.json问题(项目名称,说明,作者姓名,作者电子邮件,许可证)

4.输入 [email protected] 为商业网卡。

5.选择连接到现有的REST API

6.输入 http://localhost 为REST服务器地址。

7.输入 3000 用于服务器端口。

8.选择名称空间不被使用

然后,Angular generator将为该项目创建脚手架并安装所有依赖项。要运行该应用程序,请导航到您的角度项目目录并运行 npm start 。这将引发一个针对您的REST API运行的Angular 4应用程序 http://localhost:4200 。

查询使用Composer查询语言和REST API的教程

在本教程中,我们将在开发者教程的基础上进行扩展,以展示查询。本地查询语言可以过滤使用条件返回的结果,并且可以在事务中调用该结果以执行操作,例如更新或移除结果集上的资产。

查询.qry在业务网络定义的父目录中的查询文件()中定义。查询包含WHERE子句,该子句定义选择资产或参与者的标准。

本教程使用tutorial-network开发人员指南中开发和部署的业务网络。

先决条件

开始本教程之前:

· 完成开发环境安装

· 完成开发者教程

第一步:更新业务网络

在开发者教程中创建的业务网络必须更新。更新的业务网络包含两个事件和一个额外的事务。

更新模型文件

模型文件必须更新以包含事件和新事务。

1.打开model的(.cto)文件tutorial-network

2.将以下事件和事务添加到模型中:

event TradeNotification {

    --> Commodity commodity

}

transaction RemoveHighQuantityCommodities {

}

event RemoveNotification {

    --> Commodity commodity

}

3.将更改保存到模型中。

更新事务逻辑以使用查询和事件

现在域模型已经更新,我们可以编写额外的业务逻辑,在事务提交处理时执行。在本教程中,我们将事件和查询添加到下面的业务逻辑。

1.打开交易处理器功能文件lib/logic.js

2.用下面的JavaScript替换事务逻辑:

/**

 * Track the trade of a commodity from one trader to another

 * @param {org.example.mynetwork.Trade} trade - the trade to be processed

 * @transaction

 */async function tradeCommodity(trade) {

    // set the new owner of the commodity

    trade.commodity.owner = trade.newOwner;

    let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');

    // emit a notification that a trade has occurred

    let tradeNotification = getFactory().newEvent('org.example.mynetwork', 'TradeNotification');

    tradeNotification.commodity = trade.commodity;

    emit(tradeNotification);

    // persist the state of the commodity

    await assetRegistry.update(trade.commodity);}/**

 * Remove all high volume commodities

 * @param {org.example.mynetwork.RemoveHighQuantityCommodities} remove - the remove to be processed

 * @transaction

 */async function removeHighQuantityCommodities(remove) {

    let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');

    let results = await query('selectCommoditiesWithHighQuantity');

    for (let n = 0; n < results.length; n++) {

        let trade = results[n];

        // emit a notification that a trade was removed

        let removeNotification = getFactory().newEvent('org.example.mynetwork','RemoveNotification');

        removeNotification.commodity = trade;

        emit(removeNotification);

        await assetRegistry.remove(trade);

    }}

3.保存您的更改logic.js

第一个功能tradeCommodity将更改商品(拥有新的所有者参与者)上的所有者财产,以传入交易事务并发出通知事件。然后,它将修改的商品保留回用于存储商品实例的资产注册表中。

第二个函数调用命名查询'selectCommoditiesWithHighQuantity'(定义于queries.qry),它将返回数量大于60的所有商品资产记录; 发出一个事件; 并从AssetRegistry中移除商品。

第二步:创建一个查询定义文件

事务处理器逻辑使用的查询在必须被调用的文件中定义queries.qry。每个查询条目定义执行查询的资源和条件。

1.tutorial-network目录中,创建一个名为的新文件queries.qry

2.将以下代码复制并粘贴到queries.qry

/** Sample queries for Commodity Trading business network

*/

query selectCommodities {

  description: "Select all commodities"

  statement:

      SELECT org.example.mynetwork.Commodity

}

query selectCommoditiesByExchange {

  description: "Select all commodities based on their main exchange"

  statement:

      SELECT org.example.mynetwork.Commodity

          WHERE (mainExchange==_$exchange)

}

query selectCommoditiesByOwner {

  description: "Select all commodities based on their owner"

  statement:

      SELECT org.example.mynetwork.Commodity

          WHERE (owner == _$owner)

}

query selectCommoditiesWithHighQuantity {

  description: "Select commodities based on quantity"

  statement:

      SELECT org.example.mynetwork.Commodity

          WHERE (quantity > 60)

}

3.保存您的更改queries.qry

第三步:重新生成您的业务网络存档

在更改业务网络中的文件后,必须将业务网络重新打包为业务网络存档(.bna)并重新部署到Hyperledger Fabric实例。升级部署的网络需要部署的新版本具有新的版本号。

1.tutorial-network目录中,打开package.json文件。

2.版本属性更新0.0.10.0.2

3.使用命令行,导航到该tutorial-network目录。

4.运行以下命令:

composer archive create --sourceType dir --sourceName . -a [email protected]

第四步:部署更新后的业务网络定义

我们需要部署修改后的网络,以成为区块链上的最新版本!我们正在使用新创建的归档业务网络归档文件来更新现有的已部署业务网络; 这是我们在开发者教程中使用的相同的商业网络名称。

1切换到终端,将目录切换到包含该文件夹的文件夹[email protected]

2.运行以下命令安装更新的业务网络:

composer network install --card [email protected] --archiveFile [email protected]

3.运行以下命令将网络升级到新版本:

composer network upgrade -c [email protected] -n tutorial-network -V 0.0.2

4.在继续使用以下命令之前,检查当前版本的业务网络:

composer network ping -c [email protected] | grep Business

第五步:为更新的业务网络重新生成REST API

现在我们将整合最新更新的业务网络和添加的查询,并公开此业务网络的REST API。

1.使用命令行,导航到该tutorial-network目录。

2.使用以下命令启动REST服务器:

composer-rest-server

3.输入[email protected]卡名称。

4.询问是否在生成的API中使用名称空间时,请选择不使用名称空间。

5.当询问是否保护生成的API时选择

6.当询问是否启用事件发布时,选择

7.当被问及是否启用TLS安全时,请选择

第六步:测试REST API并创建一些数据

打开Web浏览器并导航到http://localhost:3000 / explorer。您应该看到LoopBack API Explorer,允许您检查和测试生成的REST API。

我们应该能够看到添加了名为“查询”的REST端点,并且在展开时显示了在业务网络中定义的REST查询操作列表 tutorial-network

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

在继续之前,我们需要创建一些数据,以充分展示查询。使用提供的示例JSON数据,使用REST API创建3个交易者(参与者)和更多商品(资产)。

1.首先,在REST Explorer中点击'Trader',然后点击/ Trader上的'POST'方法,然后向下滚动到Parameter部分 - 依次创建以下Trader实例:

{

  "$class": "org.example.mynetwork.Trader",

  "tradeId": "TRADER1",

  "firstName": "Jenny",

  "lastName": "Jones"

}

2.点击“试用”来创建参与者。'响应代码'(向下滚动)应该是200(SUCCESS)

3.通过复制以下JSON创建另一个交易者:

{

  "$class": "org.example.mynetwork.Trader",

  "tradeId": "TRADER2",

  "firstName": "Jack",

  "lastName": "Sock"

}

4.通过应对以下JSON创建第三个交易者:

{

  "$class": "org.example.mynetwork.Trader",

  "tradeId": "TRADER3",

  "firstName": "Rainer",

  "lastName": "Valens"

}

5.现在滚动到顶部,然后在REST Explorer中单击“商品”对象。

6.点击POST操作并向下滚动到参数部分:以与上述相同的方式,为所有者TRADER1和TRADER2创建两个商品资产记录(见下文):

{

  "$class": "org.example.mynetwork.Commodity",

  "tradingSymbol": "EMA",

  "description": "Corn",

  "mainExchange": "EURONEXT",

  "quantity": 10,

  "owner": "resource:org.example.mynetwork.Trader#TRADER1"

}

复制

{

  "$class": "org.example.mynetwork.Commodity",

  "tradingSymbol": "CC",

  "description": "Cocoa",

  "mainExchange": "ICE",

  "quantity": 80,

  "owner": "resource:org.example.mynetwork.Trader#TRADER2"

}

第七步:使用商品交易REST API浏览器执行查询

现在我们有一些资产和参与者,我们可以使用生成的查询REST操作来测试一些查询。

执行简单的REST查询

现在我们拥有资产和参与者,我们可以尝试一些查询。

我们可以首先尝试的最简单的REST查询是我们的命名查询selectCommodities

展开“查询”REST端点,您将看到我们在模型中定义的命名查询。

这些查询现在作为REST查询公开,并为其生成一个/ GET操作。请注意,查询的描述(我们在模型定义中定义的)显示在右侧。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

展开selectCommodities查询。

点击“试用”按钮。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

它将返回所有现有商品 - 应该返回2个资产。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

执行筛选的REST查询

让我们通过他们的交易所选择所有商品 - 例如'EURONEXT'主要交易所。

1.展开查询端点'selectCommoditiesByExchange'并滚动到'参数'部分。

2.'Exchange'参数中输入'EURONEXT'。

3.点击“试用”。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

结果显示,只有那些与'EURONEXT'交换的商品才会显示在响应主体中

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

使用来自命名查询的结果执行事务更新

最后,您会记得我们已经定义了一个简单的查询,用于在我们的查询文件中筛选数量大于60的商品。在事务功能中使用时,查询功能非常强大,因为使用查询可以允许事务逻辑设置一组资产或参与者来执行更新或创建删除操作。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

我们selectCommoditiesWithHighQuantityremoveHighQuantityCommodities交易中使用查询。如果您在REST资源管理器中执行此/ GET操作,您会看到它仅选择数量大于60的资产。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

现在,让我们使用查询来执行大批量商品的删除。

首先检查自己有多少商品(使用“商品”/ GET操作),您应该看到至少两种商品,其中一种(可可)的数量> 60。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

让我们通过点击REST端点来检查实际查询,然后/selectCommoditiesWithHighQuantity单击/ GET,然后向下滚动到“试用” - 应该有一个符合条件的商品。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

好。现在让我们执行一个REST事务,它使用我们的“高数量”查询定义来决定删除哪些商品。

单击RemoveHighQuantityCommodities REST Endpoint以显示相同的/ POST操作。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

点击POST,向下滚动到参数部分,并点击“试一试外” -请注意:你不是必须在“数据”部分输入任何数据。

向下滚动,您应该看到一个transactionId,它表示事务处理函数内部的'remove'调用(本身是区块链事务),它将更新世界状态 - 响应代码应该是200

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

最后,让我们来验证我们的商品状态。返回到“商品”REST操作并再次执行GET操作....“试用”。

结果应该显示商品资产'Cocoa'现在已经消失,即只有数量<= 60的商品资产仍然存在,即我们的例子中的资产'玉米'。指定的查询提供了事务更新(以删除大量商品)并在业务逻辑中执行。

 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)

恭喜!

做得好,你现在已经完成了这个教程,我们希望你现在可以更好地了解Composer中的查询功能。您可以开始创建/构建自己的查询(或修改现有查询并将相关数据添加到此业务网络 - 请注意:您需要重新部署任何查询更改)才能试用!

 

 

4. 卸载开发环境

如果您已经安装了Hyperledger Composer开发工具,并且希望将其卸载,请按照这些说明进行操作。如果您希望将现有开发环境更新为不兼容的Hyperledger Composer版本(例如,从v0.16.x到v0.19.x),或者您不再需要开发环境,则可能需要执行此操作。

在你开始之前

这些说明假设您已经安装了开发工具并在之前使用过它们。如果您之前没有安装开发工具,那么这里没有任何事情可做!

卸载组件

1步:卸载CLI工具

任何正在运行的CLI工具实例都应该在继续之前停止。如果您有任何正在运行的Composer REST服务器实例,请确保这些实例在继续之前停止。composer-rest-server如果您不确定是否有任何正在运行的实例,则可以查找该进程。

1.卸载所有CLI工具的当前安装版本:

npm uninstall -g composer-cli composer-rest-server generator-hyperledger-composer

2步:卸载Playground

如果您在开发计算机上安装了浏览器应用程序“Playground”,则还需要卸载此应用程序。如果您有任何正在运行的浏览器应用程序实例,请确保在继续之前停止这些实例。composer-playground如果您不确定是否有任何正在运行的实例,则可以查找该进程。

1.卸载当前安装的浏览器应用程序版本:

npm uninstall -g composer-playground

3步:删除业务网卡存储

商业网卡存储在商业网络卡商店中,默认情况下它是当前用户主目录中的一个目录。删除此目录以删除所有业务网卡。要注意的是,这也将删除存储在商业网络存储卡中的所有身份(公共证书和私钥),因此您可能希望在继续之前对其进行备份!

1.删除商业网络卡商店:

rm -rf ~/.composer

步骤4:卸载Hyperledger Fabric

您可以使用一组脚本来控制本地Hyperledger Fabric运行时,~/fabric-dev-servers如果您遵循了建议的默认值,您将在其中找到这些脚本。

1.停止本地Hyperledger Fabric运行时并删除任何运行时Docker容器或映像:

~/fabric-dev-servers/stopFabric.sh

~/fabric-dev-servers/teardownFabric.sh

2.卸载本地Hyperledger Fabric运行时:

rm -rf ~/fabric-dev-servers

恭喜,你已经卸载了你的开发环境。要继续开发区块链应用程序,您需要从头开始安装开发工具。

 


相关文章:

  • 2021-05-05
  • 2021-12-03
  • 2021-08-17
  • 2021-11-28
  • 2021-10-30
  • 2022-12-23
  • 2021-06-17
  • 2021-12-15
猜你喜欢
  • 2021-12-07
  • 2021-12-03
  • 2021-07-21
  • 2021-09-14
  • 2022-12-23
  • 2021-05-07
  • 2021-12-03
相关资源
相似解决方案