(5条消息) (六)Fabric2.0 智能合约实践

总目录:
(0) 如何利用区块链保护知识产权
(一)HyperLedger Fabric 2.0-release测试网络部署
(二)Fabric2.0 first-network 生成配置说明
(三)Fabric2.0启动网络脚本配置剖析
(四)Fabric2.0通道实践
(五)Fabric2.0 智能合约实践- 安装以及定义智能合约
(六)Fabric2.0 智能合约实践- 升级智能合约
(七)Fabric2.0智能合约实践-设置背书策略
(八)Fabric2.0Java SDK实践-合约交易
(九)Fabric2.0 通道实践-更新通道配置
(十)Fabric2.0-动态添加组织
(十一) Fabric2.0-使用编辑器调试go智能合约
(十二)Fabric2.0-实现外部构建启动合约

目录

  • 1.查看需要升级的智能合约信息
  • 2 修改合约代码
  • 3. 重新打包合约
  • 4. 重新安装合约
  • 5.修改合约定义
  • 6.切换节点重复 3,4,5操作
  • 7.重新提交合约定义
  • 8.检验新合约代码

继续上一章,接下来将进行智能合约合约的升级
还是先在控制台输入 docker exec -it cli bash 进入cli的控制台,默认cli的环境变量节点为peer0.org1.example.com.

1.查看需要升级的智能合约信息

目前已部署一个智能合约到peer0.org1.example.com,cli控制台输入命令:

peer lifecycle chaincode queryinstalled

查看mycc合约的package_id如下:

查看mycc在mychannel通道的合约定义,cli控制台输入命令:

peer lifecycle chaincode querycommitted -C mychannel

可以看到mycc具体信息

参数 中文描述
Name 合约名称 mycc
Version 合约版本 1
Sequence 合约序列号(升级1次,加1) 1
Endorsement Plugin 背书插件 escc
Validation Plugin 校验插件 vscc

执行一次query操作方便后面对比

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

此时控制台输出a的值为90

2 修改合约代码

假如本地不存在该合约代码,2.0提供从节点上获取代码包的操作
控制台输入以下命令

 peer lifecycle chaincode getinstalledpackage --package-id  mycc_1:00ef9e95ea103b2c27eacd5a62efd9b34863c672d236a1ce99a7d539b2f9ef7a

packge-id:使用1步骤中查询获取的合约packge_id

当前目录出现mycc.tar.gz包为合约包,解压合约包里面的code.tar,编辑合约代码
添加一个方法默认加10

3. 重新打包合约

控制台输入以下命令打包合约:

 peer lifecycle chaincode package mycc.tar.gz --path github.com/hyperledger/fabric-samples/chaincode/abstore/go/ --lang golang --label mycc_1

将根据新的合约代码打包成新的智能合约包mycc.tar.gz

4. 重新安装合约

更新合约代码需要重新将合约安装到节点上

peer lifecycle chaincode install mycc.tar.gz

控制台输出合约安装信息:

此时我们再查询一下节点安装合约信息,控制台输入:

peer lifecycle chaincode queryinstalled

控制台输出:

可以看到新增了一个package_id不一样的mycc,原来的还在。

5.修改合约定义

真正升级的操作其实是在合约定义这一步骤
控制台输入以下命令,与原来相比将package_id修改为新安装的合约package_id,sequence要改成2,因为install了2次

peer lifecycle chaincode approveformyorg --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name mycc --version 1 --init-required --package-id  mycc_1:2f358faa3475e5c37a90be9a7c0db2f608ecb09b13f64b001f83799be9fccc77 --sequence 2 --waitForEvent

检查approve状态,控制台输入:

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name mycc --version 1 --sequence 2 --output json --init-required 

sequence要改成2,因为install了2次,否则报错Error: query failed with status: 500 - failed to invoke backing implementation of 'CheckCommitReadiness': requested sequence is 1, but new definition must be sequence 2

6.切换节点重复 3,4,5操作

环境变量切换peer0.org2.example.com,重复3,4,5步,知道出现以下结果

