链码实现账户管理
- 前置要求:
- 了解Hyperledger Fabric链码基本运行步骤
- 了解go语言基本规则
1.参考:
- BTCU: 高校区块链训练营-联盟链-5全方位认识链码
- BTCT:高校区块链训练营-联盟链-6链码开发与实践
2.功能概述
此版本中为了开发简单,账户金额统一用int
类型表示,以后如果有时间的话可能会升级为float
类型,整体功能比较简单,共有增删改查4个操作:
-
查询操作:查询指定账户的余额,查询命令如下
'{"Args":["query","a"]}'
-
创建操作:创建一个新的账户,命令如下:
{"Args":["create","b","100"]}'
-
转账操作:两个账户之间互相转账,命令如下:
'{"Args":["transfer","a","b","10"]}'
-
删除账户:删除指定账户,并将该账户余额转移给初始账户,命令如下:
'{"Args":["unsubscribe","b"]}'
3. Golang实现
-
创建目录
# *代表fabric-samples的所有上级目录 cd ~/*/fabric-samples/chaincode sudo mkdir accountManage cd accountManage
-
创建并编辑链码文件
vim account.go
-
链码源代码github
4. 链码测试
使用 cd 跳转至 fabric-samples 的 chaincode-docker-devmode 目录
-
终端1 启动网络
sudo docker-compose -f docker-compose-simple.yaml up -d
在执行启动网络的命令之前确保无 Fabric 网络处于运行状态,如果有网络在运行,请先关闭。
-
终端2 建立并启动链码
-
2.1 打开一个新终端2,进入 chaincode 容器
sudo docker exec -it chaincode bash
-
2.2 编译
进入 accountManage 目录编译 chaincodecd accountManage go build
-
2.3 运行chaincode
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=test:0 ./test
命令执行后输出如下:
[shim] SetupChaincodeLogging -> INFO 001 Chaincode log level not provided; defaulting to: INFO [shim] SetupChaincodeLogging -> INFO 002 Chaincode (build level: ) starting up ...
-
-
终端3 测试
-
3.1 打开一个新的终端3,进入 cli 容器
sudo docker exec -it cli bash
-
3.2 安装链码
peer chaincode install -p chaincodedev/chaincode/test -n test -v 0
-
3.3 实例化链码
peer chaincode instantiate -n test -v 0 -c '{"Args":["a","10"]}' -C myc
-
3.4 创建新账户
peer chaincode invoke -n test -c {"Args":["create","b","100"]}' -C myc
执行成功,输出如下内容:
...... [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 0a8 Chaincode invoke successful. result: status:200
-
3.5 查询
指定调用 query函数,查询 a 的值peer chaincode query -n test -c '{"Args":["query","a"]}' -C myc
执行成功, 输出: 10
指定调用 query函数,查询b的值
peer chaincode query -n test -c '{"Args":["query","b"]}' -C myc
执行成功, 输出: 100
-
3.6 转账
调用transfer函数,从b账户转10到a账户
peer chaincode invoke -n test -C myc -c '{"Args":["transfer","b","a","10"]}'
然后根据3.5 查询 a,b账户确认是否转账成功
-
3.6 删除b账户
调用unsubscrib函数,删除b账户
peer chaincode invoke -n test -C myc -c '{"Args":["unsubscribe","b"]}'
然后根据3.5 查询 b账户确认是否删除成功
-
-
关闭网络:
退出所有的容器Ctrl d
,然后在宿主机的终端中(就是提示符前面是 xxxx@ubuntu:~/xxx/xxx/ 之类的,不是以 root 开头的),运行:sudo docker-compose -f docker-compose-simple.yaml down docker volume prune
支付宝 | 微信 |
---|---|
![]() | ![]() |