系列文章目录

  1. Fabric2.2在Linux上的部署记录
  2. Fabric2.2测试网络(test-network)的使用记录
  3. 用go编写简单的fabric链码
  4. 将fabric链码部署到测试网络的记录
  5. 利用fabric-gateway-java连接并调用fabric链码

前言

在上一篇文章中记录下了Fabric2.2在Linux上的部署,这篇文章对Fabric的测试网络(test-network)进行实践并作相应记录。

一、测试网络是什么?

根据官方文档的描述,使用测试网络(test-network)可以在本地计算机运行节点、测试链码和应用程序等。不过测试网络只作测试目的,不应作实际生产的网络模板。

二、测试网络的使用

2.1 进入对应文件夹

cd fabric-samples/test-network

2.2 查看network.sh的内容

network.sh用于构建本地的fabric网络,应该多加研究。

#查看常用命令的操作解释
./network.sh -h

2.3 部署测试网络

  • 关闭网络。删除之前创建的docker容器、peer节点、order服务、通道等等。
./network.sh down
  • 启动网络。以默认的方式启动,即包含两个org(各一个peer节点)和一个order节点。
./network.sh up
  • 创建通道。默认通道名字是mychannel,也可通过-c指定通道名字。
./network.sh createChannel c channel1
  • 启动网络和创建通道可合并为一条命令。
./network.sh up createChannel

2.4 部署链码

fabric-samples中提供了多个链码样例,可通过以下命令进行部署。

./network.sh deployCC

deployCC命令部署的链码处于fabric-samples/asset-transfer-basic/chaincode-go,链码名字为basic,链码编写语言为go,详细的链码内容可见这里

2.5 与链码交互

  • 配置环境
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
  • 以org1身份运行
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
  • 调用初始化函数进行初始化
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'

这里利用peer chaincode invoke调用链码中的InitLedger函数,无需参数,调用成功结果如下:

-> INFO 001 Chaincode invoke successful. result: status:200
  • 调用函数查询账本
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

这里利用peer chaincode query调用链码中的查询函数GetAllAssets,无需参数,返回账本中的所有内容,如:

[
  {"ID": "asset1", "color": "blue", "size": 5, "owner": "Tomoko", "appraisedValue": 300},
  {"ID": "asset2", "color": "red", "size": 5, "owner": "Brad", "appraisedValue": 400},
  {"ID": "asset3", "color": "green", "size": 10, "owner": "Jin Soo", "appraisedValue": 500},
  {"ID": "asset4", "color": "yellow", "size": 10, "owner": "Max", "appraisedValue": 600},
  {"ID": "asset5", "color": "black", "size": 15, "owner": "Adriana", "appraisedValue": 700},
  {"ID": "asset6", "color": "white", "size": 15, "owner": "Michel", "appraisedValue": 800}
]
  • 调用函数新增资产
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"CreateAsset","Args":["asset7","blue","20","Klay","777"]}'

这里利用peer chaincode invoke调用链码中的CreateAsset函数,参数为"asset7","blue","20","Klay","777",结果即为新增了该项资产。
可利用查询函数进行单项查询。如下所示:

peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset7"]}'
  • 以上命令也能以org2的身份执行,执行如下命令即可切换到org2:
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
  • 链码中还有其他函数可供调用,详见这里。命令行调用的方法参考上述内容,修改所需调用的函数名字和参数'{"function":"InitLedger","Args":[]}'。修改账本状态的函数利用 peer chaincode invoke进行调用;查询账本的函数利用peer chaincode query进行调用。
  • 测试完毕后,利用./network.sh down关闭网络。

总结

本文简单记录下了Fabric2.2中测试网络(test-network)的使用,想要了解更详细的内容应该参考官方文档并结合链码进行学习。如有不正,请多多指教。

Logo

更多推荐