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

news2024/11/19 1:48:07

简介

本文主要来自于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)的根证书文件的路径。

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

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

相关文章

CMake支持的编译平台和IDE

文章目录 简介支持的IDEVisual Studio支持示例 其他编译器和生成器支持MinGW示例 IDE集成Eclipse示例 实验性和特殊平台支持总结 简介 CMake是一个非常强大的跨平台自动化构建工具,它支持生成多种类型的项目文件,覆盖了广泛的开发环境和编译器。在这篇博…

wordpress在界面将站点地址直接修改为https导致上不去问题的解决办法

wordpress在界面将站点地址直接修改为https导致上不去问题的解决办法 #修改数据库yz_options

【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测(附代码)

资源下载: https://download.csdn.net/download/vvoennvv/88682033 一,概述 基于遗传算法优化BP神经网络 (GA-BP) 的数据时序预测是一种常用的机器学习方法,用于预测时间序列数据的趋势和未来值。 在使用这种方法之前,需要将时间序…

Nacos设置账号密码

1、控制台设置 # 开启账号密码验证 nacos.core.auth.enabledtrue# 设置账号密码 nacos.core.auth.usernamenacos nacos.core.auth.passwordnacos1232、数据库设置 密码为:nacos,对应加密信息是: $2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2k…

哨兵1号回波数据(L0级)FDBAQ压缩算法详解

本专栏目录: 全球SAR卫星大盘点与回波数据处理专栏目录-CSDN博客 1. 全球SAR卫星回波数据压缩算法统计 各国的SAR卫星的压缩算法按照时间轴排列如下: 可以看出传统的分块BAQ压缩算法(上图粉色)仍然是主流,哨兵1号其实也有传统的BAQ压缩模式。 本文介绍哨兵1号用的FDBAQ算…

图像分割-漫水填充法 floodFill (C#)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的VB版本请访问:图像分割-漫水填充法 floodFill-CSDN博客 FloodFill方法是一种图像处理算法,它的目的是…

优维科技2024战略定位:新一代运维核心系统提供商

01 经济复苏「走远路」 过去几年,全球经济持续低迷,2024会迎来转机吗? 回顾2023年,尽管经济复苏动能式微,但全球经济因有效控制通胀而展现出来的韧性,让包括中国在内的大部分经济体躲过了深度衰退的陷阱&…

(NeRF学习)NeRFStudio安装win11

参考: 【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程nerfstudio介绍及在windows上的配置、使用NeRFStudio官网githubRuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory原因及解决 目录 requireme…

二叉树的层序遍历,力扣

目录 题目地址: 题目: 我们直接看题解吧: 解题方法: 方法分析: 解题分析: 解题思路: 代码实现: 代码补充说明: 题目地址: 102. 二叉树的层序遍历 - 力扣&…

使用华为云鲲鹏弹性云服务器部署Discuz

本实验将在华为云鲲鹏弹性云服务器CentOS系统的实例上,部署Discuz!项目,并进行初步的安装测试。 注意:官网文档有些链接失效,本文在官方文档的基础上作出修改,具体参见Discuz安装这一步 操作前提:登录华为…

Unity中Shader的Reversed-Z(DirectX平台)

文章目录 前言一、在对裁剪坐标归一化设置NDC时,DirectX平台Z的特殊二、在图形计算器中,看一下Z值反转前后变化1、在图形计算器创建两个变量 n 和 f 分别 控制近裁剪面 和 远裁剪面2、带入公式得到齐次裁剪空间下Z值3、进行透视除法4、用 1 - Z 得出Z值反…

邮件群发称呼怎么写?写群发邮件开头技巧?

如何写外贸邮件群发称呼?外贸群发邮件开头怎么称呼? 邮件群发已成为企业、个人和组织之间沟通的重要手段。而一个恰当的称呼,不仅能够展现出礼貌和尊重,还能够拉近彼此的距离。那么,如何写好邮件群发的称呼呢&#xf…

Java 读取超大excel文件

注意&#xff1a;此参考解决方案只是针对xlsx格式的excel文件&#xff01; Maven <dependency><groupId>com.monitorjbl</groupId><artifactId>xlsx-streamer</artifactId><version>2.2.0</version> </dependency>读取方式1…

杰发科技AutoGen自动生成7801代码——PWM

1.AutoGen生成代码非常简单&#xff0c;1s输出PWM波 只需修改如下频率和占空比即可 注意Pin脚对应的通道号是否正确 2.生成的代码可以直接编译烧录 3.结果

无边界支付:数字货币如何改变跨境电商?

在全球数字化的浪潮中&#xff0c;数字货币的崛起成为跨境电商领域的一场革命。本文将深入探讨数字货币如何重新定义支付体系&#xff0c;对跨境电商带来的影响以及未来可能的发展方向。 数字货币的崛起 随着比特币等数字货币的逐渐走俏&#xff0c;传统支付体系的边界逐渐被打…

微信服务号升级订阅号条件

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;首先我们要看一下服务号和订阅号的主要区别。1、服务号推送的消息没有折叠&#xff0c;消息出现在聊天列表中&#xff0c;会像收到消息一样有提醒。而订阅号推送的消息是折叠的&#xff0c;“订阅号…

【linux kernel】linux的SPI框架分析

文章目录 一、linux内核中的SPI框架二、SPI核心的初始化三、SPI核心的数据结构1、struct spi_statistics2、struct spi_delay3、struct spi_device4、struct spi_driver5、struct spi_controller6、struct spi_res7、struct spi_transfer8、struct spi_message9、struct spi_bo…

MongoDB实验——在MongoDB中管理数据库和集合操作

实验——在MongoDB中管理数据库和集合操作 一、实验目的 掌握在 MongoDB 中管理数据库和集合操作掌握在 MongoDB 中插入、修改及删除文档操作 二、实验原理 MongoDB 中数据被分组存储在数据集中&#xff0c;被称为一个集合&#xff08;Collenction&#xff09;。对于存储在…

KBDPL.DLL文件丢失,软件游戏无法启动,修复方法

不少小伙伴&#xff0c;求助说遇到Windows弹窗提示“KBDPL.DLL文件丢失&#xff0c;应用无法启动的问题”&#xff0c;不知道应该怎么修复&#xff1f; 首先&#xff0c;先来了解“KBDPL.DLL文件”是什么&#xff1f; kbdpl.dll是Windows操作系统的一部分&#xff0c;是一个动…

深度学习MLP_实战演练使用感知机用于感情识别_keras

目录 &#xff08;1&#xff09;why deep learning is game changing?&#xff08;2&#xff09;it all started with a neuron&#xff08;3&#xff09;Perceptron&#xff08;4&#xff09;Perceptron for Binary Classification&#xff08;5&#xff09;put it all toget…