链码实践-账户管理

    科技2025-07-17  9

    链码实现账户管理

    前置要求: 了解Hyperledger Fabric链码基本运行步骤了解go语言基本规则

    文章目录

    链码实现账户管理1.参考:2.功能概述3. Golang实现4. 链码测试

    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 目录编译 chaincode

    cd 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 支付宝微信
    Processed: 0.015, SQL: 8