Fabric中fabcar项目直接运行以及与SDK的交互测试


前言

之前的文章已经详细讲了如何创建、部署、运行fabcar的go智能合约,但是如何使用sdk与智能合约交互却没有说,本节将详细介绍这部分内容。

fabcar项目启动

  1. 进入fabcar目录:
cd /root/go/src/github.com/hyperledger/fabric-samples/fabcar
  1. 查看是否有docker容器在运行
docker ps -l
  1. 如果有容器,则删除所有
docker rm -f $(docker ps -aq)
  1. 启动测试网络和fabcar项目
./startFabric.sh 
  1. 启动成功;如果启动失败则删除所有docker镜像并重启系统

SDK与fabcar链上数据交互

java

  1. 进入fabcar下的java目录
cd java
  1. 运行maven项目
mvn test
  1. 使用sdk查询结果和直接在命令行查询的结果相同:peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

javascript

参考

https://codeantenna.com/a/TJPiTzNCVs

常见问题

1. Command 'peer' not found

cd /root/go/src/github.com/hyperledger/fabric-samples/test-network
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/

2. Cannot run peer because cannot init crypto, specified path “xxx/fabric-samples/config/msp“

错误原因:直接在命令行使用peer命令查询fabcar出现错误:peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

错误详情:InitCmd -> ERRO 001 Cannot run peer because cannot init crypto, specified path "/root/go/src/github.com/hyperledger/fabric-samples/config/msp" does not exist or cannot be accessed: stat /root/go/src/github.com/hyperledger/fabric-samples/config/msp: no such file or directory

解决方案:原因是没有配置环境变量,以网络中的某个组织的某个节点进行交互。比如配置环境变量成为Org1 Peer0的角色

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 query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'