链码的打包与升级

news2024/9/21 18:44:04

目录

1、链码的打包与签名

​编辑

对链码的签名

        1、安装已经添加签名的链码 

         2、安装成功之后进行链码的实例化操作,同时指定其背书策略

测试

1、查询链码 

2、调用链码 

 3、查询链码

链码的升级

1、安装链码

2、升级链码

3、测试

1、查询

2、调用

3、查询

链码升级之后,之前旧版本的链码还能使用吗?


1、链码的打包与签名

        通过将链码相关数据(如链码的名称、版本、实例化策略等信息)进行封装,可以实现对其进行打包和签名的操作。

        链码包 具体包含以下3部分:

  • 链码本身,由ChaincodeDeploymentSpec(CDS)定义。CDS根据代码及一些其他属性(名称、版本等)来定义链码。
  • 一个可选的实例化策略,该策略可被背书策略描述。
  • 一组表示链码所有权的签名。

         对于一个已经编写完成的链码,可以使用package命令进行打包操作:

peer chaincode package -n exacc -v 1.0 -p github.com/chaincode/chaincode_example02/go/ -s -S -i "AND('Org1MSP.admin')" ccpack.out 

下面是对该命令的各个参数的解释:

  • peer chaincode package: 这是命令的名称,用于将链码打包。
  • -n exacc: 指定链码的名称为 "exacc","exacc" 是链码的标识符。
  • -v 1.0: 指定链码的版本为 "1.0","1.0" 是链码的版本号。
  • -p github.com/chaincode/chaincode_example02/go/: 指定链码的路径为 "github.com/chaincode/chaincode_example02/go/",这是链码的位置。
  • -s: 表示将链码打包为一个压缩文件。
  • -S: 表示将链码打包为一个签名压缩文件。
  • -i "AND('Org1MSP.admin')": 指定对链码进行签名的标识。这里使用 "Org1MSP.admin",它表示使用组织 "Org1MSP" 的管理员身份进行签名。
  • ccpack.out: 指定输出的打包文件名为 "ccpack.out",这是打包后的链码文件。

对链码的签名

        对一个打包文件进行签名操作(添加当前MSP签名到签名列表中),可以使用signpackage命令来实现:

peer chaincode signpackage ccpack.out signedccpack.out

        指定生成的signedccpack.out文件包含一个用本地MSP对包进行的附加签名。添加了签名的链码包可以进行下一步的处理,如先将链码进行安装,然后对已安装的链码进行实例化成升级操作。

        1、安装已经添加签名的链码 

peer chaincode install signedccpack.out

         2、安装成功之后进行链码的实例化操作,同时指定其背书策略

peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n exacc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR('Org1MSP.peer','Org2MSP.peer')"

这个命令是 Hyperledger Fabric 中的一个命令,用于在通道上实例化链码。下面是对该命令的各个参数的解释:

  • peer chaincode instantiate: 这是命令的名称,用于在通道上实例化链码。
  • -o orderer.example.com:7050: 指定排序服务节点的地址和端口号。在这里是 "orderer.example.com:7050"。
  • --tls: 表示使用 TLS 连接到排序服务节点。
  • --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem: 指定 TLS 连接所需的根证书文件的路径。
  • -C $CHANNEL_NAME: 指定要在其上实例化链码的通道名称。这里使用了一个环境变量 $CHANNEL_NAME,用于指定通道名称。
  • -n exacc: 指定要实例化的链码的名称为 "exacc","exacc" 是链码的标识符。
  • -v 1.0: 指定要实例化的链码的版本为 "1.0","1.0" 是链码的版本号。
  • -c '{"Args":["init","a","100","b","200"]}': 指定链码实例化时的初始化参数。这里使用了 JSON 格式的参数,以初始化链码中的两个账户 "a" 和 "b",分别赋予初始值 "100" 和 "200"。
  • -P "OR('Org1MSP.peer','Org2MSP.peer')": 指定链码的背书策略。这里使用了一个策略表达式,表示只要 "Org1MSP" 或 "Org2MSP" 中的对等节点对该链码进行背书,即可通过背书策略验证。

