从零开始部署区块链超级账本网络

2020-12-29 11:56林剑宏
电脑知识与技术 2020年30期
关键词:搭建网络系统区块链

林剑宏

摘要:区块链是一种颠覆现有格局的底层技术架构体系。区块链超级账本Hyperlegder Fabric 1.0网络系统的部署涉及硬件、软件等多种工具和技术环境的搭建。为了减少在部署Fabric过程中出现的错误,文章通过演示在实际生产环境下的搭建操作,从零开始详细介绍了部署区块链Hyperlegder Fabric 1.0网络系统的全过程,使初学者能够快速高效地体验Fabric网络系统的核心功能。

关键词:区块链;Hyperlegder Fabric;网络系统;部署;搭建

中图分类号:TP316.4        文献标识码:A

文章编号:1009-3044(2020)30-0050-04

Abstract: Blockchain is an underlying technology architecture system that subverts the existing pattern. The deployment of the blockchain hyperledger fabric 1.0 network system involves the construction of hardware, software and other tools and technical environment. In order to reduce the errors in the process of deploying fabric, this paper introduces the whole process of deploying the blockchain hyperlegder fabric 1.0 network system in detail from scratch by demonstrating the construction operation in the actual production environment, so that beginners can experience the core functions of fabric network system quickly and efficiently.

Key words:Blockchain; Hyperlegder Fabric; network system ; deployment; Build

1 引言

区块链[1]的概念由学者“中本聪”研究者(或研究团队)于2008年提出,区块链(Blockchain)是一种源自比特币的分布式存储机制数据库,数据库的核心内容是通过一串使用非对称加密算法、安全散列算法等密码学方法产生的数据块(block),使得用户可以在任意节点中参与系统数据的维护。目前主要有如下几种主流的区块链技术平台:比特币(Bitcoin)、以太坊(Ethereum)、和Linux基金会的开源项目超级账本(Hyperledger Fabric)、EOS企业级区块链操作系统(Enterprise Operation System)。超级账本HyperLedger Fabric作为一个典型的区块链技术平台,是一个带有可插入各种功能模块架构的区块链实施方案,目标是打造成一个由全社会共同维护的开源超级账本。HyperLedger Fabric系统上没有中心机构拥揽权力,我们的每一笔交易都是全网公开并且安全的,信用由全社会共同认证;超级账本具有强大的容器技术来支持任何主流的语言来开发智能合约(链码)。因此,通过由浅入深、循序渐进地掌握超级账本HyperLedger Fabric 1.0网络系统的部署全过程,将能够进一步搭建符合自身业务场景的区块链网络平台,利用区块链Fabric技术实现具有去中心化、信息不可篡改的区块链应用项目。

2 HyperLedger Fabric系统的环境搭建

2.1 基础环境

根据区块链超级账本HyperLedger Fabric的官方技术文档,Fabric系统能够部署在Linux操作系统、Windows操作系统以及苹果电脑的MAC等操作系统上,但是在生产环境中,鉴于稳定性、兼容性和安全性的要求,一般都是将Fabric系统部署在Linux操作系统之上。本文的实验演示环境采用了64位的Ubantu 16.04LTS, 系统内核为GNU/Linux4.15.0-51-generic_x86_64。如果读者的常用操作系统为Windows系统,可以通过采用虚拟机VM的方法来安装Ubantu系统。硬件资源要求:内存最低为2Gb以上,磁盘空间最低为30Gb以上,本实验演示环境采用了4Gb 的内存和40Gb的磁盘空间。

2.2 工具软件

首先,超级账本HyperLedger Fabric网络的运行环境需要安装git工具,git是一个非常优秀的免费、开源的版本管理控制工具,我们可以使用git工具方便地下载各个官方源代码文件,例如:Golang、Hyperledger Fabric等在Github网站上发布的相关源代码或其它数据。在Ubantu系统中通过敲打键盘上的“Ctrl+Alt+T”组合键调出终端,然后输入命令: sudo apt-get install git 即可。接着,下载并安装开发基于区块链应用的重要技术Node.js[2],Node.js通过Google的JavaScript V8引擎解析JavaScript代碼。另外,还需要在Ubantu系统中安装vim、tree、npm等工具及管理软件。

2.3 Docker和Docker-Compose的安装配置

HyperLedgerFabric1.0 依赖Docker容器执行智能合约chaincode,Docker [3]是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 App),更重要的是容器性能开销极低。

首先,安装依赖包后在终端输入如下命令安装docker容器:sudo apt-get install docker-ce, 在终端输入命令测试Docker:sudo docker pull hello-world,同时可以查看Docker版本:docker --version。Docker Compose的主要功能是能够在一台主机上创建出相互隔离的多个网络,并通过命令行管理多人Docker容器。我们可以使用如下命令来安装docker-compose工具:sudo curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose,安装成功后,执行如下命令查看Docker-Compose版本信息: docker-compose –version。