7.重新提交合约定义

完成智能合约lifecycle策略后,重新提交合约定义

 peer lifecycle chaincode commit -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --version 1 --sequence 2 --init-required

注意序列号sequence

控制台输出以下结果:

此时通过新的智能合约查询a的值,还是为90

8.检验新合约代码

刚刚添加了addTen这个方法,理论上a应该加10等于100
控制台输入以下命令调用addTen

 peer chaincode invoke -o orderer.example.com:7050 --tls true --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 mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt  -c  '{"Args":["addTen","a"]}'  

查看结果a果然为100 升级成功

推荐阅读:(七)Fabric2.0智能合约实践-设置背书策略

(0)

相关推荐

  • 如何在区块链上部署链码 | 区块链研究实验室

    原创 链三丰 区块链研究实验室 今天 介绍 在本文中,我们将部署JAVA,GO,JAVASCRIPT的链代码以运行Hyperledger Fabric区块链网络. 网络设置 具有一个应用程序通道的Hy ...

  • Hyperledger Fabric 国密改造项目介绍

    引言 密码学是区块链实施中最重要的组成部分之一.然而,每个国家都有自己的国家加密算法,因此,在实施联盟链方案時支持国密算法尤其重要.Hyperledger Fabric在包括中国在内的世界范围内得到广 ...

  • (5条消息) (七)Fabric2.0智能合约实践

    总目录: (0) 如何利用区块链保护知识产权 (一)HyperLedger Fabric 2.0-release测试网络部署 (二)Fabric2.0 first-network 生成配置说明 (三) ...

  • (5条消息) (五)Fabric2.0 智能合约实践

    目录 2.1 安装以及定义智能合约 2.1.1 打包合约 2.1.2 部署合约到节点 2.1.3 当前组织同意合约定义 2.1.4 检查合约定义是否满足策略 2.1.5 提交合约 2.1.6 查看节点 ...

  • (4条消息) (十)Fabric2.0

    目录 4.1 获取配置 4.2 修改配置 4.3 签名并提交更新配置 1. 新增org3证书配置 2. 新增org3定义到区块链 3.启动org3相关节点容器 4. 更新通道配置 5. org3加入通 ...

  • (4条消息) (九)Fabric2.0 通道实践

    目录 2.1提取并解析通道配置 2.2 修改配置 2.2 重新编码跟提交配置 1.通道配置说明 2.更新通道 3. 总结 下面实践将基于已部署好的first-network. 1.通道配置说明 我们再 ...

  • (5条消息) (四)Fabric2.0通道实践

    目录 1.1 创建通道配置文件 1.2 环境准备 1.3 创建通道tx文件 1.创建通道准备 2.创建通道 3.节点加入通道 4.验证节点加入通道 5.总结 1.创建通道准备 1.1 创建通道配置文件 ...

  • (4条消息) (三)Fabric2.0启动网络脚本配置剖析

    目录 2.1 排序节点启动 2.2 节点启动 1.byfn.sh 2.docker-compose-cli.yaml 3.docker-compose-etcdraft2.yaml 4.总结 根据Hy ...

  • (4条消息) (二)Fabric2.0 first

    ),为了加深对2.0的认识,从first-network的部署配置开始进行学习. 上篇有提到在运行Fabric网络前,先执行了./byfn.sh generate 实现创始区块.通道以及证书文件的生成 ...

  • (4条消息) (八)Fabric2.0Java SDK实践

    总目录: (0) 如何利用区块链保护知识产权 (一)HyperLedger Fabric 2.0-release测试网络部署 (二)Fabric2.0 first-network 生成配置说明 (三) ...

  • (2条消息) [ThinkPHP]5.0.23-Rce 漏洞复现_satasun的博客-CSDN博客

    [ThinkPHP]5.0.23-Rce 环境搭建 github传送门 BUU传送门 POC 老懒狗选择直接buu,链接 http://node3.buuoj.cn:27512/ 1 直接用poc打一 ...