链码的打包与升级

article/2025/10/3 5:55:27

目录

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://chatgpt.dhexx.cn/article/h5SbwN6j.shtml

相关文章

fabric链码的编写-入门

链码的编写 前言:fabric链码的编写较简单,在熟悉了基本结构和相关API之后就可上手编写,但是要多多练习,提高编写链码的速度和正确度。 学习步骤: 1.熟悉链码的基本结构 2.熟练链码相关API 3.练习,练习&#xff0c…

Hyperledger Fabric 链码

懂哪写哪,随时补充 链码结构 链码API 链码在开发过程中需要实现链码接口,交易的类型决定了哪个接口函数将会被调用,链码的接口定义如下: type Chaincode interface {Init(stub ChaincodeStubInterface) pb.ResponseInvoke(stu…

fabric2.3链码对比1.4链码小记

最近实验室的项目要部署到fabric2.0以上版本,之前写的都是1.4的链码,现在看2.0版本的链码还是有些不一样的,主要是链码api改了: 前提:如果想在fabric2.0以上环境中还是想用shim和peerAPI的话:也就是&#…

Hyperledger Fabric 链码生命周期

目录 一、什么是链码 二、部署链码 2.1 安装和定义链码 2.1.1 打包智能合约 2.1.2 peer节点安装链码 2.1.3 组织批准链码 2.1.4 将链码提交到通道 2.2 升级链码 总结 一、什么是链码 ChainCode(链码)是一个程序,用Go、Node.js或Java编…

matlab freeman链码,对Freeman链码分析的角点检测算法

图像中的角点是图像的重要特征, 具有旋转不变性, 决定了图像形状, 可以降低图像信息的存储效率, 在目标跟踪, 目标检测, 图像匹配, 图像轮廓拟合等领域都有重要的应用价值. 近几十年来, 国内外学者提出的图像角点检测算法[, 各有各的优缺点, 大致可分为三大类: 基于灰度强度的角…

Fabric链码升级

一、修改链码,上传 二、打包链码 1、设置组织1环境变量 export PATH${PWD}/../bin:$PATH export FABRIC_CFG_PATH$PWD/../config/ # Environment variables for Org1 export CORE_PEER_TLS_ENABLEDtrue export CORE_PEER_LOCALMSPID"Org1MSP" export C…

图像特征-链码(Freeman code)

目录 引言链码编程实现轮廓提取链码计算 总结 引言 本文介绍了图像的形状特征–链码,以及通过python和opencv实现的链码提取方法。所有opencv的版本为3.4.2,已经移除了直接返回链码的选项。 链码 链码用于描述图像的形状特征,首先需要获得图像…

Java知识扫盲——向上转型(类向上转型、接口向上转型)以及向上转型的优势、灵活运用

目录 普通类示例 抽象类的向上转型, 接口向上转型: 作用:使用向上转型可以,提高代码的简洁性、灵活性、适用性。 普通类示例 父类: package 普通类向上转型;public class Father {public int age 48;public void…

java 向上转换_java的向上转型总结

在《think of java》中对向上转型有着如下的描述 看完之后很蒙圈,所以自己在网上找了一些描述,并自己做了简单的总结 简单的例子 class A{ public void A1(){ System.out.println("父类方法1"); } public void A2(){ System.out.println("…

JAVA中多态以及向上转型向下转型、重写的讲解

重写 重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 注意!!!返回值和形参都不能改变。 重写的好处在于子类可以根据需要&#x…

JAVA中的向上转型和向下转型

一、向上转型和向下转型 向上转型和向下转型是在JAVA继承操作中用到的东西,在讲到转型之前我们需要认识到继承过程中的对象类型转换,这种转换有两个特点: 1.这是继承过程中发生的操作 2.新类是现有类的一种类型。这种说法主要是因为现有类的方…

java转型 内存_Java向上转型及内存分析

学习设计模式的时候,发现很多模式都用到了向上转型(eg. 工厂方法)。而我对向上转型(upcasting)的机制并不十分熟悉。这篇文章将深入分析向上转型的机制、内存分析。 概念 先从几个基本概念开始: 1. Java中的引用类型(reference type) Java中的数据类型分…

java向上转型_Java向上转型和向下转型

一、向上转型 简单的说向.上转型就是:将-一个子类类型的对象赋值给- -个父类类型的变量, 基本的实现语法: 父类类型变量new 子 类类型(); DEMO:向上转型 发现了可以使用父类类型的变量调用子类覆写了父类的方法,但是为什么不调用Worker的say()方法呢?原…

C++ 向上转型

在 C 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换…

java 对象向上转型_JAVA对象向上转型和向下转型

今天做了一个测试的题目,发现自己还是很多问题没有静下心来做。很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了。所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话:“父类…

java 向上转型_Java 转型问题(向上转型和向下转型)

Java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象。 什么叫父类引用指向子类对象? 从 2 个名词开始说起:向上转型(upcasting) 、向下转型(downcasting)。 举个例子:有2个类,Father 是父类&a…

java向上转型_Java向上转型

向上类型转换: 1.可以通过父类引用变量调用的方法是子类覆盖或继承父类的方法。 2.父类引用变量无法调用子类新增成员变量和新增成员方法。 举个例子 public classAnimal { public voidsleep() { System.out.println("Animal sleep"); } public voidjump(…

向上转型与向下转型(超详细)

本文利用代码例子解释向上转型与向下转型,文末有举例整合原代码。 首先,我们要知道:转型发生在继承后,也就是父类子类存在的前提下。其次,我们要清楚:向下转型的前提是已经发生了向上转型,向下转…

java向上转型

我们知道按照现有类的类型来创建新类的方式为继承。 换句话说 “新类是现有类的一种类型” 因为继承可以确保父类中所有的方法在子类中也同样有效,所以能够向父类发送的所有信息也同样可以向子类发送。 这儿有一个例子: public class Test {public sta…

类中的向上转型与向下转型详解

我们的类与类之间会存在继承关系,子类继承父类,一个父类可以有多个子类,例如Animal类就可以有Cat子类,Dog子类,等等。那么我们在运用的时候根据不同的场景会出现向上转型和向下转型的情况。 一、向上转型 1、Animal a…