2.4 安装配置go语言

Golang(go语言) 是HyperLedger Fabric区块链系统底层以用智能合约chaincode的开发语言。我们可以通过使用wget工具来下载Golang的最新版本压缩包文件 go1.12.5.linux-amd64.tar.gz,在终端输入如下命令行下载go 语言:$ wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz,接着,使用 tar 命令将下载后的压缩包文件解压到指定的 /usr/local/ 路径下,在终端输入如下命令:$ sudo tar -zxvf go1.12.5.linux-amd64.tar.gz -C /usr/local/ 。最后,还要配置go 语言环境变量,解压源文件之后,为了使go 语言能够对系统的所有用户开放正常使用,所以我们采用 vim 文件编辑工具打开系统的 profile 文件进行编辑:$ sudo vim /etc/profile 并且在profile文件最后添加如下内容:export GOPATH=$HOME/go ;export GOROOT=/usr/local/go ;export PATH=$GOROOT/bin:$PATH。使用 source 命令,使刚刚添加的配置信息生效:$ source /etc/profile。最后,通过 go env命令验证是否正确完成go语言的安装配置。

3超级账本HyperLedger Fabric的安装和编译

3.1 下载超级账本HyperLedger Fabric源代码

首先,通过在终端命令行上输入如下命令创建工程目录:sudo mkdir -p /project/goworkspace/src/github.com/hyperLedger 。接着执行命令切换到工程目录,然后在终端上输入如下命令下载Fabric源代码:git clone -b release-1.0 https://github.com/hyperledger/fabric 。完成Fabric源代碼的下载后,下一步还需要下载安装fabric-samples存储库,执行如下命令即可下载fabric-samples存储库到当前目录下:

git clone -b release-1.0 https://github.com/hyperledger/fabric-samples。

3.2 编译HyperLedger Fabric源代码

Hyperledger Fabric 可以有两种方式进行编译安装,第一种方式(bootstrap.sh脚本方式)进行环境的安装,优点是简单、方便,能够快速上手;第二种方式是以 Fabric 源码方式进行编译,适合动手能力较强的人员,优点是可以对 Hyperledger Fabric 相关组件有深入的理解,但缺点是容易出现各种错误且修正比较麻烦。为了使读者能够更进一步了解Hyperledger Fabric系统各个核心模块的功能,本文采用了第二种方式对 Fabric 源码进行直接手动编译。我们在Fabric源代码所在的文件夹下,执行如下命令:make release可以对Fabric进行编译。

3.3  HyperLedger Fabric模块的安装

完成对Fabric源代码的编译之后,这些模块就可以被运行了,但是目前只能在编译文件所在的文件夹中运行Fabric模块,这样是非常不方便的。为了更加方便地使用这些模块,可以通过下面的命令将Fabric模块的可执行文件复制到系统目录中,这样在系统中的任何路径下面都能运行这些可执行这些模块:复制成功之后通过以下命令修改各个Fabric模块文件的执行权限,否则无法行这些模块。进入Fabric模块所在目录下,接着依次执行下面命令对Fabric各个核心模块文件执行权限的配置:sudo chmod -R 777 /usr/local/bin/configtxgen 。完成对Fabric各个核心模块文件执行权限的配置后即可正确运行并使用Fabric核心模块的功能。可以通过如下命令来检查Fabric模块安装过程是否成功:peer version。

3.4 采用Docker运行Fabric模块

除了前面介绍的直接编译源代码的方式,还可以通过Docker来运行这些模块。通过Docker运行Fabric相关模块有两种方法:通过本地源代码生成Fabric模块的Docker镜像文件和从Docker仓库中下载Fabric模块的镜像文件。下面将介绍这两种方法的详细步骤。第一是通过本地源代码生成Fabric模块的Docker镜像通过本地源代码生成Fabric模块的Docker镜像文件是非常简单的,具体的操作命令为:make docker,上诉命令的执行过程涉及从docker的远程服务器中下载文件,因此需要等待一段时间,具体的安装时间视网络情况而定。在执行命令的过程中需要保持网络畅通。

第二种方法是从Docker仓库中下载Fabric模块的Docker镜像文件。为了方便用户使用Fabric,Fabric开发小组会定期将Fabric稳定版本的源代码编译之后制作成Docker镜像文件,然后把这些Docker镜像文件上传到Docker仓库中供下载使用。

4 HyperLedger Fabric系统的部署

通过上面对的Hyperledger Fabric系统的开发环境搭建之后,我们接下来就可以启动相关的Fabric模块进行Fabric系统的部署。

