Hyperledger Fabric菜鸟进阶攻略(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-23 11:20:57

点击下载

作者:黎跃春,韩小东,付金亮

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Hyperledger Fabric菜鸟进阶攻略

Hyperledger Fabric菜鸟进阶攻略试读:

前言

为什么要写这本书

随着跨行业区块链技术的逐渐普及,区块链技术成为应用程序开发或企业级应用解决方案的基础,各机构、企业将区块链、分布式账本和分布式应用平台的底层技术应用于更具有创新性的企业级应用的兴趣也在增长,但无论是开发人员还是企业,在使用区块链技术时都需要结合自身需求,根据不同的情况进行考虑。

·从开发人员的角度思考,能够支持在通用编程语言(如目前流行的Java、Python、Golang和Node.js等)中创建的智能合约的分布式账本平台,而不受限于特定的语言。这意味着大多数开发人员只需要熟练掌握一门编程语言就拥有开发智能合约所需的技能,并不需要额外的培训来学习新的语言。

·从企业的角度思考,通过其特定的功能与特性,能够使平台支持从政府、金融、公益事业、供应链物流到医疗保健等广泛的行业用例,并且能够保证应用的灵活性及可持续的扩展性。

其中,由Linux基金会主导并牵头,物联网、供应链、制造和科技等各行业的巨头共同宣布了区块链技术中第一个面向企业应用场景的开源分布式账本平台——Hyperledger(超级账本)联合项目,将区块链技术引入联盟链的应用场景中,为未来基于区块链技术打造高效率的商业网络打下基础,为透明、公开、去中心化的企业级分布式账本技术提供开源参考实现。

Hyperledger Fabric分布式超级账本平台技术基于其特点及优势,吸引了一大批区块链技术开发人员的加入,受到众多企业及相应开发人员的关注。但区块链技术涉及广泛,相关学习资料匮乏,偏重于开发实战方面的书籍更少。网络上的相关技术内容缺乏系统性,内容零散,导致学习者付出的时间、精力及成本成倍增长。

这种情况阻碍了许多开发人员的学习脚步,甚至让学习半途而废。为了提高开发人员的学习效率,降低学习成本,快速掌握Hyperledger Fabric应用开发技术,特编写了本书。本书特色

本书是一本系统性讲解Hyperledger Fabric平台知识并侧重介绍应用项目开发实战的书籍,遵循实践出真知的理念,通过大量动手实践,循序渐进地介绍超级账本技术及相关核心模块。

本书的内容注重实用性及理论与实践相结合,由浅入深地介绍了超级账本技术原理,并详细说明了Hyperledger Fabric的逻辑架构、运行时架构及各网络节点角色的作用,深入介绍Hyperledger Fabric超级账本的交易流程实现;通过网络环境构建、链码开发,逐步探索Hyperledger Fabric分布式超级账本技术及其应用开发过程;最后通过项目实战,着重介绍了相关技术点及开发流程、技巧,让读者熟练掌握分布式超级账本平台技术,并根据不同的应用场景开发基于区块链平台的企业级分布式应用。读者对象

·区块链应用开发人员;

·区块链技术爱好者;

·超级账本应用开发人员/架构师;

·高校计算机及相关专业师生。如何阅读本书

本书分为4篇,共计13章内容。

基础篇

(第1~3章),着重讲解Hyperledger Fabric环境搭建及架构设计,通过详细分析并动手实践的方式构建Hyperledger Fabric网络环境。

第1章 本章从Hyperledger Fabric由来开始,详细介绍了Hyperledger Fabric的框架、特点、环境搭建、快速调试方式。

第2章 本章从Hyperledger Fabric系统逻辑架构设计开始,延伸到运行时网络结构、节点角色与相关的概念,以及Hyperledger Fabric对网络交易处理流程的详细解析。

第3章 本章通过对主要配置文件的分析与讲解,一步一步地完成构建Hyperledger Fabric网络环境所需组件的详细实现过程。

链码篇(第4~5章),详细介绍了链码,帮助读者熟练掌握链码的开发并进行相应的测试。

第4章 本章详细介绍了链码的概念与分类,并实现链码生命周期管理及两种测试。

第5章 本章侧重讲解链码的开发方式、开发过程、链码的主要API,并通过链码开发示例掌握链码对账本数据状态操作的核心API。

核心篇(第6~9章),着重讲解Hyperledger Fabric核心模块,如MSP成员管理、共识机制、数据分发机制,深入了解Hyperledger Fabric分布式账本状态数据的存储方式及过程。

第6章 本章主要讲解与成员管理服务相关的内容,包括MSP成员验证、结构组成、具体应用,并详细说明了Hyperledger Fabric CA服务器的搭建及客户端的具体使用方法。

第7章 本章侧重于Hyperledger Fabric共识机制的实现,包括基于Kafka实现排序服务的具体实践操作,最后介绍了多链及多通道的概念与具体实现。

第8章 本章首先介绍了Gossip协议的内容,以图文并茂的方式说明了Gossip数据传输实现方式,最后详细说明了Hyperledger Fabric中基于Gossip协议实现的P2P数据分发与数据同步机制。

第9章 本章详细介绍了分布式账本的数据组成结构及数据的存储实现方式。

项目实战篇(第10~13章),以循序渐进的方式逐步讲解如何使用Fabric-SDK-Go开发基于Hyperledger Fabric的区块链应用程序;从业务逻辑分析、项目架构设计等方面入手,掌握区块链应用程序的整体开发流程及相关技巧。

第10章 本章侧重于项目开发前期的环境准备工作,包含操作系统环境、工具及配置,以及网络环境的构建、配置。

第11章 本章介绍如何使用Fabric-SDK-Go进行区块链应用开发,包括链码开发、如何使用Fabric-SDK-Go调用链码、应用程序自动化部署与快速测试。

第12章 为了方便用户的使用,本章在第10、11章的基础之上着重介绍实现基于Web的区块链应用程序,主要介绍了Web应用的MVC架构及其具体实现。

第13章 本章通过一个精简的区块链学历信息征信系统,介绍了基于Hyperledger Fabric平台的区块链应用程序的整体开发流程与实现方式。读者可以通过本章全方位掌握区块链应用开发的相关知识,进而可以直接从事基于Hyperledger Fabric的区块链开发工作。勘误和支持

由于笔者水平及经验所限,编写时间仓促,书中难免出现疏漏或描述不准确之处,恳请读者提出并指正。如果您有更多的宝贵意见,可以直接发送E-mail至hanxiaodong@cldy.org联系笔者,期待能够得到大家的真挚反馈,让我们在技术之路上一起互勉共进。致谢

感谢Hyperledger Fabric、ZooKeeper、Kafka等官方文档的作者提供了全面、深入、准确的参考资料。

感谢机械工业出版社华章公司的高婧雅编辑,初写书稿时,笔者是从技术人员的角度出发的,正是高婧雅编辑真正从读者的角度出发提出了相关的建议并给予相应帮助,笔者才完成了本书的书稿。特别致谢

在此,特别感谢家人、同事及众多技术爱好者的鼓励与支持,尤其是家人,编写此书的过程中,我的爱人与女儿从来没有任何抱怨,可以让我安心地思考及写作。韩小东基础篇

·第1章 Hyperledger Fabric认知与环境搭建

·第2章 深入浅出介绍Hyperledger Fabric架构设计

·第3章 搭建自己的Hyperledger Fabric网络

作为Hyperledger Fabric的基础入门部分,读者可以通过对基础篇内容的学习,从认识Hyperledger Fabric基础知识开始,以由浅入深的方式掌握超级账本环境搭建及详细的Hyperledger Fabric架构设计;然后理解Hyperledger Fabic交易流程的详细过程;最后能够自行根据不同需求场景搭建相应的网络环境。第1章Hyperledger Fabric认知与环境搭建1.1 全面认识超级账本目标

1.了解超级账本的由来及特点。

2.清楚超级账本的分类。

3.了解Hyperledger Fabric的特点。1.1.1 超级账本由来

当你拿起这本书开始阅读时,说明你对区块链技术已经有了相关的了解,而且想通过自己的努力或团队合作的方式开发出一款真正基于区块链技术的落地应用。那么恭喜你,你的选择是正确且明智的。

超级账本,即Hyperledger项目是区块链技术中第一个面向企业应用场景的开源分布式账本平台。

2015年12月由Linux基金会主导并牵头,IBM、Intel、Cisco等制造和科技行业的巨头共同宣布了Hyperledger联合项目成立。

Hyperledger将区块链技术引入联盟链的应用场景中,为未来基于区块链技术打造高效率的商业网络打下基础,为透明、公开、去中心化的企业级分布式账本技术提供开源参考实现,目前已加入的成员超过260家,国外的如IBM、Intel、Cisco、Oracle、RedHat、Samsung、Fujitsu、Airbus等;国内的如百度、小米、腾讯、联想、华为、浪潮、京东、迅雷、房掌柜、中国民生银行、招商银行、保全网等。

Hyperledger官网地址:https://www.hyperledger.org。1.1.2 超级账本分类

在Hyperledger这个大家庭中,项目可以分为两大类别。

框架项目:区块链应用开发平台,提供企业级应用程序开发环境及相关的SDK。

实用工具:区块链应用测试、部署、管理等工作的相关工具。

1.框架项目

Fabric:用模块化架构作为开发区块链程序或解决方案的基础,支持一些组件(如共识算法和成员服务)的即插即用。

Iroha:由Soramitsu、Hitachi、NTT Data和Colu提供,使用C++编写,采用拜占庭容错一致性算法实现共识,是为了将分布式账本技术更容易地与基础架构型项目集成而设计的一个区块链框架项目。应用程序可以使用Python、Java、JavaScript、C++在Android和iOS移动平台编写。

Sawtooth:一个创建、部署和运行分布式账本的模块化平台。它包含一个新奇的共识算法——PoET(Proof of Elapsed Time,经历时间证明),面向大型分布式验证器群,消耗最少的资源。

Burrow:由Monax提供,由Intel公司共同赞助,是一个支持许可的智能合约机,该系列的第一个版本发表于2014年12月。Burrow提供了一个模块化的区块链客户端,内置一个经许可的智能合约解释器,它部分是按照以太坊虚拟机(Ethereum Virtual Machine,EVM)规范而开发的。

Indy:一种特别为去中心化的身份而建立的分布式账本。它提供了基于区块链或者其他分布式账本互操作以创建与使用独立数字身份的工具、代码库和可重用组件。

2.实用工具

Explorer:由IBM、Intel及DTCC提供;可以查看、调用、部署或查询区块、交易、网络信息、链码和交易序列,以及账本中的其他相关信息。

Composer:一个构建区块链商业网络的协作工具,用来加速智能合约的开发及分布式账本的部署;使用JavaScript构建。

Cello:由IBM提供,赞助商来自Soramitsu、华为和Intel,旨在为区块链生态系统带来按需部署服务的模式,减少创建、管理、终止区块链的难度。

Caliper:由华为、Hyperchain、Oracle、Bitwise、Soramitsu、IBM和布达佩斯技术与经济大学的开发人员提供,是一个区块链基准工具,内置一套预定义的测试用例,让使用者可以测试特定区块链执行的性能。1.1.3 认识Hyperledger Fabric

Hyperledger Fabric是一个区块链的实现,由Digital Asset和IBM提供,是Linux基金会托管的Hyperledger项目之一。Hyperledger Fabric从诞生之初就立志要成为超级账本中最优秀的项目(现实也确实如此)。

作为开发具有模块化架构的应用程序或解决方案的基础,Hyperledger Fabric实现了组件(如共识、成员服务)的即插即用。Hyperledger Fabric利用容器技术来托管称为“链码”的智能合约,其中包含系统的应用程序逻辑。

与其他区块链技术类似,Hyperledger Fabric使用智能合约操作账本,并且是一个通过所有参与者管理交易的系统。Hyperledger Fabric与其他公有区块链系统最大的不同主要体现在以下两个方面。

1)私有:Hyperledger Fabric提供了建立通道(Channel)的功能,允许参与者为交易新建一个单独的账本。参与者并不希望所有的交易信息(如提供给部分客户的特定价格信息)都对网络中所有参与者公开。只有在同一个通道中的参与者,才会拥有该通道中的账本,而其他不在此通道中的参与者则无权查看这个账本的相关信息。

