Hyperledger Fabric教程--运行FabCar应用程序

Hyperledger Fabric教程–运行FabCar应用程序

前期准备:安装二进制文件fabric-ca-client、fabric-ca-server(版本1.5.2,https://github.com/hyperledger/fabric-ca/releases/tag/v1.5.2)

下载好后解压到fabric-samples/bin目录下

一、启动Fabric网络(https://hyperledger-fabric.readthedocs.io/zh_CN/latest/write_first_app.html)

进入fabric-samples/fabcar目录下,执行:

./startFabric.sh javascript

此命令将部署两个peer节点和一个排序节点的Fabric测试网络。我们将使用证书颁发机构(CA)启动测试网络,而不是使用cryptogen工具。我们将使用这些CA的其中一个来创建证书以及一些key,这些加密资料将在之后的步骤中被我们的应用程序使用。startFabric.sh脚本还将部署和初始化在mychannel 通道上的FabCar智能合约的JavaScript版本,然后调用智能合约来把初始数据存储在帐本上。

在这里插入图片描述

startFabric.sh 脚本中调用了fabric-samples/test-network中的network.sh脚本,启动CA服务,设置状态数据库为couchdb,安装链码并调用initLedger函数
在这里插入图片描述

删除存放身份证书的目录
在这里插入图片描述

二、安装应用程序依赖

进入fabric-samples/fabcar/javascript目录下,执行:

npm install

fabric-network类(https://hyperledger.github.io/fabric-sdk-node/release-2.2/module-fabric-network.html):它使得应用程序可以使用身份、钱包和连接到通道的网关,以及提交交易和等待通知。本教程也将使用fabric-ca-client类来注册用户以及他们的授权证书,生成一个fabric-network在后边会用到的合法身份。

三、登记管理员用户

fabric-samples/fabcar/javascript目录下,执行:

node enrollAdmin.js

当我们创建网络的时候,一个管理员用户(admin)被证书授权服务器(CA)创建成了 注册员。我们第一步要使用enrollAdmin.js程序为admin生成私钥、公钥和x.509证书。这个程序使用一个证书签名请求(CSR)——现在本地生成公钥和私钥,然后把公钥发送到CA ,CA会发布会一个让应用程序使用的证书。这三个证书会保存在钱包中,以便于我们以管理员的身份使用CA
在这里插入图片描述

四、注册和登记应用程序用户

fabric-samples/fabcar/javascript目录下,执行:

node registerUser.js

我们可以创建一个新的应用程序用户,它将被用于与区块链交互。现在,我们有了两个独立用户的身份—— admin和appUser ——它们可以被我们的应用程序使用。
在这里插入图片描述

五、查询帐本

在fabric-samples/fabcar/javascript目录下,执行:

node query.js

在这里插入图片描述

加载网络配置信息=>创建一个新的基于文件系统的Wallets实例,用于管理身份=>创建Gateway实例用于连接peer节点=
首先,程序使用Wallet类从文件系统获取应用程序用户身份文件。

const identity = await wallet.get('appUser');

有了身份文件,应用程序就使用Gateway类连接到test-network网络。

const gateway = new Gateway();
await gateway.connect(ccpPath, {
    
    wallet, identity: 'appUser', discovery: {
    
    enabled: true, asLocalhost: true }});

ccpPath 描述了连接配置文件的路径,我们的应用程序将使用该配置文件连接到我们的网络。 连接配置文件从fabric-samples/test-network目录中被加载进来,并解析为JSON文件。Identity提供的Wallet中的身份匹配的标签。

const ccpPath = path.resolve(__dirname, '..', '..', 'test-network','organizations','peerOrganizations','org1.example.com', 'connection-org1.json');

是将应用程序连接到网络中特定的通道mychannel 上。

const network = await gateway.getNetwork('mychannel');

通过 FabCar 智能合约来和账本进行交互。

const contract = network.getContract('fabcar');
const result = await contract.evaluateTransaction('queryAllCars');

evaluateTransaction方法代表了一种区块链网络中和智能合约最简单的交互,它根据配置文件中的定义连接一个节点,然后向节点发送请求,请求内容将在节点中执行。智能合约查询节点账本上的所有汽车,然后把结果返回给应用程序,这次交互没有导致账本的更新。

六、更新帐本

fabric-samples/fabcar/javascript目录下,执行:

node invoke.js

await contract.submitTransaction(‘createCar’, ‘CAR12’, ‘Honda’, ‘Accord’, ‘Black’, ‘Tom’);

submitTransaction比evaluateTransaction 更加复杂。除了跟一个单独的peer进行互动外,SDK 会将submitTransaction 提案发送给在区块链网络中的每个需要的组织的peer。其中的每个 peer将会使用这个提案来执行被请求的智能合约,以此来产生一个建议的回复,它会为这个回复签名并将其返回给SDK。SDK搜集所有签过名的交易反馈到一个单独的交易中,这个交易会被发送给排序节点。排序节点从每个应用程序那里搜集并将交易排序,然后打包进一个交易的区块中。接下来它会将这些区块分发给网络中的每个peer,在那里每笔交易会被验证并提交。最后,SDK 会被通知,这允许它能够将控制返回给应用程序。

猜你喜欢

转载自blog.csdn.net/Myx74270512/article/details/128107703
今日推荐