4.1 生成Fabric系统的成员证书文件

成员管理服务MSP[4] (Merbership Service Provider)在许可区块链/联盟链Hyperledger Fabric上认证、授权和管理身份。在对等节点和排序服务节点中运行成员管理服务的代理。MSP为客户端、peer节点、Orderer节点等提供PKI数字证书以及管理组织成员身份。在MSP机制下,每个节点都拥有自己的证书,每个节点发出去的消息都会用自己的证书进行签名,同时对端节点可以对这些消息进行真伪验证。启动Fabric之前首先需要生成相关的成员证书,一般情况下,MSP证书可以通过cryptogen模块生成,同时可以由Fabric-CA管理。本文的案例采用cryptogen模块生成MSP证书,cryptogen模块会根据提供的配置文件生成后续模块运行过程中需要的证书和数据文件。在生成证书之前我们需要创建一个文件夹存放配置文件和生成的证书文件。本例中我们将配置文件和生成的证书文件放在文件夹/opt/hyperledger/fabricconfig中。创建存放证书的文件夹的命令如下所示: mkdir -p /opt/hyperledger/fabricconfig。cryptogen模块提供了一个命令可以获取cryptogen模块所需要的配置文件的样式,该命令为: cryptogen showtemplate 。把上述命令生成的内容复制到一个文件中稍加修改即可使用。打开终端并执行命令:sudo gedit crypto-config.yaml , 将配置文件的内容保存到文件夹/opt/hyperledger/fabricconfig中,配置文件夹命名为crypto-config.yaml。保存之后依次执行如下命令生成2个组织org1.sy.com和org2.sy.com。然后我们会发现在文件夹/opt/hyperledger/fabricconfig中会新增加一个文件夹crypto-config,里面存放着本例的相关配置文件,可以通过在终端执行命令:tree-L 5查看生成证书文件的内容。

4.2 创建Fabric系统的创世区块

创世区块是初始化区块链网络或通道的配置区块,也是区块链上的第一个区块。利用congfigtxgen模块生成Fabric系统创世区块和Channel创始区块的配置文件。创世区块Genesis Block是初始化區块链网络或channel的配置区块,也是本Fabric系统区块链上的第一个区块。首先进入Order的目录下,通过执行如下命令即可生成基于Fabric的区块链系统创世区块, 系统创世区块的创建如下图1所示:

4.3 创建Fabric系统的账本创世区块

账本[5]是通道中的区块链和通道中每个节点维护的世界状态的集合。在Fabric中称为通道Channel,本文后续内容中用Channel表示,Channel是Fabric中非常重要的概念,一个Channel表示一个账本。Fabric和其他区块链平台最大的区别是Fabric支持多账本。每个Fabric应用都至少包含一个Channel,因此创建Channel是Fabric中比较重要的步骤。创建通道的命令执行完成之后会在相应的文件夹下面生成文件Org1MSPanchors.tx和Org2MSPanchors.tx,这些文件是Fabric后续的部署过程中作为配置参数所需要的。

4.4  启动Orderer 节点

Orderer节点的核心功能是排序服务或共识服务,将交易排序放进区块的节点的集合。排序服务独立于对等节点流程之外,并以先到先得的方式为网络上所有的通道做交易排序。排序服务支持可插拔实现,目前默认实现了Solo和Kafka两种方式。本实验由于在单机环境下部署区块链系统,因此采用了Solo的排序方式来进行。Orderer节点负责交易的打包和区块的生成,Orderer节点的配置信息通常放在环境变量或者配置文件中,本实验中的配置信息统一存放在配置文件中。Fabric源码提供了Orderer启动所用到的配置文件的实例,将示例配置文件复制到Orderer的文件夹下面稍加修改即可使用。在配置文件orderer.yaml所在的目录执行如下命令:orderer start启动orderer节点。

4.5 启动peer节点

Peer模块是维护账本并运行智能合约容器来对账本执行读、写操作的网络实体。Peer节点由成员拥有和维护。Peer节点是Fabric的核心模块,所有的交易数据经过Orderer排序打包之后由Peer模块存储在区块链中。所有的Chaincode也是由Peer模块打包并且激活的。Peer模块的配置信息同样由环境变量和配置文件组成,本例中我们采用配置文件的方式来配置peer节点的参数。在设定配置文件之前需要创建一个文件夹存放Peer模块的配置文件和区块数据。在Fabric源码中同样提供了Peer模块配置文件的示例,将示例配置文件复制到Peer模块的文件夹下面稍加修改即可使用。创建存储Peer模块的配置文件和区块数据的文件夹,并复制示例配置文件,接着采用编辑器修改该文。完成编辑后在配置文件core.yaml所在的文件夹中执行命令:peer node start启动peer节点。