2)许可:与开放无须许可的网络系统允许未知身份的参与者加入网络不同(需要通过工作量证明协议来保证交易有效并维护网络的安全),Hyperledger Fabric通过MSP(Membership Service Provider)来登记所有的成员。

Hyperledger Fabric项目GitHub网址:https://github.com/hyperledger/fabric。1.2 迈出第一步:搭建环境目标

1.检查操作系统。

2.检查并安装所需工具。

3.可选安装Node及NPM。1.2.1 操作系统

推荐使用的操作系统为64位的Ubuntu 16.04 LTS,系统内核为GNU/Linux 4.13.0-36-generic x86_64。

硬件资源要求:内存最低为2GB,最好在3GB以上;磁盘空间为30GB或更高。

如果计算机默认为Windows操作系统,可以在Windows系统中安装一个VMware虚拟机应用程序,然后在VMWare虚拟机中安装Ubuntu 16.04系统,最后在Windows操作系统中安装一个远程连接工具(如XShell或SecureCRT),以便连接并操作Ubuntu系统。

如果使用的是Mac电脑,同样建议以安装、使用虚拟机的方式来学习。1.2.2 安装所需工具

1.安装git

git是一个非常优秀的开源版本管理控制工具,使用git工具可以方便地下载官方(Golang、Hyperledger Fabric等)在GitHub网站上发布的相关源代码或其他内容。

