Hyperledger Fabric 2.0 fabcar查询、插入和更改拥有者实践(fabcar.go)
发布日期:2021-05-08 04:54:15 浏览次数:31 分类:原创文章

本文共 5992 字,大约阅读时间需要 19 分钟。

使用go语言编写的智能合约进行实战(fabcar.go)

本文指令适合于Ubuntu和Centos系统

启动网络(前提是已经搭建Fabric2.0网络)

首先切换到fabric目录下

cd ~/go/src/github.com/hyperledger/fabric

把fabric-samples克隆下来

git clone https://github.com/hyperledger/fabric-samples.git

随后到first-network中使用指令启动网络

cd ~/go/src/github.com/hyperledger/fabric/fabric-samples/first-network ./byfn.sh up

出现下图则搭建完成

下载智能合约依赖

到fabcar的智能合约文件中并下载依赖

cd  ~/go/src/github.com/hyperledger/fabric/fabric-samples/chaincode/fabcar/gogo env -w GOPROXY=https://goproxy.io,directgo env -w GO111MODULE=ongo mod initgo mod vendor

执行完毕后fabcar/go文件夹下多出vendor,这个就是放智能合约依赖包的文件夹

进入cli容器中

docker exec -it cli bash

组织1(Org1)部署智能合约

打包智能合约

peer lifecycle chaincode package fabcar.tar.gz --path github.com/hyperledger/fabric-samples/chaincode/fabcar/go/ --lang golang --label fabcar_1

ls查看当前目录,发现有了一个fabcar.tar.gz文件

安装智能合约(时间会比较久,耐心稍等)

peer lifecycle chaincode install fabcar.tar.gz

成功后返回status:200等信息

当前组织同意合约定义(需要用到上面一部返回的Package id

peer lifecycle chaincode approveformyorg --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name fabcar --version 1 --init-required --package-id fabcar_1:b5e31331cf476adea4e444c824067b68dc0f4cbc3b61bd773c90d5b4d3761a31 --sequence 1 –waitForEvent

此时检查合约定义是否满足策略

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 1 --sequence 1 --output json --init-required

返回

Org2MSP这里显示未同意合约定义
那么需要进入Org2中的环境配置中重复合约安装并同意合约定义

切换环境到Org2

切换环境变量为peer0.org2.example.com的配置

export CORE_PEER_LOCALMSPID="Org2MSP"export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crtexport CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/mspexport CORE_PEER_ADDRESS=peer0.org2.example.com:9051

组织2(Org2)部署智能合约

由于Org1已经打包了智能合约,Org2直接安装就可

peer lifecycle chaincode install fabcar.tar.gz

当前组织同意合约定义

peer lifecycle chaincode approveformyorg --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name fabcar --version 1 --init-required --package-id fabcar_1:b5e31331cf476adea4e444c824067b68dc0f4cbc3b61bd773c90d5b4d3761a31 --sequence 1 –waitForEvent

再次检查合约定义是否满足策略

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 1 --sequence 1 --output json --init-required

返回

过半数组织同意了智能合约定义
那么可以提交智能合约

peer lifecycle chaincode commit -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name fabcar --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --version 1 --sequence 1 --init-required

成功后初始化智能合约

peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --isInit -c '{"Args":["InitLedger"]}'

至此智能合约部署完成

调用智能合约

查询所有汽车

peer chaincode query -C mychannel -n fabcar -c '{"Args":["QueryAllCars"]}'

查询成功结果

查询单部汽车

peer chaincode query -C mychannel -n fabcar -c '{"Args":["QueryCar","CAR0"]}'

查询成功结果
在这里插入图片描述
新增一辆汽车

peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["CreateCar","CAR10","GEELY","Borui","Blue","Yujialing"]}'

查询刚刚新增的车辆

peer chaincode query -C mychannel -n fabcar -c '{"Args":["QueryCar","CAR10"]}'

查询成功返回结果
在这里插入图片描述
更改刚刚新增车辆CAR10的车主为“广东靓仔”

peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["ChangeCarOwner","CAR10","广东靓仔"]}'

再次查看CAR10信息看是否修改车主成功

peer chaincode query -C mychannel -n fabcar -c '{"Args":["QueryCar","CAR10"]}'

在这里插入图片描述
其他用go语言编写的智能合约也是相同的操作
Hyperledger Fabric 2.0的fabcar实践至此结束
欢迎讨论与批评指正!!!

上一篇:RT-Thread Studio下载 安装 导入工程与烧录程序
下一篇:E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年03月30日 18时10分10秒