【hyperledger-fabric】将智能合约部署到通道

简介

本文主要来自于B站视频教学视频,也主要参看了官方文档中下图这一章节。针对的是测试网络中go语言的部分,部署测试网络。附上B站的教学视频 B站教学视频第一小节,附上 官方文档
在这里插入图片描述

1.启动网络

# 跳转到指定的目录
cd /root/fabric/fabric-samples/test-network# 启动docker容器并且创建通道
./network.sh up createChannel

2.打包智能合约

备注:这里参考的B站视频的go语言版本进行打包智能合约部分。

cd ../chaincode/fabcar/go
# 指定的链包路径下执行下述语句(这里参照视频是在/root/fabric/fabric-samples/chaincode/fabcar/go)
GO111MODULE=on go mod vendorcd ../../../test-network# 添加环境变量
export PATH=${PWD}/../bin:$PATH# 设置FABRIC_CFG_PATH指向存储库core.yaml中的文件fabric-samples
export FABRIC_CFG_PATH=$PWD/../config/# 执行生命链周期代码。代码具体解析标识01
peer lifecycle chaincode package fabcar.tar.gz --path ../chaincode/fabcar/go/ --lang golang --label facar_1

至此,链代码包已经创建成功,可以在测试网络的对等点上安装连代码。

3.安装链码包

在我们打包资产转移(基本)智能合约后,我们可以在我们的节点上安装链码。链码需要安装在每个将背书交易的对等点上。因为我们将设置背书策略以要求 Org1 和 Org2 都背书,所以我们需要在两个组织运营的对等节点上安装链码:

  • peer0.org1.example.com
  • peer0.org2.example.com
# 代码具体解析标识02,简述以Org1管理员身份到Org1对等方上安装链码。
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# 代码具体解析与02类似,简述为以Org2管理员身份到Org2对等方上安装链码。
export CORE_PEER_TLS_ENABLED=true
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

批准链码定义

安装链码包后,您需要批准组织的链码定义。该定义包括链码治理的重要参数,例如名称、版本和链码背书策略。

# 查询指定链包的包ID
peer lifecycle chaincode queryinstalled# 将查询到到的id放到代码存放的位置
export CC_PACKAGE_ID=basic_1.0:69de748301770f6ef64b42aa6bb6cb291df20aa39542c3ef94008615704007f3# 具体代码解析03,简述为由于安装链码时,设置的是Org2为管理员身份操作CLI,因此此时将链码的定义批准为Org2。
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# 设置环境变量以org1为管理员身份运行
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051# 批准链码定义为Org1
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

调用链码

将链码定义提交到通道后,链码将在加入安装了链码的通道的对等点上启动。资产转移(基本)链代码现在已准备好由客户端应用程序调用。使用以下命令在账本上创建一组初始资产。请注意,invoke 命令需要针对足够数量的对等点才能满足链码背书策略。(请注意,CLI 不会访问 Fabric Gateway 对等点,因此必须指定每个认可对等点。)

# 创建一组初始化资产
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 ${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 -c '{"function":"initLedger","Args":[]}'# 调用查询函数读取链码创建的汽车集
peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

代码具体解析标识

01:fabcar.tar.gz此命令将在当前目录中创建一个名为的包。该–lang标志用于指定链码语言,该–path标志提供智能合约代码的位置。该路径必须是完全限定路径或相对于当前工作目录的路径。该–label标志用于指定链码标签,该标签将在安装后识别您的链码。建议您的标签包含链代码名称和版本。

02:置以下环境变量以peer以 Org1 管理员用户身份操作 CLI。将CORE_PEER_ADDRESS设置为指向 Org1 对等点peer0.org1.example.com。

  • CORE_PEER_TLS_ENABLED=true标识启用了TLS加密来保护与peer节点的通信。
  • CORE_PEER_LOCALMSPID="Org1MSP"表示本地MSP成员服务提供商的ID。被设置为Org1MSP,表示组织1的成员服务提供商ID。
  • CORE_PEER_TLS_ROOTCERT_FILE环境变量,指定了peer节点TLS根证书的位置。${PWD}是一个环境变量,表示当前工作目录。因此,这条命令使用了当前工作目录来构建TLS根证书的文件路径。
  • CORE_PEER_MSPCONFIGPATH环境变量,指定了MSP配置文件的位置。这个配置文件包含了与peer节点通信所需的认证信息。
  • 最后一个命令设置了CORE_PEER_ADDRESS环境变量,指定了peer节点的地址和端口号。在这里,peer节点被设置为在本地主机(localhost)的7051端口上监听

03:这个命令的目的是要在指定的通道上为您的组织批准特定链码的定义,这样就可以将其部署到该通道上。

  • peer lifecycle chaincode approveformyorg - 这是一个peer命令,用于在指定通道上为您的组织批准链码定义。
  • -o localhost:7050 - 这个标志指定了要连接的Orderer节点的地址和端口号。
  • –ordererTLSHostnameOverride orderer.example.com - 这个标志指定了用于TLS连接的Orderer的主机名。
  • –channelID mychannel - 这个标志指定了要在其上批准链码定义的通道ID。
  • –name fabcar - 这个标志指定了您要批准的链码的名称。
  • –version 1.0 - 这个标志指定了您要批准的链码的版本号。
  • –package-id $CC_PACKAGE_ID - 这个标志指定了您要批准的链码的包ID。包ID是在安装链码时生成的唯一标识符。
  • –sequence 1 - 这个标志指定了链码的序列号。对于每个chaincode名称,版本和通道需要一个唯一的序列号。
  • –tls - 这个标志指示使用TLS来加密通信。
  • –cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem - 这个标志指定了用于TLS连接的认证机构(CA)的根证书文件的路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/229949.html

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

相关文章

WSL使用VsCode运行cpp文件

文章目录 缘起主要步骤参考 缘起 今天在阅读《C20设计模式-可复用的面向对象设计方法(原书第2版)》的时候,遇到代码想要运行一下,于是决定使用wsl下的vscode配置cpp的环境。 主要步骤 1.安装gcc和g编译器 打开命令行输入wsl&am…

栈实现前缀表达式的计算

前缀表达式计算 过程分析 中缀表达式:(1 5)*3 > 前缀表达式:*153 (可参考这篇文章:中缀转前缀) 第一步:从右至左扫描前缀表达式(已存放在字符数组中)&a…

摆烂式学习ssh

摆烂式学习ssh ssh工作原理ssh基本使用sshd配置文件密钥登录1.客户端2.服务器3.注意事项4.使用密钥登录测试 ssh高级使用技巧1.在非正规端口启动2.rsync 命令3.透过 ssh 通道加密原本无加密的服务4.以ssh信道配合x server 传递图形接口5.ssh配合virtualbox虚拟机使用技巧 ssh工…

【linux】ufw 的基本使用

碎碎念 所有的云平台的网络流量的进出基本上有三层,首先是虚拟网的流量控制,一般是通过子网访问控制列表来控制vpc也好子网也好的流量出入,其次是安全组控制一层,通过安全组规则控制一类/一组主机(指EC2/ECS/VM/CE这些…

深度学习在语义分割中的进展与应用

埃弗顿戈梅德(Everton Gomede) 一、说明 语义分割是计算机视觉领域的一项关键任务,涉及将图像中的每个像素分类为预定义的类。这项任务在从自动驾驶汽车到医学成像的各种应用中都具有深远的影响。深度学习的出现显著提高了语义分割模型的功能…

LeetCode 每日一题 Day 28293031 ||三则模拟||找循环节(hard)

1185. 一周中的第几天 给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数:day、month 和 year,分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday…

MT8766安卓核心板规格参数_MTK8766核心板模块方案定制

MT8766安卓核心板:高性能、稳定可靠、集成度高的一体化解决方案 MT8766安卓核心板采用联发科MTK8766四核4G模块方案,是一款高度集成的安卓一体板。四核芯片架构,主频可达到2.0GHz,支持国内4G全网通。12nm制程工艺,支持…

MAC电脑安装java开发工具

一、安装brew 1.1、官网地址 链接 1.2、更新地址 二、安装 java brew install openjdk11 三、安装gradle Gradle安装与配置教程 - 知乎 四、GIT 4.1、GIT安装 brew install git 4.2、rsa ssh-keygen -t rsa -C "jhestarbucks.com" 五、自动搭建一个springBoot…

接口自动化测试要做什么?

如果是,那先了解下接口测试流程: 1、需求分析 2、Api文档分析与评审 3、测试计划编写 4、用例设计与评审 5、环境搭建(工具) 6、执行用例 7、缺陷管理 8、测试报告 了解了接口测试的工作流程,那"接口自动化测试&q…

vue-vuex持久化处理

在src/utils文件夹下,创建storage.js文件 // 约定一个通用的键名 const INFO_KEY hm_shopping_info// 获取个人信息 export const getInfo () > {const defaultObj { token: , userId: }const result localStorage.getItem(INFO_KEY)return result ? JSON…

HTTP 错误 401.3 - Unauthorized 由于Web服务器上此资源的访问控制列表(ACL)配置或加密设置。

用IIS 发布网站,不能访问且出现错误: HTTP 错误 401.3 - Unauthorized 由于Web服务器上此资源的访问控制列表(ACL)配置或加密设置。您无权查看此目录或页面 解决办法: 1.打开IIS界面,选中发布的网站,右键—>编辑…

鸿蒙HarmonyOS- 弹框组件库

简介 今天介绍一个基于ArkUI框架开发的弹框组件库,该库基于ArkUI的弹框基础功能和自定义能力。针对通用的弹框业务场景,该库提供了丰富的组件弹窗功能。 包括确认输入弹窗、列表展示选择弹窗、自定义底部/顶部弹窗、自定义动画弹窗、自定义全屏弹窗、消息…

Ribbon相关面试及答案(2024)

1、Ribbon是什么,它在微服务架构中扮演什么角色? Ribbon是一个客户端负载均衡器,它在微服务架构中扮演着关键性的角色。Ribbon的设计理念是在客户端进行服务发现和负载均衡,这种方式不同于传统的通过中心化的负载均衡器&#xff…

Jenkins基础教程

目录 第一章、快速了解Jenkins1.1)Jenkins中一些概念介绍1.2)Jenkins和maven用途上的区别1.3)为什么使用Jenkins1.4)学习过程中的疑问 第二章、安装Jenkins2.1)安装之前的准备2.2)Windows中Jenkins下载安装…

java servlet软件缺陷库管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java servlet软件缺陷库管理系统是一套完善的java web信息管理系统 系统采用serlvetdaobean(mvc模式),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOM…

什么是安全信息和事件管理(SIEM),有什么用处

安全信息和事件管理(SIEM)对于企业主动识别、管理和消除安全威胁至关重要。SIEM 解决方案采用事件关联、AI 驱动的异常检测以及机器学习驱动的用户和实体行为分析 (UEBA) 等机制来检测、审查和应对网络安全威胁。这些功能使 SIEM …

14:00面试,14:06就出来了,问的问题有点变态

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,…

mpi 与 nccl 多进程多卡单机示例结果验证

做了部分注释&#xff0c;比较乱 本示例结构&#xff1a; 1&#xff0c;源代码 #include <stdio.h> #include "cuda_runtime.h" #include "nccl.h" #include "mpi.h" #include <unistd.h> #include <stdint.h> #include <…

如何正确使用docker搭建靶场--pikachu

在Linux中搭建靶场——pikachu 1.开启docker systemctl start docker 2.查看docker状态 systemctl status docker 3.查看docker存在那些镜像 docker images 4.拉取镜像&#xff0c;这里是以pikachu为例因此需要一个php5的版本 &#xff08;1&#xff09;打开代理&#xff…

照片怎么抠图换背景?不会的伙伴看这里!

随着数字技术的日新月异&#xff0c;抠图换背景技术已成为图像处理的翘楚。它是指将图片中的主体与背景分离&#xff0c;再将其置于新的背景之上。这一技艺在广告、摄影和设计等领域中占据着举足轻重的地位。本文将为您揭示三种抠图换背景的秘籍&#xff0c;助您轻松掌握这一技…