使用hyperledger fabric构建你的第一个区块链网络
摘要:本文仅描述在单台 mac 机器上使用 docker 创建一个 fabric 区块链网络
安装依赖工具
下载 fabric sample 项目
1
2
3
4
5mkdir $HOME/work
cd $HOME/work
git clone https://github.com/hyperledger/fabric-samples.git
cd fabric-samples
git checkout -b release将源代码切换到 release 分支比较好,master 分支可能会有隐藏的 bug。
下载平台相关的二进制文件和 docker 镜像文件
1
2cd $HOME/work
curl -sSL https://goo.gl/eYdRbX -o fabric-samples.sh脚本内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
export VERSION=1.0.1
export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}')
#Set MARCH variable i.e ppc64le,s390x,x86_64,i386
MARCH=`uname -m`
dockerFabricPull() {
local FABRIC_TAG=$1
for IMAGES in peer orderer couchdb ccenv javaenv kafka zookeeper tools; do
echo "==> FABRIC IMAGE: $IMAGES"
echo
docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG
docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES
done
}
dockerCaPull() {
local CA_TAG=$1
echo "==> FABRIC CA IMAGE"
echo
docker pull hyperledger/fabric-ca:$CA_TAG
docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca
}
: ${CA_TAG:="$MARCH-$VERSION"}
: ${FABRIC_TAG:="$MARCH-$VERSION"}
echo "===> Downloading platform binaries"
curl https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/${ARCH}-${VERSION}/hyperledger-fabric-${ARCH}-${VERSION}.tar.gz | tar xz
echo "===> Pulling fabric Images"
dockerFabricPull ${FABRIC_TAG}
echo "===> Pulling fabric ca Image"
dockerCaPull ${CA_TAG}
echo
echo "===> List out hyperledger docker images"
docker images | grep hyperledger*该脚本会下载一些平台相关的二进制文件,如 cryptogen、configtxgen 等,下载的二进制文件会放在 bin 目录下,注意将该目录加入系统环境变量 PATH 中,如下设置:
1
2
3cd $HOME/work
sh ./fabric-samples.sh
echo "export PATH="$HOME/work/bin:$PATH"" >> $HOME/.profile同时,脚本还会下载相关的 docker 镜像,如 hyperledger/fabric-peer, hyperledger/fabric-orderer 等,下载镜像过程可能会比较慢,建议使用daocloud或是阿里云加速
获取区块链建链脚本帮助文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18cd $HOME/work/fabric-samples/first-network
./byfn.sh -h
Usage:
byfn.sh -m up|down|restart|generate [-c <channel name>] [-t <timeout>]
byfn.sh -h|--help (print this message)
-m <mode> - one of 'up', 'down', 'restart' or 'generate'
- 'up' - bring up the network with docker-compose up
- 'down' - clear the network with docker-compose down
- 'restart' - restart the network
- 'generate' - generate required certificates and genesis block
-c <channel name> - config name to use (defaults to "mychannel")
-t <timeout> - CLI timeout duration in microseconds (defaults to 10000)
Typically, one would first generate the required certificates and
genesis block, then bring up the network. e.g.:
byfn.sh -m generate -c <channelname>
byfn.sh -m up -c <channelname>生成相关证书,启动和停止区块链网络
1
2
3./byfn.sh -m generate
./byfn.sh -m up
./byfn.sh -m down- generate 的作用:
- 调用 cryptogen 生成证书树,在区块链的运作过程中,每个节点都要使用证书对自己所生成的内容进行签名,其他节点都也需要证书对数据进行验证。
- 调用 configtxgen 生成‘上帝区块’和‘通道初始信息’
- up,使用 docker-compose 启动区块链网络
- down,停止区块链网络
- generate 的作用:
6) ### 相关名词解释
- peer,节点,区块链组网基本单元,主要作用:
- 负责对客户端发起的交易进行背书
- 记账
- anchor peer,锚(主)节点,用来跨组织进行通信的节点
- orderer, 排序节点,通过对客户端发起的交易进行排序,其结果将发布到 peer 进行记账,orderer 节点是区块链共识算法的主要执行者,orderer 节点依据共识算法的不同,可以是 1 台机器,也可以是多台机器组成共识网络,fabric 支持集成 kafka、zookeeper 等
- channel, 通道,更好的说法是‘子账本’,在一个区块链网络中,允许存在多个子账本,子账本之间互相隔离,一个通道里可以包含多个 peer 和 order。
- ca,fabric 的认证授权管理,支持基于数据库和LDAP认证的方法
- genesis block, 上帝区块,链中第 1 个区块
- msp, 成员服务提供商
7) ### crypto-config.yaml 文件说明
1 | - Name: Orderer |
crypto-config.yaml 文件是 cryptogen 的配置文件,crypto-config.yaml 文件定义了整个 fabric 网络的组织结构。有如下关键因素。
1 | * OrdererOrgs 定义orderer组织结构 |
8) ### configtx.yaml
1 | # Copyright IBM Corp. All Rights Reserved. |
configtxgen 根据 configtx.yaml 的配置来生成‘上帝区块’和‘channel’信息,上例中定义了 2 个配置。
1 | * TwoOrgsOrdererGenesis 第1个配置名称,一般取比较有意义的名字,这里意思是包含2个组织的上帝区块配置说明 |
9) ### 总结
hyperledger fabric 的工具比较多,概念也不少,理解起来有一定的门槛。个人认为先要理解一些基本概念,再参考官方文档尝试搭建区块链网络,尝试写 1 个合约,尝试与现有系统集成。再深入理解 crypto-config.yaml 和 configtx.yaml 文件,当然,这需要一定的时间和坚持。
10) ### 免责声明
hyperledger fabric 的配置信息相对还是比较复杂的,且中文文档较少,以上内容只是个人理解,如有错误之处,万望指正。