区块链研究实验室 | 深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part1)

  • 时间:
  • 浏览:155
  • 来源:区块链技术网

概述

Hyperledger Fabric附带了许多应用示例,其中FabCar是一个完整的端到端应用程序。完整的区块链应用程序有两部分代码:在Fabric网络内部署和执行的Chaincode部分,客户端应用程序是外部世界与Fabric网络上部署的链代码交互的地方。

虽然官方文件提供了关于这两个部分的非常详细的讨论,但这文章计划对这个例子给出一些说明和解释。我们首先将应用程序描述为一个完整的图片,然后逐一深入了解整个图片的每个部分。从此我希望读者能够全面了解如何构建典型的业务区块链应用程序。

我在这里使用的代码基于Hyperledger Fabric 1.4版。与以前的版本相比,有一些显着的改进,特别是在客户端应用程序方面。你可以看看这个新版本。

 

FabCar的整体框架图

FabCar是存储在Fabric网络分类账中的汽车记录数据库。我们可以将其视为存储数据的传统数据库:它就像一个表,用汽车标识符(CarID)索引,并记录该汽车的制造商,型号,颜色和所有者的信息。

 

这些数据存储在账本内的世界状态数据库中,与数据的交互是通过链码进行的。 FabCar附带一个Chaincode,包含可以与分类帐中存储的数据交互的功能。它们用于数据库(分类帐)启动,查询和更新。仅通过这些链代码函数查询或更新世界状态,并且任何更新都记录在分类帐内的区块链中作为防篡改记录。

 

到目前为止,上面提到的操作都是发生在Fabric网络内部。应用程序仅在与外部世界连接时才有用。外部应用是客户端应用程序。客户端应用程序通过软件开发工具包(SDK)与Fabric网络和部署的链代码进行交互。 Hyperledger Fabric目前为Java和Node SDK提供官方支持,而其他编程框架如Go和Python也可以使用。

 

客户端应用程序被编码以匹配链码中定义的函数。 FabCar中有四组在Node中运行的JavaScript代码,用于用户注册和链代码交互。

应用程序部分(Client Application和Chaincode)独立于基础结构(Fabric网络)。从理论上讲,应用程序可以部署在任何Fabric网络部署中,无论是单个组织还是复杂的多个组件。我们不对Chaincode部分的任何“基础设施”信息进行编码。我们只是指定何时安装和实例化Chaincode有关基础结构的通道名称。在客户端应用程序方面,我们还必须在代码中指定对等方,通道ID(名称)和链代码ID(名称),以便与Fabric网络中正确部署的链代码对话。

 

整体如下图:

 

现在我们已经准备好将这个图分成几部分,深入了解每一个图。

 

基础网络

FabCar应用程序可以在任何Fabric网络上运行。在演示中(如官方教程中所述),我们在基础网络上运行FabCar。

 

基本网络设置保存在fabric-samples / basic-network /目录中。当我们检查内容时,我们会看到常见的两个YAML文件(crypto-config.yaml和configtx.yaml),用于组织的设置,每个参与者的证书和配置事务。基本网络还附带文件夹config /和crypto-config /,预装了一组生成的文件。为了简化整个设置,我们不成它们,只需使用config /和crypto-config /中提供的那些证书和配置事务。

根据设计,物理网络组成是:

  1. Fabric CA(ca.example.com):整个基本网络的证书颁发机构(CA)。我们稍后将使用此Fabric CA生成客户端认证。

  2. Orderer(orderer.example.com):基本网络中只有一个订购者。

  3. Peer(peer0.org1.example.com):基本网络中只有一个组织(Org1),Org1中只有一个对等体。

这几乎是规模最小的Fabric网络,足以测试业务区块链应用程序。


如果我们看一下docker compose yaml文件(docker composer.yml),它用于为网络提供节点(容器),我们会看到除上述三个容器之外定义的另外两个容器

  • CouchDB:它被Peer用作世界状态数据库。

  • CLI:此命令行界面(CLI)容器用于演示期间的链代码交互。它适用于链代码的演示和故障排除,并且在生产中不需要,因为交互主要来自客户端应用程序。

脚本

一些shell脚本随基础网络一起提供:

 

