0. 前言
现需要搭建一个基于PBFT共识机制的区块链网络,将使用fabric0.6实现。
0.1 环境介绍
ubuntu-desktop 16.04 amd64
Docker version 20.10.6
docker-compose version 1.27.0
1. 网络搭建
本文是基于yeasy/docker-hyperledger-fabric-peer项目搭建的网络。使用的链码为docker-compose-files/hyperledger_fabric/v0.6.0/。
除了参考上述两个项目中的readme,还参考了赵志明的博客。
1.1 下载docker镜像
docker pull yeasy/hyperledger-fabric-base:0.6-dp \
&& docker pull yeasy/hyperledger-fabric-peer:0.6-dp \
&& docker pull yeasy/hyperledger-fabric-membersrvc:0.6-dp \
&& docker pull yeasy/blockchain-explorer:latest \
&& docker tag yeasy/hyperledger-fabric-peer:0.6-dp hyperledger/fabric-peer \
&& docker tag yeasy/hyperledger-fabric-base:0.6-dp hyperledger/fabric-baseimage \
&& docker tag yeasy/hyperledger-fabric-membersrvc:0.6-dp hyperledger/fabric-membersrvc
这里不能吧&&丢了,赵的博客中把这个丢了,会报错。pull是下载镜像,tag是上传镜像,我的tag会报错,如下(权限不够),不过不影响后续部署。
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=yeasy%2Fhyperledger-fabric-peer&tag=0.6-dp: dial unix /var/run/docker.sock: connect: permission denied
使用
docker images
查看已经安装的docker镜像。
1.2 下载源码
这里下载pbft示例网络的源码。
下载后进入hyperledger_fabric/v0.6.0/pbft目录。
1.3 修改配置文件
使用4-peers.yml文件启动fabric网络,查看源码。可以看到peer.yml文件是它的配置文件。
再查看peer.yml。
12 services:
13 vp: # vp node no needing membersrvc
14 image: hyperledger/fabric-peer:latest
15 #image: yeasy/hyperledger-fabric-peer:0.6-dp
16 #image: hyperledger/fabric-peer:x86_64-0.6.1-preview
17 #image: ibmblockchain/fabric-peer:x86_64-0.6.1-preview
18 restart: unless-stopped
可以看到image默认的是hyperledger/fabric-peer:latest,这里我们要使用yeasy/hyperledger-fabric-peer:0.6-dp。将其修改为
12 services:
13 vp: # vp node no needing membersrvc
14 #image: hyperledger/fabric-peer:latest
15 image: yeasy/hyperledger-fabric-peer:0.6-dp
16 #image: hyperledger/fabric-peer:x86_64-0.6.1-preview
17 #image: ibmblockchain/fabric-peer:x86_64-0.6.1-preview
18 restart: unless-stopped
这里要注意缩进问题,image和restart是对齐的。
1.4 启动网络
启动有四个peer节点的以pbft为共识机制的fabric网络。
docker-compose -f 4-peer.yml up
打开另一个Teminal,使用
docker ps
查看正在运行的docker镜像。
1.5 部署链码并进行交易
本小节除了设置zzm的位置和赵志明的博客不同,其他均相同。
进入pbft_vp0_1节点
docker exec -it pbft_vp0_1 bash
#部署链码:
peer chaincode deploy -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'
#设置zzm变量为链码返回的唯一标识:
zzm="ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
#查询a账户的余额:
peer chaincode query -n ${zzm} -c '{"Function": "query", "Args": ["a"]}'
#a转账给b20元:
peer chaincode invoke -n ${zzm} -c '{"Function": "invoke", "Args": ["a", "b", "20"]}'
#查询a的余额为80元:
peer chaincode query -n ${zzm} -c '{"Function": "query", "Args": ["a"]}'
#查询b的余额为220元:
peer chaincode query -n ${zzm} -c '{"Function": "query", "Args": ["b"]}'
输出如下、
2. 其他
在第一次部署网络时并没有出现什么错误,而第二次出现了
Error handling message: Peer FSM cannot handle message (DISC_GET_PEERS)
这种错误,对交易的处理并没有什么影响,暂时搁置。