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

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

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

了解Fabcar链码

现在是时候看一下Fabcar链码。概括地说,链码是在结构网络内部执行的(在支持对等体上)。它是所有参与者都同意的业务逻辑所在的位置,并且在满足条件时执行。在生产中,只有在调用链代码时才会更新分类帐。

 

链码在fabric-samples / chaincode / fabcar / go /中。 此链代码以Go编写并遵循Hyperledger Fabric中定义的特定模式。 在本文中,我们只关注我们感兴趣的部分,即数据结构,Init()和Invoke()函数,以及一些将由Invoke()调用的函数。 这些函数的名称以小写字母开头。

数据结构

由于FabCar是分类帐中的“数据库”,因此数据的结构如下。

Init()

 

这是Hyperledger Fabric链代码中所需的特定功能。 在Fabric网络中实例化链代码时执行Init()。

我们可以使用此Init()设置尽可能多的初始状态。 一般情况系,我们通常将其留空,并在外部调用另一个函数。 我们稍后在此链代码中调用的函数是initLedger()。 请参阅“4”中的步骤8。 启动基本网络并启动FabCar Chaincode“部分。

Invoke()

 

这是Hyperledger Fabric链代码中所需的另一个特定功能。 Invoke()通常在调用链代码时定义一些进一步的操作(函数)。 它通常遵循这样的模式。

 

从代码中我们了解到,当调用chaincode时,需要一个参数列表。 第一个参数始终是“funtion”,而余下的是“args”,即“funtion”的参数列表。

 

总共定义了五个函数:

 

  1. queryCar

  2. initLedger

  3. createCar

  4. queryAllCars

  5. changeCarOwner

函数名称是非常直观,可以直接告诉您在调用此函数后将执行的操作。


initLedger()

 

initLedger()将10组汽车数据预加载到分类帐中。 在这里,我们可以看到数据在使用关键CARx(第113行)作为值放入分类帐之前被“stringified”。 更新分类帐的API是PutState()。

 

此函数不需要额外的参数,只执行一次。 重复运行它没有意义。 当我们设计客户端应用程序时,我们不会对此功能包含任何操作。

queryAllCars()

queryAllCars()只是迭代存储在分类帐中的记录并将它们放入格式化结果中。 此功能不需要参数。 从分类帐中检索数据的API是GetStateByRange()(第140行)。

 

queryCar()

querCar()允许基于CarID对单个汽车进行查询。

 

正如预期的那样,需要一个参数CarID,它用于使用GetState()从分类账中检索数据(第91行),返回结果。

createCar()

createCar()用于将新的汽车记录添加到分类帐中。

 

由于这是一项新记录,所有信息都是预期的。5个参数列表与所需字段匹配:carid、maker、model、colour和owner。使用putstate()(第130行)将数据串化并放入分类帐。

 

changeCarOwner()

changeCarOwner()可以更改CarID指定的汽车的所有者。

 

两个参数,即CarID和所有者。 此更新通过PutState()完成(第191行)。

 

这就是该部分的内容。 我们省略了Hyperledger Fabric链代码的其他结构要求,但上述功能足以让我们继续进行一些链代码操作演示。

 

使用CLI演示Chaincode函数

在这里,我们开始演示链代码是如何工作的,或者更具体地说,是在查询或调用链代码时会发生什么。

 

我们使用CLI容器。 所有命令都是从CLI发出的。 CLI的设置是通过适当的证书设置向Peer发出命令。

 

以下是演示的步骤:

 

  1. 查询分类帐中的所有汽车信息;

  2. 通过CarID查询特定汽车信息;

  3. 添加一台新车的详细信息;

  4. 再次查询分类帐中的所有汽车信息;

  5. 将汽车的所有者更改为其他人;

  6. 再次查询汽车信息并看到所有权更改已完成;

假设我们已经使用./startFabric.sh设置了网络。 仔细检查共有六个容器在运行。

第1步:查询所有车辆记录

$ docker exec cli peer chaincode invoke -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

第2步:通过CarID查询特定汽车信息

 

$ docker exec cli peer chaincode invoke -C mychannel -n fabcar -c '{"Args":["queryCar","CAR4"]}'

第3步:添加一辆新车信息

 

$ docker exec cli peer chaincode invoke -C mychannel -n fabcar -c '{"Args":["createCar""CAR12""Honda""Accord""black""Tom"]}'

第4步:再次查询所有汽车信息

 

$ docker exec cli peer chaincode invoke -C mychannel -n fabcar -c ‘{“Args”:[“queryAllCars”]}’

第5步:更改CAR4的所有权

 

$ docker exec cli peer chaincode invoke -C mychannel -n fabcar -c ‘{“Args”:[“changeCarOwner”, “CAR4”, “KC”]}’

第6步:再次查询CAR4

 

$ docker exec cli peer chaincode invoke -C mychannel -n fabcar -c ‘{“Args”:[“queryCar”,”CAR4"]}’

演示到此结束。我们已经演示了如何使用CLI与实例化的链代码进行交互。在现实操作中,我们将使用客户端应用程序而不是CLI。在下一节中,我们将研究Fabcar客户机应用程序。

猜你喜欢

区块链研究实验室 | 深入了解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