手动搭建Fabric网络-编译源码方式

在看本文之前,请先阅读

区块链之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。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180608G0UY9U00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券