在WSL2下测试Fabric Go语言链码

安装WSL2和Docker

参考这里

安装Fabric环境

参考这里

添加Fabric源码

#linux中执行
cd ~/go
mkdir -p src/github.com/hyperledger
cd src/github.com/hyperledger
git clone -b release-1.4 https://github.com/hyperledger/fabric.git
#将项目名称改为fabric
#确保"github.com/hyperledger/fabric/core/chaincode/shim"可以被链码引入

修改链码路径

cd ~/go/fabric-samples/chaincode-docker-devmode
vim docker-compose-simple.yaml
#在chaincode容器的volumes下增加一行,将Windows中的链码路径映射到chaincode容器中
- /mnt/d/workspace/vscode/golang/vscode-chaincode:/opt/gopath/src/chaincode/vscode-chaincode
#在cli容器的volumes下增加一行,将Windows中的链码路径映射到cli登录的容器中
- /mnt/d/workspace/vscode/golang/vscode-chaincode:/opt/gopath/src/chaincodedev/chaincode/vscode-chaincode
#前面的路径代表Windows下的D:/workspace/vscode/golang/vscode-chaincode
#在这个路径下编写链码,会实时的映射到容器中

测试链码

终端1:开启测试网络

docker-compose -f docker-compose-simple.yaml up

终端2:编译运行链码

#进入chaincode容器
docker exec -it chaincode bash
#进入链码所在路径
root@287378d4e61d:/opt/gopath/src/chaincode# cd vscode-chaincode/data_sharing
root@287378d4e61d:/opt/gopath/src/chaincode/vscode-chaincode/data_sharing# ls
data_sharing.go
#注意一个文件夹下面只允许有一个链码
#编译链码
go build data_sharing.go
#运行链码
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=data_sharing:0 ./data_sharing
#链码名称后面接的是版本号

终端3:安装、实例化、调用链码

#进入cli容器(cli连接的是peer容器)
docker exec -it cli bash
#安装链码
peer chaincode install -p chaincodedev/chaincode/vscode-chaincode/data_sharing -n data_sharing -v 0
#实例化链码
peer chaincode instantiate -n data_sharing -v 0 -c '{"Args":[]}' -C myc
#查询链码
peer chaincode query -n data_sharing -c '{"Args":["query","a"]}' -C myc
#安装链码
peer chaincode invoke -n data_sharing -c '{"Args":["set","a","10"]}' -C myc

升级链码

修改链码后,可以通过关闭所有容器来关闭网络(注意删除所有相关的挂载卷,里面包括状态数据库、已创建的通道、已安装的链码),也可以直接升级链码,这样不用重启网络,比较方便。

终端2:编译运行新的链码

#编译新链码
go build data_sharing.go
#运行链码,链码名称不变,版本号要修改
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=data_sharing:1 ./data_sharing

终端3:安装、升级、调用链码

#安装新版本链码,版本号要和正在运行的链码版本一致
peer chaincode install -p chaincodedev/chaincode/vscode-chaincode/data_sharing -n data_sharing -v 1
#升级链码
peer chaincode upgrade -n data_sharing -v 1 -c '{"Args":[]}' -C myc -p chaincode/vscode-chaincode/data_sharing
#查询链码
peer chaincode query -n data_sharing -c '{"Args":["query","a"]}' -C myc
#安装链码
peer chaincode invoke -n data_sharing -c '{"Args":["set","a","10"]}' -C myc

需要注意的是,升级链码后,状态数据库还是原来的,旧版本的链码已经执行了一次构造函数,新版本的构造函数会再次执行,需要特别注意。

猜你喜欢

转载自blog.csdn.net/qq_33657251/article/details/104445138
今日推荐