./start.sh:如果以前打开任何容器,此脚本首先关闭所有容器。然后它将调出四个容器(CA,Orderer,Peer和CouchDB)。容器启动后,它会执行通道mychannel的创建,并将唯一的对等点连接到mychannel。通过建立此基础架构,基础网络可以用于任何链代码操作(安装,实例化等)。

请注意,我们没有直接运行./start.sh。我们将通过FabCar中的另一个脚本(./startFabric.sh)来调用它。我们将在下一节讨论这个问题。

./stop.sh:此脚本只是停止docker-compose文件中定义的所有容器。完成整个演示后我们将使用它。

./teardown.sh:此脚本进一步删除所有已停止的容器。它还会删除链代码容器(我们稍后会看到)镜像。

下图就是运行./start.sh后基础网络设置的样子。

我们在启动基本网络后,我们可以看到有四个容器正在运行。

 

运行./start.sh以显示基础网络

 

在./start.sh之后运行了四个容器

 

建立基础网络,启动Fabcar链码

出于演示目的,基础网络由FabCar目录中的脚本生成,即fabric-samples / fabcar /。该脚本是./startFabric.sh。

 

我们现在检查运行脚本后会发生什么。以下是此脚本执行的任务流程:

 

  1. 设置我们是使用Go还是Node chaincode。默认使用Go。

     

  2. 删除文件夹hfc-key-store /。这是客户端应用程序的证书在1.4版之前存储的位置。

  3. 转到basic-network /目录并执行./start.sh。这就是基础网络的发展方向。执行./start.sh后,如前一部分所述,节点(容器)在网络中使用mychannel设置运行。

  4. 打开CLI容器。现在我们还有一个用于链代码交互的容器。

  5. 使用CLI调出FabCar链代码。这包括三个步骤

     

  6. 将链代码安装到peer(chaincode id是fabcar)

     

  7. 使用认可政策在mychannel中实例化链码fabcar。该政策规定需要Org1或Org2成员的认可。虽然我们在基础网络中只有Org1,但这个政策仍然很满意。

  8. 调用不带参数的函数initLedger()。这涉及到链码的内容。根据链码,此功能将10组汽车数据预加载到分类帐中。我们将在下一节中看到更多内容。

这些是./startFabric.sh执行的任务。执行后,我们对网络有了更大的了解。

 

以下是我们在运行./startFabric.sh脚本后看到的内容。 在上一节中与./start.sh类似的输出之后,我们看到了一个新的CLI容器被打开,并且安装并调用了链代码。

 

运行./startFabric.sh

 

除了基础网络的四个容器之外,我们现在看到另外两个容器:一个CLI和一个dev-peer0.org1.example.com-fabcar-1.0。 这在链代码实例化后出现。

 

另外两个容器正在运行(前两个)

这是第1部分。在下一部分中,我们将详细研究FabCar链代码,并使用CLI模拟链代码功能。 敬请关注。

 

原作者:KC Tam


猜你喜欢

区块链研究实验室 | 深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part1)

概述HyperledgerFabric附带了许多应用示例,其中FabCar是一个完整的端到端应用程序。完整的区块链应用程序有两部分代码:在Fabric网络内部署和执行的Chai

2021-11-29

深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part2)

这是本系列的第2部分。在第1部分中,我们介绍了Fabcar是什么以及应用程序架构。在本部分中,我们将介绍链代码,了解它的结构并使用CLI模拟链代码函数的流。区块链研究实验室|深

2021-11-29

深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part3)

我们已经讲解完了FabCar应用的Chaincode部分。现在我们继续前进到客户端部分。我们在第2部分中介绍如何使用SDK与Chaincode进行交互。区块链研究实验室|深入了

2021-11-29

这30个以太坊开发示例,让你成为80万都挖不走的区块链人才!

30个以太坊开发示例>*2018年已过了大半,币圈跌跌荡荡,而链圈的人在等待凤凰涅槃,熊市专心做技术,牛市才能一展身手、冲破云霄!*>>*本文主要告诉你,如何

2021-11-29

Dune Analytics入门教程(含示例)

DuneAnalytics是区块链数据研究中的超级强大工具>*链接:https://medium.com/zengo/dune-analytics-introductio

2021-11-28