链码基本操作
链码操作流程
用户可以通过命令行方式来管理链码。自 2.0 开始正式使用新的 peer lifecycle chaincode 命令来维护链码的生命周期,所支持的链码子命令包括 package(打包)、install(安装)、queryinstalled(查询已安装)、approveformyorg(批准提交)、commit(提交)、querycommitted(查询已提交)。原有的 peer chaincode 系列命令仍然支持。
各个命令的功能总结如下表所示:
命令 发往组件 功能
package 本地操作 打包本地链码为部署 Spec 包
install Peer 节点 将链码信息打包并安装到 Peer
list Peer 节点 列出链码信息,包括某个 Peer 上安装过的链码或通道内实例化过的链码
instantiate Peer 节点和排序服务 在通道中实例化链码
invoke Peer 节点和排序服务 调用链码
upgrade Peer 节点和排序服务 升级链码
query Peer 节点 查询链码
可以通过 peer chaincode
这些操作管理了链码的整个生命周期,如下图所示。

首先,用户需要将链码安装到 Peer 节点,之后可以在 Peer 所属的某个通道内实例化链码容器。此时链码处于运行状态,应用可以通过 invoke 或 query 来调用链码。链码在一定时间(环境变量 CRC_MAX_IDLE_TIME 指定)内不被调用会处于空闲状态,自动被停止删除;如果被调用则重新实例化。此外,用户还可以升级链码到新的版本。
后面将以 Fabric 项目中自带的 Go 语言 example02 链码(路径在 examples/chaincode/go/chaincode_example02)为例进行相关命令讲解。
- 说明:这些命令的实现位于 github.com/hyperledger/fabric/internal/peer/lifecycle。
1、上传安装链码
#安装链码 -n name -v versionpeer chaincode install -p chaincode/abstore/go -n mycc -v 0peer chaincode install -p chaincode/bill -n bill -v 0
peer chaincode install -p chaincode/bill -n bill -v 0
进入cli容器中
docker exec -it cli bash
安装链码
peer chaincode install -p chaincode/abstore -n mycc -v 02、实例化初始化链码
执行 instantiate 命令的用户身份必须满足实例化的策略(默认为通道内 MSP 管理员角色),并且在所指定的通道上拥有写(Write)权限。在 instantiate 命令中可以通过 -P 参数指定链码调用的背书策略(Endorsement Policy),在 Commit 阶段会进行策略检查。peer chaincode instantiate -n bill -v 0 -c '{"Args":["init","tom","100","bob","200"]}' -C mychannelpeer chaincode instantiate -n mycc -v 0 -c '{"Args":["init","tom","100","bob","200"]}' -C mychannel
peer chaincode instantiate -o orderer.finebaas.com:7050 -C mychannel -n faceccd -v 1.0 -c '{"Args":["init"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')"
$ APP_CHANNEL="businesschannel" # 设置默认的通道名称$ peer chaincode instantiate \ -o orderer0:7050 \ -C ${APP_CHANNEL} \ -n test_cc \ -v 1.0 \ -c '{"Args":["init","a","100","b","200"]}' \ -P "OR ('Org1MSP.member','Org2MSP.member')" \ --collections-config collection.json \ --tls \ --cafile ${ORDERER_TLS_CA}12.开始执行我们chaincode的中的函数进行链码的基本操作(终端3)
新建账户实体
peer chaincode invoke -n mycc -c '{"Args":["create","lily","150"]}' -C mychannel
查询
peer chaincode query -n mycc -c '{"Args":["query","lily"]}' -C mychannelpeer chaincode query -n mycc -c '{"Args":["query","tom"]}' -C mychannelpeer chaincode query -n mycc -c '{"Args":["query","bob"]}' -C mychannel
转账
bob给lily转账10
peer chaincode invoke -n mycc -c '{"Args":["transfer","bob","lily","10"]}' -C myc
转账后再查询
peer chaincode query -n mycc -c '{"Args":["query","lily"]}' -C mycpeer chaincode query -n mycc -c '{"Args":["query","bob"]}' -C myc
删除tom账户实体
peer chaincode invoke -n mycc -c '{"Args":["delete","tom"]}' -C myc至此我们对于chaincode的开发者模式的基本学习已经完毕,希望对大家有所收获