4.6 创建Fabric系统通道

通道是构建在Fabric网络系统上的私有区块链,实现了数据的隔离和保密。通道内特定的账本在通道中是与所有的对等节点共享的,并且交易方必须通过该通道的正确性验证才能与账本进行交互。现在我们可以创建通道,创建通道的过程一共分为如下三个步骤。第一步,创建通道如图2所示:

4.7 Chaincode的部署和调用

在Hyperlegder Fabric系统中,智能合约称为Chaincode[6] ,中文译为链码。在Fabric中一个交易的具体逻辑是在Chaincode中运行的,智能合约是用户编写的一段独立的可执行代码或应用程序,与Fabric自身的模块程序之间是相互独立的。Chaincode运行在基于Docker的安全容器中,Chaincode在启动的时候和背书节点建立gRPC连接,在运行过程中通过接口和背书节点通信。链码是在线下预先开发好后再部署到线上的智能合约,部署的时候需要一定的权限,部署成功就意味着链码的业务逻辑是各个关联方都已经达成一致的。Chaincode的实现必须依赖于Peer节点和Orderer节点的正确部署。这里采用Fabric源码附带的例子chaincode_example02来作为测试Chaincode。Chaincode拥有完整的生命周期,测试Chaincode相关的测试一共有四个步骤: 第一步,安装Chaincode;第二步,实例化Chaincode代码;第三步,通过Chaincode调用(写入数据),第四步,通过Chaincode查询数据。Fabric智能合约Chaincode的部署和调用如下图5所示:

通过对HyperLedger Fabric智能合约Chaincode的安装、调用,我们可以查询到在本超级账本通道为linjianhongchannel上的所产生的区块数为4个,执行invoke的调用命令后,a向b转移了101,交易完成并进行查询可知,此时a的值为699。经过在本实验的演示,基于HyperLedger Fabric1.06版本的区块链系统已顺利完成部署。

至此,我们对HyperLedger Fabric系统的整体架构有了更深入的理解:客户端peer节点先将交易提案交给Endorser进行背书,通过背书的交易提案会被提交到Orderer节点排序并生成交易记录,然后Orderer节点会把一系列交易打包成区块Block提交给Committer,Committer会在交易验证后将Block写入区块链文件中持久性保存。其次,Fabric的多组织和多通道也是这个项目的特色之一,多组织是指交易中有两个或两个以上的组织间进行时,可以由多方组织进行交易背书,这些组织既可以是公司内部的不同的部门,也可以是不同的公司。综上所述,区块链技术的重要特征之一就是能够保证实现安全的交易。HyperLedger Fabric与公有链的交易实现上有很大的区别,如权限、认证、数据隔离等优点,并克服了比特币、以太坊等公有链项目的缺陷。

5 结语

本文详细介绍了全程手动部署IBM HyperLedger Fabric区块链系统所需要的关键步骤,主要包括了Fabric开发运行环境的搭建过程、Fabric核心模块的编译、运行和配置;同时介绍了Fabric核心概念:账本通道Channel的创建和使用,最后实现了对Fabric智能合约Chaincode的安装、实例化以及调用。文中内容通俗易懂、图文并茂,从零开始将理论知识与手把手操作演示相结合,通过熟悉文中的实践案例,有助于使读者快速掌握区块链Fabric网络系统的组成部分和部署流程,为区块链应用的項目落地开发奠定坚实的基础。

参考文献:

[1] SWAN M.Blockchain:blueprint for a new economy[M].USA:0Reilly Media Inc,2015:1-3.

[2] 李宁.第一行代码-以太坊[M].北京: 水利水电出版社,2018:65-66.

[3] Leader-us,李艳军,赵锴.区块链轻松上手:原理、源码、搭建与应用[M].北京: 电子工业出版社,2018:78-79.

[4] 李鑫. Hyperledger Fabric 技术内幕:架构设计与实现原理[M].北京: 机械工业出版社,2019:25-30.

[5] 蔡亮,李启雷,梁秀波.区块链技术进阶与实战[M].北京市:人民邮电出版社,2018:116-118.

[6] 张增骏,董宁,朱轩彤,等.深度探索区块链:Hyperledger技术与应用[M].北京: 机械工业出版社,2018:159-164.

【通联编辑:王力】

猜你喜欢
搭建网络系统区块链
基于DEMATEL-ISM的军事通信网络系统结构分析
区块链技术的应用价值分析
“区块链”的苟且、诗和远方
高速公路网络系统配置浅析
用“区块链”助推中企走出去
时滞复杂网络系统的保性能控制
离散复杂网络系统的混沌同步