测试

1、查询链码 

peer chaincode query -C $CHANNEL_NAME -n exacc -c '{"Args":["query","a"]}'

2、调用链码 

peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n exacc -c '{"Args":["invoke","a","b","10"]}'

该命令是用于在Hyperledger Fabric区块链网络中调用一个名为"exacc"的智能合约。

解释每个参数的含义如下:

  • peer chaincode invoke:这是用于在对等节点上调用链码的命令。
  • -o orderer.example.com:7050:指定要连接的排序服务的地址和端口。
  • --tls:启用使用TLS进行通信。
  • --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem:指定用于TLS连接的根证书的路径。
  • -C $CHANNEL_NAME:指定要在其中执行链码的通道。
  • -n exacc:指定要调用的链码的名称为"exacc"。
  • -c '{"Args":["invoke","a","b","10"]}':指定传递给链码的调用参数。在这种情况下,调用参数是一个JSON字符串,包含一个名为"invoke"的函数和三个参数:"a"、"b"和"10"。

 3、查询链码

peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'

链码的升级

1、安装链码

peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/

2、升级链码

peer chaincode upgrade -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')"

该命令是用于在Hyperledger Fabric区块链网络中升级一个名为"mycc"的智能合约。

解释每个参数的含义如下:

  • peer chaincode upgrade:这是用于在对等节点上升级链码的命令。
  • -o orderer.example.com:7050:指定要连接的排序服务的地址和端口。
  • --tls:启用使用TLS进行通信。
  • --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem:指定用于TLS连接的根证书的路径。
  • -C $CHANNEL_NAME:指定要在其中执行链码的通道。
  • -n mycc:指定要升级的链码的名称为"mycc"。
  • -v 2.0:指定要升级到的链码的新版本号为2.0。
  • -c '{"Args":["init","a","100","b","200"]}':指定传递给链码的初始化参数。在这种情况下,初始化参数是一个JSON字符串,包含一个名为"init"的函数和四个参数:"a"、"100"、"b"和"200"。
  • -P "OR ('Org1MSP.peer','Org2MSP.peer')":指定链码的背书策略。在这种情况下,链码的背书策略是至少需要"Org1MSP.peer"和"Org2MSP.peer"两个对等节点进行背书。

        该命令的目的是在指定的通道上升级名为"mycc"的链码到版本2.0,并通过调用"init"函数并传递参数"a"、"100"、"b"和"200"来进行初始化。同时,链码的背书策略要求至少"Org1MSP.peer"和"Org2MSP.peer"两个对等节点进行背书。

3、测试

1、查询

peer chaincode query -C $CHANNEL_NAME -n exacc -c '{"Args":["query","a"]}'

2、调用

peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n exacc -c '{"Args":["invoke","a","b","10"]}'

该命令是用于在Hyperledger Fabric区块链网络中升级一个名为"mycc"的智能合约。

解释每个参数的含义如下:

  • peer chaincode upgrade:这是用于在对等节点上升级链码的命令。
  • -o orderer.example.com:7050:指定要连接的排序服务的地址和端口。
  • --tls:启用使用TLS进行通信。
  • --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem:指定用于TLS连接的根证书的路径。
  • -C $CHANNEL_NAME:指定要在其中执行链码的通道。
  • -n mycc:指定要升级的链码的名称为"mycc"。
  • -v 2.0:指定要升级到的链码的新版本号为2.0。
  • -c '{"Args":["init","a","100","b","200"]}':指定传递给链码的初始化参数。在这种情况下,初始化参数是一个JSON字符串,包含一个名为"init"的函数和四个参数:"a"、"100"、"b"和"200"。
  • -P "OR ('Org1MSP.peer','Org2MSP.peer')":指定链码的背书策略。在这种情况下,链码的背书策略是至少需要"Org1MSP.peer"和"Org2MSP.peer"两个对等节点进行背书。

该命令的目的是在指定的通道上升级名为"mycc"的链码到版本2.0,并通过调用"init"函数并传递参数"a"、"100"、"b"和"200"来进行初始化。同时,链码的背书策略要求至少"Org1MSP.peer"和"Org2MSP.peer"两个对等节点进行背书。

