使用hyperledger fabric构建你的第一个区块链网络
摘要:本文仅描述在单台 mac 机器上使用 docker 创建一个 fabric 区块链网络
- 安装依赖工具
- 下载 fabric sample 项目- 1 
 2
 3
 4
 5- mkdir $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 
 2- cd $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
 3- cd $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
 18- cd $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 的配置信息相对还是比较复杂的,且中文文档较少,以上内容只是个人理解,如有错误之处,万望指正。
