Fabric中fabcar项目直接运行以及与SDK的交互测试
前言
之前的Fabric智能合约编写,部署,调用文章已经详细讲了如何创建、部署、运行fabcar的go智能合约,但是如何使用sdk与智能合约交互却没有说,本节将详细介绍这部分内容。
fabcar项目启动
- 进入fabcar目录:
cd /root/go/src/github.com/hyperledger/fabric-samples/fabcar
- 查看是否有docker容器在运行
docker ps -l
- 如果有容器,则删除所有
docker rm -f $(docker ps -aq)
- 启动测试网络和fabcar项目
./startFabric.sh
- 启动成功;如果启动失败则删除所有docker镜像并重启系统
SDK与fabcar链上数据交互
java
- 进入fabcar下的java目录
cd java
- 运行maven项目
mvn test
- 使用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"]}'
Either Excellent or Rusty