
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实践至此结束
欢迎讨论与批评指正!!!
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月30日 18时10分10秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
程序设计基础75 tips 广度搜索细节问题
2021-05-08
笨办法学python之数据类型
2021-05-08
笨办法学Python之将对象名的字符串类型,转化成相应对象
2021-05-08
ArduPilot源码极速下载手册(一文告别github慢速问题)
2021-05-08
聊一聊那些应该了解的大佬(飞控,人工智能方向)
2021-05-08
ArduPilot+mavros+gazebo+QGC联合仿真初体验
2021-05-08
px4调试bug--添加mavlink_log_info信息
2021-05-08
redis替换字符串命令
2021-05-08
redis向数组中添加值并查看数组长度
2021-05-08
python3基础梳理11python中模块和包
2021-05-08
JS编写一个函数,计算三个不同数字的大小,按从小到大顺序打印(穷举法)
2021-05-08
jQuery实现轮播图效果
2021-05-08
mybatis中like的注意
2021-05-08
sqlplus的基本使用
2021-05-08
oracle删除表重复数据
2021-05-08
Oracle删除主表数据
2021-05-08
js中两种定时器,setTimeout和setInterval实现验证码发送
2021-05-08
Oracle常用SQL
2021-05-08
技术美术面试问题整理
2021-05-08