精华内容
下载资源
问答
  • 区块链Hyperledger Fabric的开发环境对初学者来说,安装略为复杂。本教程展示了如何使用Vagrant和Virtualbox虚拟机快速搭建本地开发环境。
    区块链Hyperledger Fabric 1.2与Composer开发环境安装与使用—57人已学习 
    课程介绍    
    png
        区块链Hyperledger Fabric的开发环境对初学者来说,安装略为复杂。本教程展示了如何使用Vagrant和Virtualbox虚拟机快速搭建本地开发环境。
    课程收益
        1. 学会搭建Hyperledger Fabric与Composer本地开发环境。 2. 熟悉开发环境的拓扑结构与使用。
    讲师介绍
        韩峰更多讲师课程
        5年互联网后端开发经验。现在麻省理工学院-宁波(中国)供应链创新学院攻读MBA学位. 研究方向为基于区块链技术的供应链金融。
    课程大纲
      第1章:Vagrant + 虚拟机搭建Hyperledger Fabric环境
        1.Fabric开发环境介绍  2:29
        2.Vagrant与VirtualBox的配合使用  9:58
        3.Fabric环境搭建  7:57
      第2章:本地安装Composer, 打造混合式的开发环境
        1.本地安装Composer, 打造混合式的开发环境  11:48
        2.PeerAdmin Card安装及主机Docker的配置  4:36
      第3章:熟悉开发环境: 拓扑与脚本的使用
        1.拓扑结构及Peer节点 和Client节点  7:13
        2.Orderer节点及MSP&CA和Chaincode开发流程  9:12
    大家可以点击【查看详情】查看我的课程
    展开全文
  • 1. 编写Node.js应用程序应用程序开发人员使用composer-clientnpm模块以编程方式连接到已部署的业务网络,创建,读取,更新和删除资产和参与者并提交事务。如果应用程序需要能够部署或管理业务网络,则composer-admin...

    1. 编写Node.js应用程序

    应用程序开发人员使用composer-clientnpm模块以编程方式连接到已部署的业务网络,创建,读取,更新和删除资产和参与者并提交事务。如果应用程序需要能够部署或管理业务网络,则composer-admin可以使用npm模块。

    样本landregistry.js文件包含代表土地登记处的类别,并包含列出土地标题,添加默认标题和提交交易的方法。这已使用JavaScript类实现; 但是你可以自由地构建你的代码,只要你愿意。

    值得强调的是API的风格是使用承诺。通常,Hyperledger Composer API将返回在操作成功完成时解决的承诺,或者返回操作结果(如果适用)。

    如果您不熟悉基于Promise的开发,那么值得在线查看一些教程以获取想法。除此之外,在节点8中,现在支持async / await,这使得开发异步应用程序变得更加容易。这里显示的示例使用await并假定代码包含在具有async属性的函数中

    需要模块

    Copy复制
    const BusinessNetworkConnection = require('composer-client').BusinessNetworkConnection;
    

    对于Hyperledger Composer客户端应用程序,这是唯一需要的npm模块。

    连接到Hyperledger Composer运行时

    BusinessNetworkConnection实例已创建,然后用于连接到运行时:

    Copy复制
    this.bizNetworkConnection = new BusinessNetworkConnection();
    

    我们要在这里创建的第一个Hyperledger Composer API调用是connect()API,用于在Hyperledger Fabric上建立与Hyperledger Composer运行时的连接。需要提供适当的cardName用于连接,例如admin@digitalproperty-network可能是有效的卡名称,具体取决于数字资产网络的部署方式。如果成功,此API将对商业网络定义返回一个承诺:

    Copy复制
    let this.businessNetworkDefinition = await this.bizNetworkConnection.connect(cardName);
    

    对于客户端应用程序来说,这是所有必需的必要设置,从这一点上来看应用程序想要做什么来调用哪些API。

    将资产添加到注册表

    Hyperledger Composer运行时将为每种建模资产创建一个默认注册表。所以在这个例子中,一个LandTitle注册表已经被创建。我们在这里要做的是访问该注册表,然后添加一些资产。getAssetRegistry()方法采用CTO模型文件中定义的完全合格资产名称(即名称空间加上资产类型的名称)。它返回一个与资产注册表一起解决的承诺:

    Copy复制
    this.titlesRegistry = await this.bizNetworkConnection.getAssetRegistry('net.biz.digitalPropertyNetwork.LandTitle');
    

    下一步是创建一些资产(_bootstrapTitles在代码中查找方法

    工厂样式模式用于创建资产。工厂从businessNetworkDefinition获得,用于创建业务网络中定义的所有类型的实例。请注意使用名称空间和资产名称。然后我们可以设置这个资产的属性。这里的标识符(firstName lastName)与模型中定义的属性匹配。

    Copy复制
    let factory = this.businessNetworkDefinition.getFactory();
    owner = factory.newResource('net.biz.digitalPropertyNetwork', 'Person', 'PID:1234567890');
    owner.firstName = 'Fred';
    owner.lastName = 'Bloggs';
    

    我们现在有一个人!现在我们需要一个土地所有权。请注意业主如何被指定为我们刚创建的人。(在实际的示例代码中,我们通过两次代码创建landTitle1和landTitle2)。

    Copy复制
    let landTitle2 = factory.newResource('net.biz.digitalPropertyNetwork', 'LandTitle', 'LID:6789');
    landTitle2.owner = owner;
    landTitle2.information = 'A small flat in the city';
    

    我们现在创建了一个需要存储在注册表中的土地所有权。

    Copy复制
    await this.titlesRegistry.addAll([landTitle1, landTitle2]);
    

    这是使用API​​添加多个标题,这会返回在添加资产时解决的承诺。我们需要做的最后一件事是添加Person,Fred Bloggs。由于这是“参与者”,因此使用getParticipantRegistry API。

    Copy复制
    let personRegistry = await this.bizNetworkConnection.getParticipantRegistry('net.biz.digitalPropertyNetwork.Person');
    await personRegistry.add(owner);
    

    将资产列入注册表中

    在示例应用程序中,这是以不同的方法处理的list()与放置资产相同的设置是必需的,所以在我们需要获取资产注册表之前,我们称之为getAll()API。这将返回一个对象数组。

    Copy复制
    let registry = await this.bizNetworkConnection.getAssetRegistry('net.biz.digitalPropertyNetwork.LandTitle');
    let aResources = await registry.getAll();
    let table = new Table({
        head: ['TitleID', 'OwnerID', 'First Name', 'Surname', 'Description', 'ForSale']
    });
    let arrayLength = aResources.length;
    for (let i = 0; i < arrayLength; i++) {
        let tableLine = [];
        tableLine.push(aResources[i].titleId);
        tableLine.push(aResources[i].owner.personId);
        tableLine.push(aResources[i].owner.firstName);
        tableLine.push(aResources[i].owner.lastName);
        tableLine.push(aResources[i].information);
        tableLine.push(aResources[i].forSale ? 'Yes' : 'No');
        table.push(tableLine);
    }
      // Put to stdout - as this is really a command line app
    return table;
    

    其中大部分不是Hyperledger Composer API代码 - 但它显示了如何访问已返回的对象的详细信息。在这一点上,值得再看看这个模型。

    Copy复制
    asset LandTitle identified by titleId {
      o String   titleId
      o Person   owner
      o String   information
      o Boolean  forSale   optional
    }
    
    participant Person identified by personId {
      o String personId
      o String firstName
      o String lastName
    }
    

    您可以看到如何以非常简单的方式访问所有者和标题信息。

    提交交易

    我们需要做的最后一件事是提交交易。这是模型文件中事务的定义:

    Copy复制
    transaction RegisterPropertyForSale identified by transactionId{
      o String transactionId
      --> LandTitle title
    }
    

    该交易在这里有两个字段,一个trandsactionId,以及对应该提交出售的土地所有权的引用。第一步是访问登陆注册地的标题,并找回我们要提交出售的具体土地所有权。

    Copy复制
    let registry = await this.bizNetworkConnection.getAssetRegistry('net.biz.digitalPropertyNetwork.LandTitle');
    await registry.get('LID:1148');
    

    getAssetRegistry调用现在应该看起来有点熟悉,get API用于获取特定的土地标题。下一步是创建我们想要提交的事务。

    Copy复制
    let serializer = this.businessNetworkDefinition.getSerializer();
    
    let resource = serializer.fromJSON({
      '$class': 'net.biz.digitalPropertyNetwork.RegisterPropertyForSale',
      'title': 'LID:1148'
    });
    
    await this.bizNetworkConnection.submitTransaction(resource);
    
    

    我们需要做的是创建一个'序列化器'。这是能够创建一个资源 - 这个资源然后传递给submitTransaction API。请注意,事务JSON与模型文件中指定的结构匹配。


    2. 编写Web应用程序

    要与已部署的业务网络进行交互,Web应用程序应该创建REST API调用。要为业务网络创建自定义REST API,请使用该composer-rest-server命令。

    要创建可与REST API交互的骨架Angular应用程序,请使用该yo hyperledger-composer命令。

    请按照开发者教程中关于如何使用composer-rest-server和Angular生成器的例子

    从业务网络存档(.BNA)生成Angular应用程序

    构建Angular应用程序的流程如下所示:


    如果您已经拥有Business Network Archive并希望构建骨架Angular应用程序,请使用以下参考说明,如果您想全面了解如何从头开发BNA并从此构建应用程序,请参阅开发人员教程

    先决条件

    • 您将需要Hyperledger Composer 开发工具才能运行Angular生成器。
    • 您想要部署的业务网络存档(.BNA)。

    1.启动在本地机器上运行的Hyperledger Fabric

    如果您已经安装了开发工具,则将安装Hyperledger Fabric。

    前往fabric-dev-servers目录并启动Hyperledger Fabric。如果您使用了我们的开发工具安装指南,以下代码是一个示例:

    Copy复制
    cd ~/fabric-dev-servers
    ./startFabric.sh
    ./createPeerAdminCard.sh
    

    这也将创建一个PeerAdmin.card文件,它需要修改在部署的同位体上运行的代码。

    您可以随时通过运行以下命令列出您已安装的所有卡:

    Copy复制
    composer card list
    

    2.准备Hyperledger Fabric对等体

    为了将业务网络存档安装到Hyperledger Fabric网络上,您需要将业务网络安装到对等设备上。建议您从一个干净的目录开始。将您的BNA移入该目录并将终端目录更改为该目录。

    您需要拥有业务网络存档才能执行此操作,下面您可以看到一个示例tutorial-network以及用于部署的“PeerAdmin”卡。

    Copy复制
    composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna
    

    3.在Hyperledger Fabric上启动您的业务网络

    我们将使用该composer network start命令启动业务网络,我们将需要使用我们的PeerAdmin卡来完成此操作。我们还需要在我们的网络上创建用户,我们将使用“管理员”用户名和密码开始。

    以下是使用tutorial-networkBNA 的示例

    Copy复制
    composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1
    

    这将为业务网络创建一个“管理员”卡,在前面的例子中就是这样 admin@tutorial-network.card

    请注意:admin用户名和adminpw密码是针对为开发者教程中部署的Hyperledger Fabric实例配置的特定Hyperledger Fabric标识。如果您已从头开始配置Hyperledger Fabric实例,则这些身份详细信息将有所不同。

    4.安装“管理员”卡准备好使用

    接下来我们将采用我们刚刚制作的管理卡,并将其导入以用于您的业务网络。

    Copy复制
    composer card import --file admin@tutorial-network.card
    

    5.启动REST服务器并生成Swagger API文档

    导航到您的目录并运行该composer-rest-server命令。

    Copy复制
    composer-rest-server
    
    • 输入admin @ tutorial-network作为卡片名称。确保不要添加.card扩展名。
    • 询问是否在生成的API中使用名称空间时,请选择不使用名称空间。
    • 当询问是否保护生成的API时选择否。
    • 当询问是否启用事件发布时,选择是。
    • 当被问及是否启用TLS安全时,请选择否。

    剩下的服务器将在http:// localhost:3000 / explorer上生成并可用

    6.生成Angular应用程序

    Angular应用程序需要运行其他服务器才能连接到Fabric实例。确保您在执行此操作时已在后台运行REST服务器。运行Yeoman生成器时,您还需要与.BNA文件位于同一目录中。

    Copy复制
    yo hyperledger-composer
    

    按照下面的内容输出匹配。

    Copy复制
    Welcome to the Hyperledger Composer project generator
    ? Please select the type of project: Angular
    You can run this generator using: 'yo hyperledger-composer:angular'
    Welcome to the Hyperledger Composer Angular project generator
    ? Do you want to connect to a running Business Network? Yes
    ? Project name: [insert]
    ? Description: Hyperledger Composer Angular project
    ? Author name: [insert]
    ? Author email: [insert]
    ? License: Apache-2.0
    ? Name of the Business Network card: admin@tutorial-network
    ? Do you want to generate a new REST API or connect to an existing REST API?  Connect to an existing REST
     API
    ? REST server address: http://localhost
    ? REST server port: 3000
    ? Should namespaces be used in the generated REST API? Namespaces are not used
    Created application!
    

    生成的应用程序将位于Project name上面输入的子目录内

    最后进入这个目录并运行应用程序,运行:

    Copy复制
    npm start
    

    它将在http:// localhost:4200上可用



    3. 订阅活动

    Node.js应用程序可以通过使用composer-client.BusinessNetworkConnection.onAPI调用来订阅来自业务网络的事件事件在业务网络模型文件中定义,并由事务处理函数文件中的指定事务处理。有关发布事件的更多信息,请参阅发布事件

    在你开始之前

    在应用程序可以订阅事件之前,您必须已经定义了一些事件以及将发出它们的事务。业务网络也必须部署,并且您必须具有可连接到它的连接配置文件。

    程序

    1. 应用程序必须发送特定的API调用以订阅业务网络中事件发出的事务。目前,订阅事件的应用程序将接收所有发出的事件。API调用应采用以下格式:
    Copy复制
    businessNetworkConnection.on('event', (event) => {
        // event: { "$class": "org.namespace.BasicEvent", "eventId": "0000-0000-0000-000000#0" }
        console.log(event);
    });
    

    这包括BasicEvent发布事件文档中创建的一个事件eventId属性总是transactionId与发送事件的事务相同,并在表单中附加一个数字"transactionId": "<transactionId>#number"


    展开全文
  •  欢迎来到Hyperledger作曲家Hyperledger Composer是一个广泛的,开放的开发工具集和框架,可以使开发区块链应用程序变得更容易。我们的主要目标是加快实现价值的时间,并使您更容易将区块链应用程序与现有业务系统...

    Hyperledger Composer使用教程

     

    基本概念介绍

    1. 欢迎来到Hyperledger作曲家

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

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

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

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

     

    Hyperledger Composer如何在实践中工作?

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

    · 资产:房屋和房源

    · 参与者:买家和房主

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

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

     

    2. Hyperledger Composer中的重要概念

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

    Hyperledger Composer组件

    您可以使用称为Hyperledger Composer Playground的基于浏览器的用户界面体验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由以下高级组件组成:

    · 执行运行时

    · 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应用程序的“我的商业网络”屏幕上看到PeerAdmin@hlfv1您使用该createPeerAdminCard脚本创建的卡片:如果您没有看到该卡片,则可能没有正确启动您的运行时间!

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

     

    创建游乐场教程

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

    第一步:打开Hyperledger Composer游乐场

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

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

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

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

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

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

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

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

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

    第三步:连接到商业网络

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

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

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

     

    第四步:添加模型文件

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

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

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

     

    点击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函数表达业务网络的逻辑。这些功能在交易提交处理时自动执行。

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

     

    点击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选项卡开始。

     

    第九步:创建参与者

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

    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运行时中定义。

     

    注销业务网络

    现在交易已成功运行,我们应该注销商业网络,最终在我们开始的“ 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 .

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

    第四步:部署业务网络

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

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

    检索正确的凭证

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

    部署业务网络

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

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

    composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna

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

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

    composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --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 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.选择 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.输入 admin@tutorial-network 为商业网卡。

    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 tutorial-network@0.0.2.bna

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

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

    1切换到终端,将目录切换到包含该文件夹的文件夹tutorial-network@0.0.2.bna

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

    composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.2.bna

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

    composer network upgrade -c PeerAdmin@hlfv1 -n tutorial-network -V 0.0.2

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

    composer network ping -c admin@tutorial-network | grep Business

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

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

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

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

    composer-rest-server

    3.输入admin@tutorial-network卡名称。

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

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

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

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

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

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

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

     

    在继续之前,我们需要创建一些数据,以充分展示查询。使用提供的示例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操作。请注意,查询的描述(我们在模型定义中定义的)显示在右侧。

     

    展开selectCommodities查询。

    点击“试用”按钮。

     

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

     

    执行筛选的REST查询

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

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

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

    3.点击“试用”。

     

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

     

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

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

     

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

     

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

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

     

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

     

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

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

     

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

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

     

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

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

     

    恭喜!

    做得好,你现在已经完成了这个教程,我们希望你现在可以更好地了解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

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

     


    展开全文
  • Hyperledger Fabric三种开发环境的介绍 1. Hyperledger Fabric本地开发环境 缺点: MacOS, Windows,Ubuntu安装方法不同, 需要手动安装, 版本容易冲突,安装时间较长,对初级程序员来说存在一定的难度。 2. ...

    Hyperledger Fabric三种开发环境的介绍

    1. Hyperledger Fabric本地开发环境

    Hyperledger Fabric

    缺点:
    MacOS, Windows,Ubuntu安装方法不同, 需要手动安装, 版本容易冲突,安装时间较长,对初级程序员来说存在一定的难度。

    2. Hyperledger Fabric虚拟机开发环境

    Hyperledger Fabric VM

    缺点:不便于代码开发和调试

    3. Hyperledger Fabric 混合式开发环境

    代码的开发和调试在本地, 环境的运行在虚拟机里。

    Hyperledger Fabric mixed

    优点:可以自动化脚本脚本安装,较快,并与生产环境相同。

    视频教程

    我录制了一段Hyperledger Fabric的环境说明,供你参考。点击观看

    展开全文
  • 在 IBM 中国开发中心的十年工作期间带领了 IBM MQ、Kubernetes、微服务、Hyperledger Fabric 等相关产品和技术的研发工作,并且积累了丰富的银行、金融、政府、零售、制造、医疗、能源等行业的企业客户项目经验。...
  • 目录 Fabric开发环境搭建 更新说明 教程环境及软件版本 Docker 安装Docker 配置用户组 配置Aliyun Docker加速器 安装docker-compose Go ...
  • 混合式开发环境: 主机安装:Virtual Box, Vagrant,Visual Studio 虚拟机安装Docker, Node.js, Curl, Fabric工具。 主机安装软件 下载Virtual Box 下载Vagrant (用于创建和管理虚拟机环境) 下载Visual ...
  • Fabric开发环境搭建 Auther:ljo0412@live.com Fabric开发环境搭建 教程环境及软件版本 Docker 安装Docker 配置用户组 配置Aliyun Docker加速器 Go 下载源码 安装源码 Node.js &amp;amp;amp;&amp;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 627
精华内容 250
关键字:

区块链hyperledger开发