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 sudo 或 suroot 来使用它。
· 避免以 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-composer,composer-rest-server 并 Yeoman 加上 generator-hyperledger-composer。最后 3 个不是开发环境的核心部分,但如果您遵循教程或开发与您的商业网络交互的应用程序,它们将非常有用,因此我们现在会安装它们。
请注意,您不应该使用 su 或 sudo 为以下 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
tar -xvf fabric-dev-servers.tar.gz
zip 如果您愿意,也可以使用 A :只需使用上面的代码片段中的命令替换.tar.gz 文件 fabric-dev-servers.zip 并 tar -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”
}
在继续之前,确保两个参与者都存在于交易者视图中!
第十步:创建资产
现在我们有两个交易者参与者,我们需要他们交易的东西。创建资产与创建参与者非常相似。我们正在创建的商品将拥有一个所有者属性,表明它属于交易者,并且 tradeId 是 TRADER1。
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.检查我们的资产已经改变所有权从 TRADER1 到 TRADER2,通过扩大资产数据部分。你应该看到所有者被列为 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.1 为 0.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 的商品。在事务功能中使用时,查询功能非常强大,因为使用查询可以允许事务逻辑设置一组资产或参与者来执行更新或创建删除操作。
我们 selectCommoditiesWithHighQuantity 在 removeHighQuantityCommodities 交易中使用查询。如果您在 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
恭喜,你已经卸载了你的开发环境。要继续开发区块链应用程序,您需要从头开始安装开发工具。