3、查询

peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'

注意:        在升级过程中,链码的Iit函数会被调用以执行数据初始化相关的操作,所以在实际的生产环境中需要多加小心,以避免在升级链码时重设状态信息。

链码升级之后,之前旧版本的链码还能使用吗?

        升级是一个类似于实例化操作的过程,会将新版本的链码与通道绑定。其他与旧版本
绑定的通道则仍旧运行旧版本的链码
。换句话说,一次升级只会影响一个提交它的通道。

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

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

相关文章

【花雕】全国青少年机器人技术一级考试备考实操搭建手册3

目录 1、秋千 2、跷跷板 3、搅拌器 4、奇怪的钟 5、起重机 6、烤肉架 7、手摇风扇 8、履带车 9、直升机 10、后轮驱动车 搅拌器是一种可以帮助我们将不同的物质混合在一起的机器。它通常由一个电动机和一个搅拌器头组成。当我们把需要混合的物质放入容器中,打开搅拌…

C语言之函数递归

前言   从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢&…

字典树的数据结构

Trie字典树主要用于存储字符串,Trie 的每个 Node 保存一个字符。用链表来描述的话,就是一个字符串就是一个链表。每个Node都保存了它的所有子节点。 例如我们往字典树中插入see、pain、paint三个单词,Trie字典树如下所示: 也就是…

zookeeper的动态扩容

附属意义的扩容:扩容的新增节点为观察者observer 1.观察者概念: a.在zookeeper引入此新的zookeeper节点类型为observer,是为了帮助处理投票成本随着追随者增加而增加的问题并且进一步完善了zookeeper的可扩展性 b.观察者不参与投票&#x…

【机器学习】基于卷积神经网络 CNN 的猫狗分类问题

文章目录 一、卷积神经网络的介绍1.1 什么是卷积神经网络1.2 重要层的说明1.3 应用领域二、 软件、环境配置2.1 安装Anaconda2.2 环境准备 三、猫狗分类示例3.1 图像数据预处理3.2 基准模型3.3 数据增强3.4 dropout层四、总结 一、卷积神经网络的介绍 1.1 什么是卷积神经网络 …

决策树ID3

文章目录 题目一基础知识解题过程①算总的信息量②求解各个指标的信息增益,以此比较得出根节点③ 从根节点下的晴天节点出发循环上述步骤④ 从根节点下的多云节点出发,循环上述步骤⑤ 从根节点下的雨节点出发,循环上述步骤⑥画出最终的决策树…

ChatGPT实战:职业生涯规划

ChatGPT的出现,不仅改变了人们对人工智能技术的认识,也对经济社会发展产生了深远的影响。那么,在ChatGPT时代,人们应该如何规划自己的职业呢? 职业规划是一个有意义且重要的过程,它可以帮助你在职业生涯中取…

避坑指南:当你将 Django 项目部署到 Heroku 你需要避多少坑?

文章目录 Cors 跨域问题localhost 阶段Heroku 部署阶段 Procfile 启动文件Database 数据库相关内容localhost 阶段Heroku 部署阶段settings.py 中 正确的设置方式官方给出的 settings.py makemigration & migrate 数据迁移 requirements.txt & runtime.txt 版本和库总结…

如何记录程序运行时间

使用c标准库中时钟类来实现。 使用模板类&#xff1a; chrono::duration<int,ratio<1,2>(20)>前面的int限定了延时单位是一个整数。只要1小时&#xff0c;2小时&#xff0c;但是没有1.5小时。ratio<1,2>代表一个分数。后面的2代表分母&#xff0c;前面的1为分…

Keil5中写的软件延时函数不起作用现象解析_ARM_Compiler_volatile关键字

一、问题描述 在学习野火霸天虎F407寄存器点亮LED时&#xff0c;出现实验现象&#xff1a;LED灯不亮&#xff0c;野火霸天虎F407资料。 main.c代码如下&#xff1a; #include "stm32f4xx.h"void Delay(unsigned int count);int main(void) { #if 0/* 第一步&a…

