fabric部署调用合约示例

一 打包智能合约

①进入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.mzph.cn/pingmian/7086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序个人中心、我的界面(示例四)

微信小程序个人中心、我的界面,九宫格简单布局(示例四) 微信小程序个人中心、我的界面,超简洁的九宫格界面布局,代码粘贴即用。更多微信小程序界面示例,请进入我的主页哦! 1、js代码 Page({…

泛微E9开发 限制整型、日期型、附件型字段的取值范围

1、功能背景 在用户进行输入时,通过控制输入数据的范围来实现实际效果,如上级管理者对下级员工进行年度评分时,只能输入1~100分,现在表单中新增三种类型不同的字段,具体如下所示: 2、展示效果 限制整数的…

StreamingT2V

下面首先是参考的一些博客 https://blog.csdn.net/qq_44681809/article/details/137081515 qustion SDEdit:就是给图片加一点噪声然后再用模型去噪,来获得一个更好的帧,比如去掉伪影和污点 这里的分割为m个24帧的块,块与块之间已经有8帧重叠…

JavaScript注释规范

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃 ,大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端基础路线”,可获…

8个细节决定你的活动策划推广成败-华媒舍

活动策划和推广对于一个成功的活动来说至关重要。许多因素会影响活动的成功与否,以下我将介绍8个关键细节,这些细节能够决定活动的策划与推广的成败。 1. 目标定位 活动策划必须明确目标。你需要确定你的活动是为了推广何种产品或服务,吸引什…

245 基于matlab的MEEMD信号分解及重构算法

基于matlab的MEEMD信号分解及重构算法。MEEMD方法的主要步骤包括:1. 定义多元信号集合,将多个信号进行集合;2. 对多元信号集合进行EEMD分解,得到一组IMFs;3. 将相同IMF进行平均,得到改进的IMFs;…

抖音小店如何快速出单?内行人闭口不提的诀窍,一篇全曝光!

哈喽~我是电商月月 新手做抖店不成功,最大的问题就是不懂技巧,不懂规则,不懂玩法,你基础事项,思维方向都没选好,再怎么努力也别想出单 看下去,新手在开店后不要着急选品,先把这些问…

AI热潮开始退去,财务压力迫使多家硅谷明星初创公司选择退出

曾风光无限的Stability AI已重组并削减业务规模,Inflection AI更是关闭业务并基本并入微软。 5月4日消息,国外媒体日前撰文指出,人工智能的热潮已开始逐渐褪去。初创公司想要同微软、谷歌等科技巨头在人工智能领域一决高下,门槛已…

供应链|经典论文解读:(s,S) 策略在动态库存下的最优性

文章考虑了具有订购成本(由单位成本加上重新订购成本组成)的动态库存问题。具体而言,对于每个时期,系统在中期开始是做出一系列采购决策——这些采购有助于库存的积累,并在随后的周期被需求所消耗。每时期系统会产生各…

04-18 周四 为LLM_inference项目配置GitHub CI过程记录

04-18 周四 为LLM_inference项目配置GitHub CI过程记录 时间版本修改人描述2024年4月18日10:30:13V0.1宋全恒新建文档 简介和相关文档 04-15 周一 GitHub仓库CI服务器配置过程文档actions-runner 是托管与GitHub上的仓库,下载最新的客户端程序即可。self hosted r…

一个年薪30w软件测试员的职业规划,献给还在迷茫中的朋友

先抛出一个观点 , 那些,担心30岁后,35岁后,40岁后,无路可走的;基本属于能力不够、或者思维太局限 。 总之,瞎担心 / 不长进 。 具体,见下面正文 。 曾经,在16年&#xff…

AI技术赋能下的视频监控方案是如何解决新能源汽车充电难问题的?

一、方案背景 刚刚结束的第十八届北京车展异常火爆,其中一组与汽车有关的数字让人格外关注。根据乘联会2024年4月19日公布的最新数据,全国乘用车市场零售达到51.6万辆,其中新能源车的销量约为26万辆,市场渗透率达到50.39%。 这意味…

音视频开发4 FFmpeg windows 环境搭建,QT 安装,动态库的搜索路径

FFmpeg 为了让所有平台的开发者都能够学习到音视频开发的通用技术,本教程主要讲解跨平台的音视频开发库FFmpeg。其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据&…

【第10章】spring-mvc转发和重定向

文章目录 前言一、准备二、转发1. 视图解析器(推荐)2. 关键字(forward)3. request 三、重定向1.关键字(redirect)2. HttpServletResponse 四、区别总结 前言 前面介绍了视图解析器的使用,但是对我们原有转发和重定向有影响,接下来我们通过案例,来使用学习转发和重定向的用法。…

ComfyUI 基础教程(十四):ComfyUI中4种实现局部重绘方法

在ComfyUI中有多种方式可以实现局部重绘,简单的方式是使用VAE内补编码器进行局部重绘,也可以用Fooocus inpaint进行局部重绘,还可以用controlNet的inpaint模型进行局部重绘,以及使用Clip seg蒙版插件! 本篇介绍使用VAE內补编码器进行局部重绘的方法。 1、VAE内补编码器 局…

《架构风清扬-Java面试系列第28讲》聊聊SynchronousQueue的使用及适合场景

SynchronousQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题,老规矩,我们将从使用场景和代码示例来进行讲解 来,思考片刻,给出你的答案 1,使用场景 实现:特殊的无缓冲队列,每一个…

帆软报表9.0连接达梦数据库

一、将驱动复制到帆软安装目录下 二、配置数据库连接 注意:dm.jdbc.driver.DmDriver是直接在文本框输入的 进行以上两部就能连接达梦数据库了

揭秘!如何利用自动化工具提升抖音推广效果

亲爱的读者朋友们,你是否在为抖音的推广效果而苦恼?看着别人家的视频轻松获得大量曝光,你是否也心生羡慕?今天,我们就来分享一个秘密武器,让你轻松提升抖音推广效果! 首先,让我们来了…

开发环境待

一 web开发环境搭建 1 web开发环境概述 所谓web开发,指的就是从网页中向后端程序发送请求.与后端程序进行交互. 流程图: 1,Web服务器是指驻留于因特网上某种类型计算机的程序. 2, 可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界 浏览…

微信答题活动怎么做_智慧与惊喜的碰撞

在这个信息爆炸的时代,如何吸引用户的眼球,让他们在众多品牌中驻足停留?答案或许就藏在一次别开生面的微信答题活动中。今天,就让我们一起走进这场以智慧与惊喜为主题的微信答题狂欢夜,感受其带来的独特魅力。 工具/原…