创建一个Hyperledger Composer解决方案的开发者教程

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

本教程给出了对该技术的概述,以及可用于你自己用例的可用资源。

注意:本教程是针对在Ubuntu Linux上构建的最新的Hyperledger Composer编写的,它与Hyperledger Fabric v1.0运行在一起,也针对Mac环境进行了测试。

先决条件

开始本教程之前:

  • 建立你的开发环境

  • 安装一个编辑器,例如VSCode或Atom

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

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

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

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

  1. yo hyperledger-composer:businessnetwork

2、输入tutorial-network网络名称,以及描述,作者姓名和作者电子邮件的所需信息。
3、选择Apache-2.0作为许可证。
4、选择org.acme.biznet作为命名空间。

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

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

对资产、参与者和交易建模

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

1、打开org.acme.biznet.cto模型文件。
2、替换为以下内容:

  1. /**
  2. * My commodity trading network
  3. */
  4. namespace org.acme.biznet
  5. asset Commodity identified by tradingSymbol {
  6. o String tradingSymbol
  7. o String description
  8. o String mainExchange
  9. o Double quantity
  10. --> Trader owner
  11. }
  12. participant Trader identified by tradeId {
  13. o String tradeId
  14. o String firstName
  15. o String lastName
  16. }
  17. transaction Trade {
  18. --> Commodity commodity
  19. --> Trader newOwner
  20. }

3、保存你的更改到org.acme.biznet.cto

添加JavaScript交易逻辑

在模型文件中,定义了一个Trade交易,指定了一个到资产的关联和一个到参与者的关联。交易处理器函数文件包含执行模型文件中定义的交易的JavaScript逻辑。

这个Trade交易被设定为简单地接收要交易的类型为Commodity的资产,以及类型为Trader的参与者作为新的拥有者。

1、打开logic.js脚本文件。
2、替换为以下内容:

/**
 * Track the trade of a commodity from one trader to another
 * @param {org.acme.biznet.Trade} trade - the trade to be processed
 * @transaction
 */
function tradeCommodity(trade) {
    trade.commodity.owner = trade.newOwner;
    return getAssetRegistry('org.acme.biznet.Commodity')
        .then(function (assetRegistry) {
            return assetRegistry.update(trade.commodity);
        });
}

保存你的更改到logic.js

添加访问控制

1、在tutorial-network目录中创建一个permissions.acl文件。
2、将以下访问控制规则添加到permissions.acl

/**
 * Access control rules for tutorial-network
 */
rule Default {
    description: "Allow all participants access to all resources"
    participant: "ANY"
    operation: ALL
    resource: "org.acme.biznet.*"
    action: ALLOW
}

rule SystemACL {
  description:  "System ACL to permit all access"
  participant: "ANY"
  operation: ALL
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

保存你的更改到permissions.acl

第三步:生成一个业务网络档案

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

1、使用命令行,导航到tutorial-network目录。
2、从tutorial-network目录中运行以下命令:

composer archive create -t dir -n .

在命令运行之后,一个叫tutorial-network@0.0.1.bna的业务网络存档文件在tutorial-network目录中被创建。

第四步:部署业务网络

创建.bna文件后,业务网络就可以部署到Hyperledger Fabric实例。通常情况下,为了创建一个PeerAdmin身份,需要来自Fabric管理员的信息,还需要有将链码部署到peer的权限。但是,作为开发环境安装的一部分,已经创建了一个PeerAdmin身份。

在运行时被安装后,就可以将一个业务网络部署到peer。根据最佳实践,应该创建一个新的身份来管理部署后的业务网络。这个身份被称为网络管理员。

获取正确的凭据

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

部署业务网络

为了将业务网络部署到Hyperledger Fabric,需要在peer上安装Hyperledger Composer链码,然后必须将业务网络档案(.bna)发送给peer,并且必须创建一个新的参与者(由卡片标识和关联)作为网络管理员。最后,必须导入网络管理员业务网络卡片,才能ping通网络,查看是否有响应。

1、要安装Composer运行时,请运行以下命令:

composer runtime install --card PeerAdmin@hlfv1 --businessNetworkName tutorial-network

composer runtime install命令需要一个PeerAdmin业务网络卡片(在这案例中已经预先创建和导入了一个)以及业务网络的名称。

2、为了部署业务网络,要从目录tutorial-network中运行以下命令:

composer network start --card PeerAdmin@hlfv1 --networkAdmin admin --networkAdminEnrollSecret adminpw --archiveFile tutorial-network@0.0.1.bna --file networkadmin.card

composer network start命令需要一个业务网络卡片,以及业务网络的管理员身份名称、.bna文件路径和要创建的文件的名称(即准备导入的业务网络卡片)。

3、要将网络管理员身份导入为可用的业务网络卡片,请运行以下命令:

composer card import --file networkadmin.card

composer card import命令需要指定一个文件名,就是在composer network start命令创建卡片时指定的。

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

composer network ping --card admin@tutorial-network

composer network ping命令需要一张业务网络卡片来认证要ping的网络。

第五步:生成一个REST服务器

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

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

composer-rest-server

2、输入admin@tutorial-network作为卡片名称。
3、当询问是否在生成的API中使用名称空间时,请选择不使用名n称空间
4、当询问是否保护生成的API时选择
5、当询问是否启用事件发布时,选择
6、当询问是否启用TLS安全时,请选择

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