安装git工具使用如下命令:$ sudo apt update$ sudo apt install git

Mac OS系统中默认已安装该工具。如果未安装该工具,则可以在git-scm官方网站(https://git-scm.com/downloads)下载相应系统的安装包并安装。

2.安装cURL

使用如下命令安装cURL:$ sudo apt install curl

其他系统的cURL安装包可以在https://curl.haxx.se/download.html页面中下载并安装。

3.安装Docker

查看系统中是否已经安装Docker:$ docker --version

使用如下命令安装Docker的最新版本:$ sudo apt update$ sudo apt install docker.io

查看Docker版本信息:$ docker --version

输出类似如下的Docker版本信息:Docker version 17.03.2-ce, build f5ec1e2

4.安装docker-compose

确定系统中是否已安装docker-compose工具:$ docker-compose --version

如果系统提示未安装,则使用如下命令安装docker-compose工具:$ sudo apt install docker-compose

安装成功后,查看docker-compose版本信息:$ docker-compose --version

输出类似如下的docker-compose版本信息:docker-compose version 1.8.0, build unknown

5.安装Golang

Fabric 1.0.0版本要求Golang 1.7以上版本,Fabric 1.1.0版本要求Golang 1.9以上版本,Fabric 1.2.0版本要求Golang 1.10以上版本,我们使用Fabric 1.2.0版本,所以从官方下载最新版本的Golang。(1)下载Golang

使用wget工具下载Golang的最新版本压缩包文件go1.10.3.linux-amd64.tar.gz:$ wget https:// dl.google.com/go/go1.10.3.linux-amd64.tar.gz

下载Golang压缩包文件,需要操作系统能够保证正常访问Golang官方网站。下载过程可能耗时较长(取决于具体网络情况),请耐心等待。

其他系统可以在Golang官方网站https://golang.org/dl/下载页面中下载相应的安装包并安装。

下载完成后,文件会保存在当前目录下。可以使用ll命令查看:

7.tif(2)解压文件

使用tar命令将下载后的压缩包文件解压到指定的/usr/local/路径下:$ sudo tar -zxvf go1.10.3.linux-amd64.tar.gz -C /usr/local/

注意,在解压过程中可能出现如下错误:gzip: stdin: unexpected end of f iletar: Unexpected EOF in archivetar: Unexpected EOF in archivetar: Error is not recoverable: exiting now

或如下错误信息:gzip: stdin: unexpected end of f iletar: 归档文件中异常的 EOFtar: 归档文件中异常的 EOFtar: Error is not recoverable: exiting now

如果出现上述错误提示信息,则说明下载的压缩包文件有问题,如果没有下载完整或压缩包数据损坏,可将其删除后重新下载并解压至指定的目录中。(3)配置环境变量

将压缩包文件解压至指定目录后,Golang可以让系统的所有用户正常使用,这里使用vim文件编辑工具打开系统的profile文件进行编辑:$ sudo vim /etc/prof ile

如果只想让当前登录用户使用Golang,而其他用户不能使用Golang,则编辑当前用户$HOME目录下的.bashrc或.profile文件,在该文件中添加相应的环境变量即可。

在profile文件最后添加如下内容:export GOPATH=$HOME/goexport GOROOT=/usr/local/goexport PATH=$GOROOT/bin:$PATH

使用source命令,使刚刚添加的配置信息生效:$ source /etc/prof ile

通过go version命令验证是否成功:$ go version

输出如下的Golang版本信息:go version go1.10.3 linux/amd64

如果系统中有旧版本的Golang,则使用如下命令卸载旧版本的Golang,然后重新安装并配置:$ su -# apt-get remove golang-go --purge && apt-get autoremove --purge && apt-get clean

6.安装NVM与npm(1)安装NVM

NVM(Node Version Manager)是Node.js的版本管理软件,可以根据不同的需求场景随时在Node.js的各个版本之间进行切换。

由于Node.js版本更新较快,且各版本之间差异较大,直接从Node官网安装可能需要很长时间,而且中间可能会因为网络访问及数据传输原因造成下载中断或失败等问题。为了方便安装及后期管理Node.js的版本,需要先在系统中安装NVM管理工具。使用如下命令安装NVM:$ sudo apt update$ curl -o- https:// raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash$ export NVM_DIR="$HOME/.nvm"$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"(2)安装Node

NVM工具安装并配置成功后,可以直接使用nvm命令安装Node,且Node安装成功后,NVM会自动对npm工具进行安装。使用如下命令安装Node:$ nvm install v8.11.1

安装Node时需要注意,安装版本为8.9.x或以上的Node.js,Fabric目前不支持9.x系列的Node.js版本。安装成功输出如下内容:

9.tif(3)检查Node及npm版本$ node -v && npm -v

输出内容如下:v8.11.15.6.0

FAQ

1.Hyperledger Fabric只支持Ubuntu系统吗?

Hyperledger Fabric支持常见的Linux相关系统(如Debian、Cent OS等)和Mac OS。

由于不同操作系统或各系统的不同版本可能会造成一些问题,所以在此推荐使用的操作系统为64位的Ubuntu 16.04 LTS。

2.cURL是什么?有什么作用?

cURL是一个可以在终端命令行下使用URL语法执行的开源文件传输工具。它可以支持基于HTTP/Socket的代理;cURL还支持使用SSL证书,支持HTTP POST、HTTP PUT,支持FTP上传,以及基于HTTP表单的上传;支持Cookie,可以使用用户名+密码的方式实现认证(Basic、Plain、Digest、CRAM-MD5、NTLM、Negotiate和Kerberos)等。

3.为什么要安装Docker及docker-compose?

Docker是一个开源的应用容器引擎,可以为应用创建一个轻量级的、可移植的容器。Hyperledger Fabric环境依赖于Docker提供的容器服务,所以必须安装Docker环境;推荐使用1.13或更高版本。

Compose是一个用于定义和运行多个容器的Docker应用程序的工具,可以使用YAML文件配置相关的指定服务,运行该服务时只需要一个简单的命令即可。

4.能否不使用Golang而换作其他语言环境?

Hyperledger Fabric的很多组件使用Golang实现,并且我们会使用Golang来编写链式代码的应用程序,所以需要在系统中安装并设置Golang环境。

5.一定要安装Node与npm吗?

Node与npm工具为可选安装工具。如果后期使用Node.js的Hyperledger Fabric SDK开发Hyperledger Fabric应用程序,则需要安装;否则无须安装。1.3 安装Hyperledger Fabric目标

1.顺利下载Hyperledger Fabric。

2.明确bootstrap.sh脚本做了哪些工作。1.3.1 下载fabric-samples与二进制文件

为了方便后期管理,在当前登录用户的HOME目录下创建一个空目录并进入该目录:$ mkdir hyfa && cd hyfa

新建文件bootstrap.sh并添加内容:$ vim bootstrap.sh

将https://github.com/hyperledger/fabric/blob/master/scripts/bootstrap.sh中的内容复制、保存后退出。

该bootstrap.sh可执行脚本文件的作用如下。

1)如果当前目录中没有hyperledger/fabric-samples,则从github.com克隆hyperledger/fabric-samples存储库。

