Fabric 使用开发模式测试,打包,签名链码

正常情况下chaincode由对等体启动和维护。然而,在“开发模式”下,链码由用户构建并启动

如果没有安装Hyperledger Fabric Samples请先安装

如果没有下载Docker images请先下载

跳转至fabric-sampleschaincode-docker-devmode目录

$ cd ~/hyfa/fabric-samples/chaincode-docker-devmode/

使用docker images查看Docker镜像信息(显示本地Docker Registry)

$ sudo docker images

会看到如下输出

REPOSITORY                     TAG                  IMAGE ID            CREATED             SIZE
hyperledger/fabric-tools       latest             b7bfddf508bc        About an hour ago   1.46GB
hyperledger/fabric-tools       x86_64-1.1.0       b7bfddf508bc        About an hour ago   1.46GB
hyperledger/fabric-orderer     latest             ce0c810df36a        About an hour ago   180MB
hyperledger/fabric-orderer     x86_64-1.1.0       ce0c810df36a        About an hour ago   180MB
hyperledger/fabric-peer        latest             b023f9be0771        About an hour ago   187MB
hyperledger/fabric-peer        x86_64-1.1.0       b023f9be0771        About an hour ago   187MB
hyperledger/fabric-javaenv     latest             82098abb1a17        About an hour ago   1.52GB
hyperledger/fabric-javaenv     x86_64-1.1.0       82098abb1a17        About an hour ago   1.52GB
hyperledger/fabric-ccenv       latest             c8b4909d8d46        About an hour ago   1.39GB
hyperledger/fabric-ccenv       x86_64-1.1.0       c8b4909d8d46        About an hour ago   1.39GB
......

使用三个终端

终端1 启动网络

$ cd ~/hyfa/fabric-samples/chaincode-docker-devmode/

该目录下有 myc.tx 文件

启动网络

$ sudo docker-compose -f docker-compose-simple.yaml up -d

终端2 建立并启动链码

打开第二个终端, 进入到chaincode-docker-devmode 目录

$ cd ~/hyfa/fabric-samples/chaincode-docker-devmode/

进入CLI

chaincode容器的作用是为发简化的方式建立并启动链码

$sudo docker exec -it chaincode bash

命令提示符变为:

root@858726aed16e:/opt/gopath/src/chaincode#

编译

进入sacc目录编译chaincode

root@858726aed16e:/opt/gopath/src/chaincode#  cd sacc
root@858726aed16e:/opt/gopath/src/chaincode/sacc#  go build

运行chaincode

CORE_PEER_ADDRESS=peer:7052
 CORE_CHAINCODE_ID_NAME=mycc:0 ./sacc

mycc: 链码名称

0: 链码初始版本号

终端3 使用链码

安装及实例化

$ cd ~/hyfa/fabric-samples/chaincode-docker-devmode/
$ sudo docker exec -it cli bash

进入CLI容器后执行如下命令安装及实例化chaincode

容器中已经有 myc.block myc.tx 两个文件, 可以直接使用

peer chaincode install -p chaincodedev/chaincode/sacc -n mycc -v 0
peer chaincode instantiate -n mycc -v 0 -c '{"Args":["a","10"]}' -C myc 

<font color=red>链码名与版本要与运行链码时设置的值一致</font>

调用

进行调用,将a的值更改为20

peer chaincode invoke -n mycc -c '{"Args":["set", "a", "20"]}' -C myc

执行成功, 输出如下内容

......
...... Chaincode invoke successful. result: status:200 payload:"20"
......

查询

查询a的值

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

执行成功, 输出: Query Result: 20

打包链码及签名

通过将链码相关数据进行封装, 可以实现对其进行打包和签名操作

打包

peer chaincode package -n mycc -p chaincodedev/chaincode/sacc -v 0 -s -S -i "AND('OrgA.admin')" ccpack.out

-s: 创建角色支持的CC部署规范包, 而不是原始的CC部署规范

-S: 如果创建CC部署规范方案角色支持,也与本地MSP签名

-i: 指定实例化策略

打包后的文件, 可以直接用于install操作, 如:

peer chaincode install ccpack.out

签名

对一个打包文件进行签名操作(添加当前MSP签名到签名列表中)

peer chaincode signpackage ccpack.out signedccpack.out

升级链码

退出终端3, 停止终端2的服务

终端2中重新运行chaincode

$ sudo docker exec -it chaincode bash

cd sacc
go build
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:1 ./sacc

注意版本为 1.0 , 旧版本为 0

终端3

打开终端3, 进入CLI容器

$ sudo docker exec -it cli bash

安装及升级

peer chaincode install -p chaincodedev/chaincode/sacc -n mycc -v 1

peer chaincode upgrade -n mycc -v 1 -c '{"Args":["a", "100"]}' -C myc 

注意版本号必须一致

在对某链码代码升级前, 推荐先将所有该链码的容器停止, 并从Peer上备份并移除旧链码部署文件. 之后先在个别Peer节点上部署新链码, 对原有数据进行测试, 成功后再在其它节点上进行升级操作

查询

查询a的值

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

执行成功, 输出: Query Result:100

感谢韩晓东(老韩)指导

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