在本系列第二篇中,我们介绍了如何创建通道与在通道上启动链码的问题。本篇将探索如何使用Peer客户端与区域链网络通信。
启动测试网络后,可以使用Peer节点CLI与网络进行交互。Peer节点CLI允许您从CLI调用已部署的智能合约、更新通道或安装和部署新的智能合约。
确定当前我们仍处于test-network文件夹下。
接下来,使用以下命令将fabric-samples文件夹下的bin子文件夹下的Peers二进制文件添加到CLI路径:
export PATH=${PWD}/../bin:$PATH
然后,您还需要将FABRIC_CFG_PATH设置为指向Fabric示例存储库中的core.yaml文件:
export FABRIC_CFG_PATH=$PWD/../config/
现在,我们可以设置允许将Peers CLI作为Org1进行操作的环境变量:
# Environment variables for 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/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051
运行以下命令以初始化具有资产的分类帐。(请注意,CLI不访问Fabric网关Peer,因此必须指定每个认可Peer。)
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":[]}'
成功运行后,显示结果如下:
2023-08-26 21:28:12.576 CST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200
现在,您可以从CLI中查询分类帐。运行以下命令以获取已添加到您的渠道分类账中的资产列表:
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
成功调用后,显示结果如下:
[{"AppraisedValue":300,"Color":"blue","ID":"asset1","Owner":"Tomoko","Size":5},{"AppraisedValue":400,"Color":"red","ID":"asset2","Owner":"Brad","Size":5},{"AppraisedValue":500,"Color":"green","ID":"asset3","Owner":"Jin Soo","Size":10},{"AppraisedValue":600,"Color":"yellow","ID":"asset4","Owner":"Max","Size":10},{"AppraisedValue":700,"Color":"black","ID":"asset5","Owner":"Adriana","Size":15},{"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Michel","Size":15}]
当网络成员想要转移或更改分类账上的资产时,会调用Chaincodes。使用以下命令通过调用资产转移(基本)链代码来更改分类账上资产的所有者:
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":"TransferAsset","Args":["asset6","Christopher"]}'
由于资产转移(基本)链代码的背书策略要求交易由Org1和Org2签名,因此链代码调用命令需要使用--peerAddresses标志同时针对peer0.Org1.example.com和peer0.org.example.com。由于为网络启用了TLS,因此该命令还需要使用--tlsRootCertFiles标志引用每个Peer的TLS证书。
调用链代码后,我们可以使用另一个查询来查看调用如何更改区块链账本上的资产。由于我们已经查询了Org1 Peer,因此,我们可以借此机会查询Org2 Peer上运行的链代码。因为命令与Org1非常类似,在此省略列举。
小结
现在,我们已经使用测试网络在成功地在本地机器上部署了Hyperledger Fabric。那么,接下来,我们就可以使用这一基础设施来进一步开发自己的具体的相关解决方案了。如:
- 将自己的智能合约部署到此测试网络;
- 使用Fabric SDK提供的API从客户端应用程序调用智能合约,等等。