2)使用checkout签出对应指定的版本标签。

3)将指定版本的Hyperledger Fabric平台特定的二进制文件和配置文件安装到fabric-samples存储库的根目录中。

4)下载指定版本的Hyperledger Fabric Docker镜像文件。

5)将下载的Docker镜像文件标记为“latest”。

创建的bootstrap.sh脚本文件并不能立即执行,必须对其赋予可执行权限才能够运行。执行如下命令对bootstrap.sh脚本文件赋予可执行权限:$ chmod +x bootstrap.sh

执行bootstrap.sh:$ sudo ./bootstrap.sh 1.2.0

确定网络稳定,否则会导致各种问题,例如,下载到一半时网络超时,下载失败等;由于Docker的各种镜像文件下载时间较长,所以请耐心等待。

下载完成后,查看相关输出内容。如果有下载失败的镜像,可再次执行如下命令重新下载。$ sudo ./bootstrap.sh 1.2.0

对于已下载的Docker镜像文件,再次执行脚本命令不会重新下载。

安装完成后终端自动输出:===> List out hyperledger docker imageshyperledger/fabric-ca 1.2.0 66cc132bd09c 4 weeks ago 252 MBhyperledger/fabric-ca latest 66cc132bd09c 4 weeks ago 252 MBhyperledger/fabric-tools 1.2.0 379602873003 4 weeks ago 1.51 GBhyperledger/fabric-tools latest 379602873003 4 weeks ago 1.51 GBhyperledger/fabric-ccenv 1.2.0 6acf31e2d9a4 4 weeks ago 1.43 GBhyperledger/fabric-ccenv latest 6acf31e2d9a4 4 weeks ago 1.43 GBhyperledger/fabric-orderer 1.2.0 4baf7789a8ec 4 weeks ago 152 MBhyperledger/fabric-orderer latest 4baf7789a8ec 4 weeks ago 152 MBhyperledger/fabric-peer 1.2.0 82c262e65984 4 weeks ago 159 MBhyperledger/fabric-peer latest 82c262e65984 4 weeks ago 159 MBhyperledger/fabric-zookeeper 0.4.10 2b51158f3898 5 weeks ago 1.44 GBhyperledger/fabric-zookeeper latest 2b51158f3898 5 weeks ago 1.44 GBhyperledger/fabric-kafka 0.4.10 936aef6db0e6 5 weeks ago 1.45 GBhyperledger/fabric-kafka latest 936aef6db0e6 5 weeks ago 1.45 GBhyperledger/fabric-couchdb 0.4.10 3092eca241fc 5 weeks ago 1.61 GBhyperledger/fabric-couchdb latest 3092eca241fc 5 weeks ago 1.61 GB

