链码的打包与升级

目录

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函数会被调用以执行数据初始化相关的操作,所以在实际的生产环境中需要多加小心,以避免在升级链码时重设状态信息。

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

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

猜你喜欢

转载自blog.csdn.net/djklsajdklsajdlk/article/details/131505863