Axure教程——循环倒计时

本文介绍的是用Axure制作的循环倒计时 效果 预览&#xff1a;https://zhgcck.axshare.com 功能 1、点击“开始”按钮&#xff0c;倒计时开始 2、数值到1时&#xff0c;从10重新倒计时 制作 一、需要的元件 矩形、动态面板 二、制作过程 拖入一个动态面板&#xff0c;命名为…

gnuplot 命令行绘图工具命令

gnuplot命令行绘图工具命令 绘图示例预览 gnuplot工具非常强大&#xff0c;可以在命令行进行曲线绘图&#xff0c;当然也可以在UI界面绘图。 绘图命令&#xff1a; gnuplot> plot test.csv u ($0):1 w lp t c1, test.csv u ($0):2 w lp t c2绘图效果&#xff1a; 数据文…

CSDN 成长记

博客之星入围排行榜 - 2023.5.7 博文 PaddleVideo 简介以及文件目录详解 - 入选内容榜咯 - 2023.5.9 付费专栏 微机系统与接口上机实验_TD PITE型 终于开张咯 - 2023.5.15 博文 ResNet 论文理解含视频 - 入选内容榜第13名 - 2023.5.16 博文 ResNet 论文理解含视频 - 入选全站综…

4.设计模式之后七种模式后11种模式命令访问者迭代器发布订阅中介者忘备录解释器状态策略职责链和空模式

1.命令(command)模式 不知道命令接收者(对象)是谁,支持撤销 (接受者 间接调用执行 的具体行为) 命令调用者和接收者解耦 //只要实现命令接口即可 (就是客户端给个命令,然后命令类传给接收类执行) 优点和缺点 容易撤销操作 命令队列可以多线程操作 增加过多的命令类 空命令也是一…

关于credal set和credal decision tree的一点思考(其实就是论文笔记)

阅读Abelln老师的Credal-C4.5时&#xff0c;发现好难。。。然后又额外补充了一些论文&#xff0c;终于稍微懂一点点了&#xff0c;所以记录如下。 credal set在DS theory的定义如下 [1]&#xff1a; 这句话的意思是&#xff08;证据理论中的&#xff09;credal set是一个概率…

Web安全-Behinder(冰蝎)Webshell管理工具使用

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 工具下载地址02 运行环境03 工具介绍04 使用案例 01 工具下载地址 https://github.com/rebeyond/Behinder点击页面右侧"releases"&#xff0c;进入工具的版本下载页面。 在个人终端安…

经典软件工程复兴?大模型驱动的软件工程实践标准化

TL&#xff1b;DR。 简单来说&#xff0c;本文探讨了大模型驱动的软件工程实践标准化&#xff0c;以及如何将需求和设计规范化为 DSL 格式。通过这种方式&#xff0c;可以让 AI 更自动化、高效地编写代码。 随着大语言模型在软件开发中的应用越来越广泛&#xff0c;传统的软件工…

sourcetree中添加秘钥 - 工具篇

文章目录 1. 首先配置秘钥2. 打开sourcetree 1. 首先配置秘钥 参考文章&#xff1a;https://blog.csdn.net/qq_40968685/article/details/131328007 2. 打开sourcetree 打开“选项” 然后&#xff0c;从gitlab中复制ssh地址到sourcetree中&#xff0c;会看到如图提示&…

【python】ndarray的广播功能

目录 0.环境 1.背景简介 2.ndarray的广播功能 2.1概念 2.2意义 2.3使用前提 2.4举例 2.5完整代码 0.环境 windows jupyter notebook验证代码 1.背景简介 我是在查询【ndarray和array的区别】时&#xff0c;看到了“广播功能”这个词&#xff0c;之前只在网络的相关定义…

分布式版本控制系统Git介绍

Git 是一款开源的分布式版本控制系统&#xff0c;具备分布式、轻量级分支、强大的协作能力以及适用于大小项目的版本管理。本文简要介绍Git工具的特性、Git中的对象以及分支管理&#xff0c;以加深了解。 1、版本控制系统介绍 版本控制是指对软件开发过程中各种程序代码、配置…