添加环境变量(可选执行命令):$ export PATH=/bin:$PATH

表示fabric-samples文件目录所在路径,例如:$ export PATH=$HOME/hyfa/fabric-samples/bin:$PATH1.3.2 Hyperledger Fabric源码方式编译

在1.3.1节中,我们以提供脚本的方式,可以下载并安装fabric-samples和二进制文件到操作系统中,大大简化了安装过程。

Hyperledger Fabric还有另外一种安装方式,就是以源码的方式进行本地编译安装,此方式相较1.3.1节的方式略微复杂,需要手动编译生成相应的工具,在此逐一介绍。(1)下载源码

先使用mkdir命令创建相应的目录,然后使用git clone命令将Hyperledger Fabric源码克隆至该目录中:$ mkdir -p $GOPATH/src/github.com/hyperledger/$ cd $GOPATH/src/github.com/hyperledger/$ git clone https:// github.com/hyperledger/fabric.git

注意,也可以使用go get命令下载源码,需要手动创建相应的目录:$ go get github.com/hyperledger/fabric

下载可能需要几分钟,也可能需要十几分钟,取决于当前的网络环境,请耐心等待。源码下载完成后使用git checkout命令切换至指定的分支:$ cd $GOPATH/src/github.com/hyperledger/fabric/$ git checkout -b v1.2.0

源码下载完成之后,并不能直接使用,我们需要对其进行编译,生成所需要的各种节点及相应的工具。我们直接使用源码提供的Makefile来进行编译。首先对Makefile文件进行编辑,指定相应的版本:$ vim Makef ile

修改文件中BASE_VERSION、PREV_VERSION、CHAINTOOL_RELEASE、BASEIMAGE_RELEASE的值,修改之后的内容如下:BASE_VERSION = 1.2.1PREV_VERSION = 1.2.0CHAINTOOL_RELEASE=1.1.1BASEIMAGE_RELEASE=0.4.10(2)编译Orderer

执行以下命令编译Orderer:$ cd $GOPATH/src/github.com/hyperledger/fabric/$ make orderer

命令执行后,终端输出如下信息:(3)编译Peer

编译Peer的命令如下:$ make peer

命令执行成功后,终端输出如下信息:

使用系统命令ll查看.build/bin目录内容:$ ll .build/bin/

命令执行后,可以看到.build/bin目录中已生成了如下两个工具:(4)编译生成相关工具

Hyperledger Fabric中除了Orderer和Peer之外,还提供了在搭建网络环境时所需要的一系列辅助工具。

·configtxgen:生成初始区块及通道交易配置文件的工具。

·cryptogen:生成组织结构及相应的身份文件的工具。

·configtxlator:将指定的文件在二进制格式与JSON格式之间进行转换。

编译生成这些工具同样可以使用make命令:$ make conf igtxgen$ make cryptogen$ make conf igtxlator

编译之后同样使用ll命令查看.build/bin目录中的内容:(5)编译生成Docker镜像

将当前用户添加到Docker组:$ sudo usermod -aG docker kevin注意

添加成功后必须注销或重启系统。

安装依赖的libltdl-dev库:$ sudo apt-get install libltdl-dev(6)获取镜像

编译生成Docker镜像需要用到Golang工具,所以我们需要通过git clone命令从github.com克隆至当前系统中:$ mkdir -p $GOPATH/src/golang.org/x$ cd $GOPATH/src/golang.org/x$ git clone https:// github.com/golang/tools.git

执行编辑命令后将指定的环境变量设置到用户的环境文件(.bashrc)中:$ vim ~/.bashrcexport PATH=$PATH:$GOPATH/bin

为了能够使配置的环境生效,需要执行source命令:$ source ~/.bashrc

Hyperledger Fabric源码由Golang构建,所以需要安装Golang相关的工具,以方便开发和调试:$ mkdir -p $GOPATH/src/golang.org/x$ cd $GOPATH/src/golang.org/x$ git clone https:// github.com/golang/net.git$ git clone https:// github.com/golang/tools.git$ cd $GOPATH$ go get github.com/kardianos/govendor$ go get github.com/onsi/ginkgo/ginkgo$ go get github.com/golang/protobuf/protoc-gen-go$ go get -u github.com/axw/gocov/...$ go get -u github.com/AlekSi/gocov-xml$ go get -u github.com/client9/misspell/cmd/misspell$ go get -u golang.org/x/tools/cmd/goimports$ go get -u github.com/golang/lint/golint

将之前安装的Golang工具复制到Fabric目录:$ cd $GOPATH/src/github.com/hyperledger/fabric/$ mkdir -p .build/docker/gotools/bin$ cp ~/go/bin/* .build/docker/gotools/bin

使用make docker命令编译生成相关的Docker镜像:$ cd $GOPATH/src/github.com/hyperledger/fabric/$ make docker(7)获取镜像方式二

可以直接从Docker Hub拉取镜像,使用docker pull命令拉取指定的Docker镜像。$ export FABRIC_TAG=1.2.0$ export CA_TAG=1.2.0$ export THIRDPARTY_IMAGE_VERSION=0.4.10$ docker pull hyperledger/fabric-peer:$FABRIC_TAG \&& docker pull hyperledger/fabric-orderer:$FABRIC_TAG \&& docker pull hyperledger/fabric-ca:$CA_TAG \&& docker pull hyperledger/fabric-tools:$FABRIC_TAG \&& docker pull hyperledger/fabric-ccenv:$FABRIC_TAG \&& docker pull hyperledger/fabric-baseimage:$THIRDPARTY_IMAGE_VERSION \&& docker pull hyperledger/fabric-baseos:$THIRDPARTY_IMAGE_VERSION \&& docker pull hyperledger/fabric-couchdb:$THIRDPARTY_IMAGE_VERSION \&& docker pull hyperledger/fabric-kafka:$THIRDPARTY_IMAGE_VERSION \&& docker pull hyperledger/fabric-zookeeper:$THIRDPARTY_IMAGE_VERSION

将已下载的镜像标记为最新:$ docker tag hyperledger/fabric-peer:$FABRIC_TAG hyperledger/fabric-peer \&& docker tag hyperledger/fabric-orderer:$FABRIC_TAG hyperledger/fabric-orderer \&& docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca \&& docker tag hyperledger/fabric-tools:$FABRIC_TAG hyperledger/fabric-tools \&& docker tag hyperledger/fabric-ccenv:$FABRIC_TAG hyperledger/fabric-ccenv \&& docker tag hyperledger/fabric-baseimage:$THIRDPARTY_IMAGE_VERSION hyperledger/fabric-baseimage \&& docker tag hyperledger/fabric-baseos:$THIRDPARTY_IMAGE_VERSION hyperledger/ fabric-baseos \&& docker tag hyperledger/fabric-couchdb:$THIRDPARTY_IMAGE_VERSION hyperledger/ fabric-couchdb \&& docker tag hyperledger/fabric-kafka:$THIRDPARTY_IMAGE_VERSION hyperledger/ fabric-kafka \&& docker tag hyperledger/fabric-zookeeper:$THIRDPARTY_IMAGE_VERSION hyperledger/ fabric-zookeeper

之后可以使用docker images命令查看相关的镜像信息:$ docker images

命令执行后终端输出如下信息:

Hyperledger Fabric中可以用两种方式进行编译安装:第一种是以bootstrap.sh脚本方式进行环境的安装,优点是简单、方便,能够快速上手;第二种是以Fabric源码方式进行编译,适合动手能力较强的人员,优点是可以对Hyperledger Fabric相关组件有深入的理解,但缺点是容易出现各种错误且修正比较麻烦。注意

为方便起见,本书的Hyperledger Fabric环境采用第一种方式(bootstrap.sh脚本方式)安装构建。

FAQ

1.bootstrap.sh脚本中的内容有什么作用?

脚本执行后将下载并提取设置网络所需的所有特定于平台的二进制文件,并保存在本地仓库中,然后将Docker Hub中的Hyperledger Fabric Docker镜像下载到本地Docker注册表中,并将其标记为“最新”。

2.下载Docker镜像文件速度特别慢,有什么好的解决方式?

可在https://www.daocloud.io/网站中注册一个账号,注册成功后,可以单击加速器图标(如下图所示)以获取Docker加速器。

1)配置Docker加速器。在命令提示符中输入如下图所示的daocloud.io分配的加速器脚本命令(将输入框中的脚本命令复制到命令提示符窗口中执行即可),执行完脚本之后,需要重启Docker服务。

2)重启Docker服务。执行完该命令后,必须重启Docker服务以生效:$ sudo systemctl restart docker.service

3.下载完成后,添加的环境变量有什么意义?

添加环境变量的意义为在系统中任何路径下使用Fabric相关的命令都可以让系统找到该命令并且顺利执行。后期我们会进入Fabric目录中执行相应的命令,所以也可以不添加该环境变量。1.4 测试Hyperledger Fabric网络环境目标

1.熟悉byfn.sh脚本的相关命令。

2.能够自动实现你的第一个Hyperledger Fabric网络环境。

Hyperledger Fabric网络环境的构成较为复杂,由N个节点组成一个分布式网络,每个节点都有自己的实体身份标识;而且Hyperledger Fabric可以通过通道将一个网络分割成不同的私有子网,从而实现不同账本之间数据的隔离性。所以,我们在使用Hyperledger Fabric之前,必须先构建所需的网络环境。

构建Hyperledger Fabric网络环境可以通过两种方式实现。

1.使用自动化脚本实现

使用一个名为byfn.sh的自动化脚本文件自动构建一个简易的Hyperledger Fabric网络环境并引导启动,且自动生成相应的一些配置文件,一般用于测试环境,本节内容主要讲解这种方式。

2.手动实现

为了适应不同的且较为复杂的场景,这时自动化脚本方式就有些力不从心,必须由开发、运维及相关管理人员根据不同的情况,手动输入相关命令构建一个相当复杂的网络环境。这种实现方式参见第3章相关内容。1.4.1 测试Hyperledger Fabric环境

之前我们介绍过,使用一个名为byfn.sh的脚本实现Hyperledger Fabric网络的自动构建并测试,那么我们来看一下byfn.sh脚本都有哪些命令可以使用。首先进入fabric-samples目录中的first-networkd子目录:$ cd fabric-samples/f irst-network

在first-network目录下有一个自动化脚本byfn.sh,可以使用--help参数查看相应的可用命令,在命令提示符中输入如下命令:$ ./byfn.sh --help

命令执行成功后,会在终端输出如下类似内容(为方便起见,笔者已将其说明翻译成中文):up:启动;down:清除网络;restart:重新启动;generate:生成证书及创世区块;upgrade:将网络从1.1.x升级到1.2.x;-c:用于指定channelName,默认值"mychannel";-t:CLI timeout时间,默认值10;-d:延迟启动,默认值3;-f:使用指定的网络拓扑结构文件,默认使用docker-compose-cli.yaml;-s:指定使用的数据库,可选 goleveldb/couchdb;-l:指定chaincode使用的语言,可选golang/node;-i:指定镜像tag,默认 "latest"。1.4.2 构建你的第一个Hyperledger Fabric网络

1.生成证书和密钥

byfn.sh自动化脚本文件为各种Hyperledger Fabric网络实体生成所有证书和密钥,并且可以实现引导服务启动及配置通道所需的一系列配置文件:$ sudo ./byfn.sh -m generate

命令成功执行后会生成1个Orderer+4个Peer+1个CLI的网络结构,4个Peer包含在2个Org中。

根据提示输入y,之后终端输出类似如下的日志内容:Generating certs and genesis block for channel 'mychannel' with CLI timeout of '10' seconds and CLI delay of '3' secondsContinue? [Y/n] yproceeding .../home/kevin/hyfa/fabric-samples/f?irst-network/../bin/cryptogen# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Generate certif?icates using cryptogen tool # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + cryptogen generate --conf?ig=./crypto-conf?ig.yamlorg1.example.comorg2.example.com+ res=0+ set +x/home/kevin/hyfa/fabric-samples/f?irst-network/../bin/conf?igtxgen# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Generating Orderer Genesis block # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + conf?igtxgen -prof?ile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/ genesis.block……doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update+ res=0+ set +x

2.启动网络

生成所需要的证书及密钥之后,需要启动网络来确认Hyperledger Fabric网络环境是否能够正常工作,使用byfn.sh脚本来实现网络的启动,命令如下:$ sudo ./byfn.sh -m up

命令执行后,终端会输出一个提示信息,根据提示输入y,如果输出如下类似内容,则代表网络启动且测试成功:Starting for channel 'mychannel' with CLI timeout of '10' seconds and CLI delay of '3' secondsContinue? [Y/n] yproceeding ...LOCAL_VERSION=1.2.0DOCKER_IMAGE_VERSION=1.2.0Creating network "net_byfn" with the default driverCreating volume "net_peer0.org2.example.com" with default driverCreating volume "net_peer1.org2.example.com" with default driverCreating volume "net_peer1.org1.example.com" with default driverCreating volume "net_peer0.org1.example.com" with default driverCreating volume "net_orderer.example.com" with default driverCreating peer0.org2.example.comCreating peer0.org1.example.comCreating peer1.org2.example.comCreating orderer.example.comCreating peer1.org1.example.comCreating cli____ _____ _ ____ _____ / ___| |_ _| / \ | _ \ |_ _|\___ \ | | / _ \ | |_) | | | ___) | | | / ___ \ | _ < | | |____/ |_| /_/ \_\ |_| \_\ |_| Build your first network (BYFN) end-to-end test……========Query successful on peer1.org2 on channel 'mychannel'=================== All GOOD, BYFN execution completed =========== _____ _ _ ____ | ____| | \ | | | _ \ | _| | \| | | | | | | |___ | |\ | | |_| | |_____| |_| \_| |____/

3.关闭网络

网络测试成功后,为了方便后期的操作,最好将其关闭,以防止后期启动网络时造成的冲突错误,关闭网络可执行如下命令:$ sudo ./byfn.sh -m down

根据提示输入y,命令执行后终端输出类似如下的日志内容:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载