在看本文之前,请先阅读
区块链之Hyperledger(超级账本)Fabric v1.0 的环境搭建【单机】
下载Hyperledger Fabric的源码。
通过编译源码的方式手动搭建Fabric网络有助于理解Fabric的运行启动过程。
一、网络拓扑
启动fabric网络,包括一个Orderer节点和四个Peer节点,以及一个管理节点生成相关启动文件,在启动网络后作为操作客户端执行命令。
四个Peer子节点分属于用一个管理域(example.com)下的两个组织Org1和Org2,这两个组织都加入同一个应用通道(business-channel)中。每个组织中的第一个节点(peer0 节点)作为锚节点与其他组织进行通信,所有节点通过域名都可以相互访问,整体网络拓扑如下:
二、编译组件
第一部分主要工作是编译后面需要的组件,主要使用make命令来生成相关组件。这里先简单介绍make与MakeFile文件,然后在详细介绍如何来一步步编译相关组件。
1、make工具
对于Linux跟Unix系统而言,make是一个极其重要的编译命令。
make工具最基本的功能是调用Makefile文件,通过Makefile文件来描述程编译的整个过程,不必每次敲gcc或g++等命令来完成编译工作。当然,Makefile文件需要按照一定的语法进行编写,说明如何编译各个源文件并链接生成可执行文件,以及各个文件之间的依赖关系。
在本文中,对于工具cryptogen和configtxgen的生成,Fabric源码提供了专门编译cryptogen的入口。而peer和Orderer的生成,则是通过编译Fabric源码来生成的。
2、编译生成cryptogen
我们既然获得了Fabric的源代码,那么就可以轻易的使用make命令编译需要的程序。Fabric官方提供了专门编译cryptogen的入口,我们只需要运行以下命令即可:
3、编译生成configtxgen
configtxgen的作用是生成配置区块和配置交易。与前面1.1说到的类似,我们可以通过make命令生成configtxgen程序:
以上生成的工具在根目录fabric的build/bin中。
4、编译生成Orderer
使用make工具
5、编译生成peer
使用下面的命令进行编译
完成后,Orderer组件在build/bin文件夹中。最终该文件下中有以下几个工具:
6、可能遇到的Bug
一路走过来并非一帆风顺的!这里将编译组件过程中遇到的Bug及其解决办法贴出来。
解决办法:
三、环境准备
建立存放配置文件和证书的文件夹
先在~/fabric-demo/networks下建立如下结构的目录:
shell命令:
准备fabric组件和证书生成工具等
在~/fabric-demo文件下建立一个bin文件,并将fabric/build/bin目录下的所有文件拷贝至该目录下:
将~/fabric-demo/bin加入环境变量
其中该文件中环境变量如下:
最后更新一下环境变量的值:
四、准备相关配置文件
1、生成组织关系和身份证书
Fabric网络提供的是联盟链服务,联盟由多个组织构成,组织中的成员提供了节点服务来维护网络,并且通过身份来进行权限管理。
因此,首先需要对各个组织和成员的关系进行规划,分别生成对应的身份证书文件,并部署到其对应的节点上。
Fabric项目提供了 cryptogen 工具(基于 crypto标准库)实现自动化生成。这一过程首先依赖crypto-config.yaml配置文件。
crypto-config.yaml配置文件的结构十分简单,支持定义两种类型( OrdererOrgs和 PeerOrgs)的若干组织。每个组织中又可以定义多个节点(Spec)和用户(User)。
在~/fabric-demo目录下运行下面的shell命令:
命令执行成功后,networks/single-dev-env/config/crypto-config目录下生成了如下结构的证书目录:
2、生成Ordering服务启动初始区块
编写一个configtx.yaml文件(放在single-dev-env/config目录下):
sudo vi /etc/hosts修改/etc/hosts,追加上如下内容并保存:
设置FABRIC_CFG_PATH环境变量告诉configtxgen去哪个目录寻找configtx.yaml文件,在终端在~fabric-demo根目录下,执行如下命令:
在~fabric-demo根目录下,执行如下命令:
命令执行成功后,networks/single-dev-env/config目录下就多了一个genesis.block文件。
3、生成新建应用通道的配置交易
使用终端中,进入fabric-demo根目录,执行如下命令:
命令执行成功后,networks/single-dev-env/config/channel-artifacts目录下多了一个channel.tx文件。
4、生成锚节点配置更新文件
锚节点配置更新文件可以用来对组织的锚节点进行配置。
执行如下命令:
命令执行成功后,networks/single-dev-env/config/channel-artifacts目录下多了一个Org1MSPanchors.tx文件。
五、启动Orderer节点
生成Orderer节点启动环境变量配置文件
参照sampleconfig/orderer.yaml,编写orderer.yaml放在networks/single-dev-env/config目录下面
特别注意以下三个变量的设置地址:
ORDERER_GENERAL_GENESISFILE
ORDERER_GENERAL_LOCALMSPDIR
ORDERER_GENERAL_LOCALMSPID
运行如下命令,启动Orderer节点:
Orderer启动成功后,控制台输出如下:
六、启动Peer节点
生成Peer节点启动环境变量配置文件
参照sampleconfig/core.yaml,编写core.yaml放在networks/single-dev-env/config目录下面
特别注意以下两个变量的设置地址
CORE_PEER_LOCALMSPID
CORE_PEER_MSPCONFIGPATH,
新开一个终端运行如下命令,启动Peer节点:
peer启动成功后,控制台输出如下:
七、操作网络
1、创建通道
新打开一个终端,切换到~/fabric--demo目录,运行如下命令:
执行成功后,当前目录生成了一个businesschannel.block文件:
2、加入通道
在终端~/fabric-demo目录下执行如下命令:
执行成功后,终端输入日志:
peer节点成功加入通道中!
3、更新锚节点配置
锚节点负责代表组织与其他组织中的节点进行Gossip通信。
执行如下命令:
八、测试链码
Peer加入应用通道后,可以执行链码相关操作,进行测试。链码在调用之前,必须经过安装(Install)和实例化(Instantiate)两个步骤,部署到Peer节点。
通过如下命令在客户端安装示例链码chaincode_example02到Org1的Peer0上:
1、安装
2、实例化
3、调用链码
使用invoke操作把A的余额转10到B
接下来,再使用query操作查询A的余额:
发现确实少了10。
领取专属 10元无门槛券
私享最新 技术干货