fabric部署调用合约示例

embedded/2024/10/19 15:42:59/

一 打包智能合约

①进入fabric-samples文件夹下的chaincode/fabcar/go目录下执行
GO111MODULE=on go mod vendor下载依赖(文件夹下已经有go.mod,不需要使用go mod init生成该module文件)
②进入到test-network文件下使用以下命令将二进制文件添加到cli路径:
export PATH=${PWD}/../bin:$PATH
③还需要设置FABRIC_CFG_PATH路径指向fabric-samples中的core.yaml文件,命令如下:
export FABRIC_CFG_PATH=$PWD/../config/
④检查peer命令是否可以使用:
peer version
⑤打包智能合约
#../chaincode/fabcar/go/路径保证准确,fabcar_1.0自定义命名
peer lifecycle chaincode package fabcar.tar.gz --path ../chaincode/fabcar/go/ --lang golang --label fabcar_1.0 

二 安装、批准、打包好的链码

①设置允许org1操作peer cli的环境变量
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 lifecycle chaincode install fabcar.tar.gz
②当前组织批准同意链码定义
export CC_PACKAGE_ID=fabcar_1.0:3cfcf67978d6b3f7c5e0375660c995b21db19c4330946079afc3925ad7306881
​
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

此时检查合约定义是否满足策略
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json
Org2MSP这里显示未同意合约定义
那么需要进入Org2中的环境配置中重复合约安装并同意合约定义

③切换到组织二
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
​
#安装智能合约
peer lifecycle chaincode install fabcar.tar.gz
④当前组织同意批准同意链码定义
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

此时检查合约定义是否满足策略
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

三 部署调用智能合约

提交智能合约到通道
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --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
①检查合约是否提交到通道
peer lifecycle chaincode querycommitted --channelID mychannel --name fabcar --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

②设置ca环境变量
export org1_CertFiles=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export org2_CertFiles=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
③安装智能合约
peer lifecycle chaincode install fabcar.tar.gz
④初始化智能合约
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 fabcar --peerAddresses localhost:7051 --tlsRootCertFiles $org1_CertFiles --peerAddresses localhost:9051 --tlsRootCertFiles $org2_CertFiles -c '{"function":"InitLedger","Args":[]}'

⑤调用智能合约,查询所有汽车
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 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 fabcar --peerAddresses localhost:7051 --tlsRootCertFiles $org1_CertFiles --peerAddresses localhost:9051 --tlsRootCertFiles $org2_CertFiles -c '{"function":"CreateCar","Args":["CAR10","GEELY","Borui","Blue","LuoJiaCheng"]}'

⑧查询刚新增的车辆
peer chaincode query -C mychannel -n fabcar -c '{"Args":["QueryCar","CAR10"]}'

⑨更改刚新增车辆CAR10的车主为"LiNu"
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 fabcar --peerAddresses localhost:7051 --tlsRootCertFiles $org1_CertFiles --peerAddresses localhost:9051 --tlsRootCertFiles $org2_CertFiles -c '{"function":"ChangeCarOwner","Args":["CAR10","LiNu"]}'

⑩再次查看CAR10信息看是否修改车主成功
peer chaincode query -C mychannel -n fabcar -c '{"Args":["QueryCar","CAR10"]}'


http://www.ppmy.cn/embedded/35420.html

相关文章

unity生成随机表元素间隔距离相同的点

#region 生成随机点 float minX -800f; float maxX 800f; float minY -400f; float maxY 400f; // 计算相邻点之间的间距 float distanceBetweenPoints 500f; // 生成指定数量的点…

jmeter后置处理器提取到的参数因为换行符导致json解析错误

现象: {"message":"JSON parse error: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Ill…

vant H5 地址编辑框

vant H5 地址编辑框 效果图&#xff1a; 上代码&#xff1a; <!-- 地区选择 --> <template><div class"page-content"><van-fieldv-model"formNationaAll"is-linkreadonlyrequiredname"国家/地区"label"国家/地…

pptx 文件版面分析-- python-pptx(python 文档解析提取)

安装 pip install python-pptx -i https://pypi.tuna.tsinghua.edu.cn/simple --ignore-installedpptx 解析代码实现 from pptx import Presentation file_name "rag_pptx/test1.pptx" # 打开.pptx文件 ppt Presentation(file_name) for slide in ppt.slides:#pr…

上海计算机学会2021年1月月赛C++丙组T2康托表

题目背景 康托是一名数学家&#xff0c;他证明了一个重要的定理&#xff0c;需要使用一张表&#xff1a; 这个表的规律是&#xff1a; 从上到下&#xff1a;每一行的分子依次增大&#xff1b;从左到右&#xff1a;每一列的分母依次增大。 康托以一种不重复、不遗漏的方式&am…

AIGC-音频生产十大主流模型技术原理及优缺点

音频生成(Audio Generation)指的是利用机器学习和人工智能技术&#xff0c;从文本、语音或其他源自动生成音频的过程。 音频生成行业是AIGC技术主要渗透的领域之一。AI音频生成行业是指利用人工智能技术和算法来生成音频内容的领域。按照输入数据类型不同可以分为&#xff1a;根…

一起了解开源自定义表单的优势表现

随着社会的进步和科技的发展&#xff0c;越来越多的中小企业希望采用更为先进的软件平台&#xff0c;助力企业实现高效率的流程化管理。低代码技术平台、开源自定义表单已经慢慢走入大众视野&#xff0c;成为一款灵活、高效的数字化转型工具。流辰信息专注于低代码技术平台的研…

第08章 IP分类编址和无分类编址

8.1 本章目标 了解IP地址的用途和种类了解分类编址和无分类编址区别掌握IP地址、子网掩码、网关概念及使用掌握子网划分及超网划分方法掌握无分类编址的改变和使用 8.2 IP地址的用途和种类 分类编址&#xff1a;造成地址的浪费&#xff0c;以及地址不够用&#xff1b;无分类编…