840 字
4 分钟
链码基本操作

链码基本操作#

链码操作流程#

用户可以通过命令行方式来管理链码。自 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 —help 来查看具体的命令使用说明。

这些操作管理了链码的整个生命周期,如下图所示。 20210201103024

首先,用户需要将链码安装到 Peer 节点,之后可以在 Peer 所属的某个通道内实例化链码容器。此时链码处于运行状态,应用可以通过 invoke 或 query 来调用链码。链码在一定时间(环境变量 CRC_MAX_IDLE_TIME 指定)内不被调用会处于空闲状态,自动被停止删除;如果被调用则重新实例化。此外,用户还可以升级链码到新的版本。

后面将以 Fabric 项目中自带的 Go 语言 example02 链码(路径在 examples/chaincode/go/chaincode_example02)为例进行相关命令讲解。

  • 说明:这些命令的实现位于 github.com/hyperledger/fabric/internal/peer/lifecycle。

1、上传安装链码#

Terminal window
#安装链码 -n name -v version
peer chaincode install -p chaincode/abstore/go -n mycc -v 0
peer 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 0

2、实例化初始化链码#

执行 instantiate 命令的用户身份必须满足实例化的策略(默认为通道内 MSP 管理员角色),并且在所指定的通道上拥有写(Write)权限。在 instantiate 命令中可以通过 -P 参数指定链码调用的背书策略(Endorsement Policy),在 Commit 阶段会进行策略检查。
peer chaincode instantiate -n bill -v 0 -c '{"Args":["init","tom","100","bob","200"]}' -C mychannel
peer 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 mychannel
peer chaincode query -n mycc -c '{"Args":["query","tom"]}' -C mychannel
peer 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 myc
peer chaincode query -n mycc -c '{"Args":["query","bob"]}' -C myc
删除tom账户实体
peer chaincode invoke -n mycc -c '{"Args":["delete","tom"]}' -C myc

至此我们对于chaincode的开发者模式的基本学习已经完毕,希望对大家有所收获

链码基本操作
https://blog.zhequtao.com/posts/golang/go-block/fabric2x/02链码基本操作/
作者
阿俊
发布于
2021-01-29
许可协议
CC BY-NC-SA 4.0

相关阅读