正常情况下chaincode由对等体启动和维护。然而,在“开发模式”下,链码由用户构建并启动
如果没有安装Hyperledger Fabric Samples请先安装
如果没有下载Docker images请先下载
跳转至fabric-samples的chaincode-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
            
            
      
      
                
                
