HyperLeger Fabric开发(二)——HyperLeger Fabric入门

本文使用RHEL 7.3 workstation版本操作系统。

一、HyperLeger Fabric环境部署

1、Go语言开发环境部署

(1)Go语言环境安装 Go语言环境安装包下载地址: https://golang.org/dl/ https://golang.google.cn/dl/ 将下载的源码包解压至/usr/local目录 sudo tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz 将/usr/local/go/bin目录添加至PATH环境变量 export PATH=$PATH:/usr/local/go/bin (2)GOPATH环境变量设置

GOPATH=/home/user/GoLang:/home/user/dev
export GOPATH

为了使用方便,通常需要将所有工作空间的bin路径添加到PATH环境变量中,如: export $PATH:$GOPATH/bin 如果$GOPATH有多个工作目录,使用 ${GOPATH//://bin:}/bin 添加所有的bin目录。 export $PATH:${GOPATH//://bin:}/bin

2、Docker工具安装

yum install docker

3、HyperLeger Fabric下载

GitHub地址:https://github.com/hyperledger/fabric (1)go get下载 使用Go语言工具go get从HyperLeger Fabric项目的GitHub地址下载HyperLeger Fabric: go get -u -v github.com/hyperledger/fabric (2)git clone下载 HyperLeger Fabric项目大小约76MB,如果使用go get工具下载速度慢,可以使用git clone下载: 创建hyperledger目录: mkdir -p $GOPATH/src/github.com/hyperledger 切换到hyperledger目录: cd $GOPATH/src/github.com/hyperledger git clone下载: git clone https://github.com/hyperledger/fabric.git

二、HyperLeger Fabric工具部署

1、HyperLeger Fabric版本切换

进入HyperLeger Fabric项目所在源码目录: cd $GOPATH/src/github.com/hyperledger/fabric 切换到release-1.0版本: git checkout release-1.0

2、configtxgen工具安装

configtxgen工具用于生成Fabric的配置构件。 切换到configtxgen目录: cd common/configtx/tool/configtxgen 编译安装: go install 报错: fatal error: ltdl.h: No such file or directory 安装Itdl: yum install libtool-ltdl-devel 继续编译安装: go install 目标工具被安装到$GOPATH/bin目录下。

3、cryptogen工具安装

cryptogen工具用于生成Fabric证书和密钥。 切换到cryptogen源码目录: cd common/tools/cryptogen 编译安装: go install 目标工具被安装到$GOPATH/bin目录下。

三、部署第一个Fabric网络

1、fabric-samples项目下载

fabric-samples项目包含first-network等HyperLeger Fabric项目的多个示例。 https://github.com/hyperledger/fabric-samples.git 下载fabric-samples项目到$GOPATH/src/github.com/hyperledger: git clone https://github.com/hyperledger/fabric-samples.git

2、切换到first-network示例源码目录

切换到first-network示例: cd $GOPATH/src/github.com/hyperledger/fabric-samples/first-network 切换到release-1.0版本: git checkout release-1.0 first-network源码目录如下: first-network示例即BYFN(build your first network),BYFN方案规定了一个由两个组织组成的简单HyperLeger Fabric网络,每个组织维护有两个对等节点和一个solo排序服务。 byfn.sh脚本利用Docker镜像快速引导BYFN(build your first network)示例网络,BYFN网络由代表两个不同组织的4个对等节点和一个排序节点组成。 byfn.sh脚本会启动容器运行一个脚本,脚本用于将对等节点加入一条通道,部署和实例化链码,并驱动在部署的链码上执行交易。

3、生成BYFN示例网络构件

byfn.sh脚本提供了生成网络构件的功能,用于生成不同网络实体的所有证书和密钥,用于引导排序服务的创始块以及配置通道所需的交易配置的集合。命令如下: ./byfn.sh -m generate -c scorpio -i 1.0.0 byfn.sh -m generate:使用cryptogen和configtxgen生成网络构件 -c:指定通道名称 -i:指定版本

[user@localhost first-network]$ ./byfn.sh -m generate -c scorpio -i 1.0.0
Generating certs and genesis block for with channel 'scorpio' and CLI timeout of '10'
Continue (y/n)? y
proceeding ...
/home/user/GoLang/bin/cryptogen

##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################
org1.example.com
org2.example.com

/home/user/GoLang/bin/configtxgen
##########################################################
#########  Generating Orderer Genesis block ##############
##########################################################
2018-10-21 15:52:45.442 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.467 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block
2018-10-21 15:52:45.469 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block

#################################################################
### Generating channel configuration transaction 'channel.tx' ###
#################################################################
2018-10-21 15:52:45.479 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.482 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2018-10-21 15:52:45.482 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

#################################################################
#######    Generating anchor peer update for Org1MSP   ##########
#################################################################
2018-10-21 15:52:45.494 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.497 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-10-21 15:52:45.498 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

#################################################################
#######    Generating anchor peer update for Org2MSP   ##########
#################################################################
2018-10-21 15:52:45.508 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.513 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-10-21 15:52:45.513 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

cryptogen用于为各种网络实体生成加密材料(x509证书和签名密钥)。x509证书代表身份/标识,允许在实体进行通信和交易时进行签名/验证身份验证。 cryptogen(fabric证书/密钥生成工具)使用一个配置文件crypto-config.yaml(包含网络拓扑)为组织和属于组织的组件(peer/orderer)生成一组证书和密钥。每个组织都配置了一个唯一的根证书(ca-cert),用于将特定组件(peer和orderer)绑定到组织。通过为每个组织分配唯一的CA证书,可以模仿典型的网络,网络中的成员将使用其自己的证书颁发机构。 Hyperledger Fabric中的交易和通信由实体的私钥(密钥库)签名,然后通过公钥(签名)进行验证。 cryptogen工具生成的证书和密钥将保存到crypto-config目录,目录结构如下: configtxgen使用一个configtx.yaml文件,configtx.yam定义了一个示例网络,网络中有一个排序服务组织OrdererOrg以及两个对等节点组织(Org1,Org2),每个组织管理和持有2个对等节点。configtx.yam文件还指定了一个SampleConsortium的联盟,由2个对等节点组织构成。需要特别注意文件顶部的Profiles部分,有两个唯一的头部信息,一个是排序节点的创世区块TwoOrgsOrdererGenesis,一个是通道TwoOrgsChannel。这两个头部信息会在创建网络构件时作为参数。 configtx.yaml文件也包含两个需要的额外规格说明。首先,指定了两个对等节点组织的对等节点(peer0.org1.example.com,peer0.org2.example.com);其次,指明了每个成员的MSP目录位置(MSPDir指定),从而允许在排序节点的创世块中存储每个组织的根证书。目前,任何网络实体和排序服务通信都必须要进行数字签名认证。

4、启动BYFN示例

启动first-network,使用-i参数指定版本为1.0.0: ./byfn.sh -m up -c scorpio -i 1.0.0 byfn.sh -m up:启动BYFN示例 首次启动first-network时,会从Docker镜像仓库下载下列三个镜像:

docker.io/hyperledger/fabric-orderer:x86_64-1.0.0
docker.io/hyperledger/fabric-peer:x86_64-1.0.0
docker.io/hyperledger/fabric-tools:x86_64-1.0.0

5、关闭BYFN示例

./byfn.sh -m down -c scorpio 用于关闭BYFN网络,会关闭容器,移除加密材料和4个配置信息,并且从Docker仓库删除链码镜像。

7、故障排除

再次启动BYFN网络示例前,必须先关闭BYFN网络,删除生成的证书、容器、网络构件以及链码镜像等。如果不关闭BYFN网络,将会导致创建通道失败。错误如下:

!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========