接上两篇内容,这里实验下First-Application。 
官网示例教程:https://hyperledger-fabric.readthedocs.io/en/latest/write_first_app.html#writing-your-first-application

Fabric-V1.4-First-Application

实验环境:

Centos7.4 CPU:4C、内存:16G、硬盘:50G


笔者使用之前的测试环境,那么在实验前,建议重置后再进行以下操作。

 
  1. ./byfn.sh down
  2. docker rm -f $(docker ps -aq)
  3. docker ps -a (查看)

进入下列目录:

 
  1. cd /usr/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/fabcar
  2. 执行:./startFabric.sh javascript

执行完成如下图: 
Fabric-V1.4-First-Application

进入下一级目录:

 
  1. cd /usr/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/fabcar/javascript
  2. 提前修改:
  3. vi package.json
  4. 把里面1.0.0版本改成1.4.0
  5. npm install(如报错执行下列命令)
  6. npm install --unsafe-perm

执行成功后.

注册admin用户: 
当前文件夹中执行:

 
  1. node enrollAdmin.js

执行完成后如下图,可以看到wallet中的admin相关信息。可通过查看

 
  1. docker logs -f ca.example.com查看输出的log内容。

Fabric-V1.4-First-Application

注册user用户:

 
  1. node registerUser.js

注册完成后如图:

Fabric-V1.4-First-Application

可以看到在:/usr/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/fabcar/javascript/wallet目录中有相关的admin和user1 
的信息。

查询账本,区块链中每个节点都有一个账本副本,那么通过user1来查看:

 
  1. node query.js

结果如图: 
Fabric-V1.4-First-Application


更新账本:

可以通过vim来打开阅读、修改query.js文件,这里修改如下:

 
  1. // Evaluate the specified transaction.
  2. // queryCar transaction - requires 1 argument, ex: ('queryCar', 'CAR4')
  3. // queryAllCars transaction - requires no arguments, ex: ('queryAllCars')
  4. // const result = await contract.evaluateTransaction('queryAllCars');
  5. const result = await contract.evaluateTransaction('queryCar','CAR1');
  6. console.log(`Transaction has been evaluated, result is: ${result.toString()}`);

再次执行:node query.js会发现只显示CAR1:

Fabric-V1.4-First-Application

那么区块链网络包含多个peer,每个peer都维护一份账本副本,并且选择性的维护一个智能合约副本,除此之外,网络还包括一个排序服务。

执行:

 
  1. node invoke.js

来创建一个新车,成功结果如下: 
Fabric-V1.4-First-Application

那么再次查看刚才的交易是否成功,修改query.js来对比: 
Fabric-V1.4-First-Application
比之前的查询多了CAR12,那么单独查询修改之前的代码CAR1为CAR12

再次执行: 
Fabric-V1.4-First-Application

交易这辆Honda: 
可以看到车现在是Tom,那么交易给Jacky 
修改vim invoke.js文件:

 
  1. // await contract.submitTransaction('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom');
  2. await contract.submitTransaction('changeCarOwner', 'CAR12', 'Jacky');

修改完成后执行:

 
  1. node invoke.js
  2. node query.js

显示如下: 
车子已经是Jacky。 
Fabric-V1.4-First-Application


(未完待续)

参考: 
1.https://blog.csdn.net/ASN_forever/article/details/87778013 
2.https://hyperledger-fabric.readthedocs.io/en/latest/developapps/developing_applications.html

相关文章: