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

简介

本文主要来自于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 vendor

cd ../../../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)的根证书文件的路径。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

拆分文本文件,TXT文本拆分器

在数字化飞速发展的时代,我们经常碰到需要处理大容量TXT文件的情况。这些文件可能包含大量的数据、日志信息或是其他重要内容。然而,传统的文本编辑器在处理这些庞然大物时往往会显得力不从心,这个时候,【首助编辑高手】的出现恰如…

STM32存储左右互搏 SPI总线读写FRAM MB85RS2M

STM32存储左右互搏 SPI总线读写FRAM MB85RS2M 在中低容量存储领域,除了FLASH的使用,,还有铁电存储器FRAM的使用,相对于FLASH,FRAM写操作时不需要预擦除,所以执行写操作时可以达到更高的速度,其…

Docker就应该这么学-01

第一章 容器与开发语言 1.1 Docker 最近一段时间,云计算领域最火的莫过于“容器”一词。提到容器,就不得不提 Docker,可以说 Docker 己经成为了容器的代名词。那么,什么是 Docker ? Docker 又能做什么呢?本章 我们就来简单介绍…

【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)

本笔记来自北航诸兵老师的课程 课程地址:模型预测控制(2022春)lecture 1-1 Unconstrained MPC 文章目录 0 MPC 简介0.1 案例引入0.2 系统模型0.3 MPC的优点0.4 MPC的缺点0.5 MPC的未来 1 详细介绍 0 MPC 简介 0.1 案例引入 MPC(…

关于简单的数据可视化

1. 安装数据可视化必要的openpyxl、pandas,matplotlib等软件包 使用清华源,命令如下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pandaspip install -i https://pypi.tuna.tsingh…

CSU计算机学院2021年C语言期末题目思路分享(后两道题)

文章目录 E: 实数相加——大数加法的拓展原题题目描述输入输出样例输入样例输出 题目思路实现步骤代码和注释 F: 谍影寻踪——链表的思想和运用原题题目描述输入输出样例输入样例输出 题目思路 一点感想 E: 实数相加——大数加法的拓展 原题 题目描述 C语言就要期末考试了&a…

com.gexin.platform 依赖下载问题

打包时报错显示&#xff1a; com.gexin.platform:gexin-rp-sdk-http:pom:4.1.1.4 failed to transfer from http://0.0.0.0/ 解决办法&#xff1a; 1、在idea中找到maven中的设置的settings.xml 2、根据路径找到settings.xml文件&#xff0c;添加以下内容 <mirror><…

2023春季李宏毅机器学习笔记 01 :正确认识 ChatGPT

资料 课程主页&#xff1a;https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub&#xff1a;https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程&#xff1a;https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、对Chatgpt的误解…

『华为云耀云服务器实战』|云服务器如何快速搭建个人博客(图文详解)

文章目录 引言一、云耀云服务器L实例介绍1.1 准备一个华为云耀云服务器1.2 重置实例密码1.3 利用xshell 远程连接 二、安装环境软件2.1 安装git准备远程拉取2.2 安装Docker 和 Docker compose 三、博客开源项目介绍3.1 操作界面展览 四、拉取项目搭建个人博客4.1 拉取项目进行配…

【算法】一维、二维前缀和 解决算法题(C++)

文章目录 1. 前缀和算法 介绍2. 一维前缀和 模板引入DP34【模板】前缀和 3. 利用一维前缀和 解题724.寻找数组的中心下标238.除自身以外数组的乘积560.和为K的子数组974.和可被K整除的子数组525.连续数组 二维前缀和 模板1314.矩阵区域和 1. 前缀和算法 介绍 前缀和算法 用于高…

白话机器学习的数学-3-评估

1、 模型评估 那我们如何测量预测函数 fθ(x)的正确性&#xff0c;也就是精度呢&#xff1f; 观察函数的图形&#xff0c;看它能否很好地拟合训练数据&#xff1a; 这是只有一个变量的简单问题&#xff0c;所以才能在图上展 示出来。 过像多重回归这样的问题&#xff0c;变量增…

x-cmd pkg | bit - 实验性的现代化 git CLI

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 bit&#xff0c;由 Chris Walz 于 2020 年使用 Go 语言开发&#xff0c;提供直观的命令行补全提示和建立在 git 命令之上的封装命令&#xff0c;旨在建立完全兼容 git 命令的现代化 CLI。 首次用户 使用 x bit 即可自…

【华为机试】2023年真题B卷(python)-矩阵元素的边界值

一、题目 题目描述&#xff1a; 给定一个N*M矩阵&#xff0c;请先找出M个该矩阵中每列元素的最大值&#xff0c;然后输出这M个值中的最小值。 补充说明: N和M的取值范围均为: [0,100] 二、示例 示例1&#xff1a; 输入: [[1,2],[3,4]] 输出: 3 说明: 第一列元素为: 1和3&…

Linux 进程(五) 调度与切换

概念准备 当一个进程放在cpu上运行时&#xff0c;是必须要把进程的代码跑完才会进行下一个进程吗&#xff1f;答案肯定是 不对。现在的操作系统都是基于时间片轮转执行的。 时间片&#xff08;timeslice&#xff09;又称为“量子&#xff08;quantum&#xff09;”或“处理器片…

求职招聘小程序平台运营版系统源码 全开源源代码 附带完整的安装与部署教程

近年来&#xff0c;移动互联网的普及&#xff0c;求职招聘行业也在逐步向数字化转型。在这个过程中&#xff0c;小程序因其便捷性、即时性等特点&#xff0c;成为了求职者和招聘方的新宠。罗峰来给大家分享一款求职招聘小程序平台运营版系统源码&#xff0c;致力于为用户提供高…

安装elasticsearch、kibana、IK分词器、扩展IK词典

安装elasticsearch、kibana、IK分词器、扩展IK词典 后面还会安装kibana&#xff0c;这个会提供可视化界面方面学习。 需要注意的是elasticsearch和kibana版本一定要一样&#xff01;&#xff01;&#xff01; 否则就像这样 elasticsearch 1、创建网络 因为我们还需要部署k…

Unable to connect to Redis server

报错内容&#xff1a; Exception in thread "main" org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 175.24.186.230/175.24.186.230…

Elasticsearch:带有自查询检索器的聊天机器人示例

本工作簿演示了 Elasticsearch 的自查询检索器 (self-query retriever) 将问题转换为结构化查询并将结构化查询应用于 Elasticsearch 索引的示例。 在开始之前&#xff0c;我们首先使用 langchain 将文档分割成块&#xff0c;然后使用 ElasticsearchStore.from_documents 创建…

多粒度在研究中的应用

FontDiffuser: One-Shot Font Generation via Denoising Diffusion with Multi-Scale Content Aggregation and Style Contrastive Learning 存在的问题 现有的字体生成方法虽然取得了令人满意的性能&#xff0c;但在处理复杂字和风格变化较大的字符(尤其是中文字符)时&#x…

lunux(mysql下载以及操作)

下载mysql 查看镜像 docker images 下载MySQL镜像 mysql/mysql-server:8.0 创建文件夹&#xff0c;创建配置文件和放数据文件 mkdir -p /data/mysql/{conf,,data} 创建配置文件 my.cnf 写入配置文件my.cnf的代码 [client] default-character-setutf8[mysql] de…