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) 

这种错误,对交易的处理并没有什么影响,暂时搁置。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