7.2 Fabric项目

7.2.1 Fabric基本运行分析

Fabric项目的目的是要实现一个面向商业环境的通用权限区块链底层设施,它是用于开发企业级区块链应用的主要 框架,2017年7月11日,官方网站宣布发布了1.0正式版,标志着这个框架已经可以进入到生产环境的实践阶段。本节将会通过部署运行一个示例来体会一 下如何使用Fabric实现一个智能合约系统并且部署一个网络,在开始之前,我们来了解一下Fabric与比特币、以太坊这些区块链系统有什么差别,以及 它的运行框架是什么样的。

先看一下彼此的区别:

image.png

从上表可以看出,Fabric与其他公链系统主要的区别是一个带有许可授权的区块链网络系统,并且不使用通常依靠算力的工作量证明共识算法,而是使用更适 合在商业环境下使用的PBFT算法。既然Fabric有着许多的不同,那么它的运行框架是什么样的呢?我们就看一下1.0正式版的运行框架图:

image.png

通过上图,我们可以看到对等节点分解为两个角色:一个背书,一个提交。整个运行环路如下:

1)应用程序通过SDK调用发送请求到对等节点;

2)对等节点通过智能合约执行请求,请求完毕后会进行背书,背书就是节点对请求执行的确认,返回YES或NO,参与背书的对等节点将执行结果返回给应用程序;

3)应用程序将接收到的背书结果提交给共识服务节点;

4)共识服务节点执行共识过程,生成区块数据并发送给对等节点;

5)对等节点进行交易数据的验证之后再提交到本地的账本数据中。

这便是Fabric中的一个交易运行流程,这里提醒一下读者,Fabric的版本发布过程中,有过一个重要的版本0.6版,这个版本与1.0正式版的流程略有差别,这里不再赘述,读者在试用Fabric时,务必注意下版本,接下来我们就开始安装使用Fabric示例。

7.2.2 Fabric安装

要使用Fabric,首先要安装这个项目框架,本示例在Mac上进行,对于Linux和Windows过程是类似 的,不过还是建议使用Mac或者Linux,能省去很多麻烦。对于Linux发行版,以常见的Ubuntu来说,可以使用16.04版,如果是 CentOS则可以使用CentOS7,使用较高版本的系统,可以省去很多额外安装依赖的麻烦,让我们一步步开始。

(1)安装Docker运行环境

Docker是一个轻量级的容器环境,类似于虚拟机,但是比虚拟机要轻很多,在一个操作系统中可以运行相当多数量 的Docker容器,每一个容器中可以运行独立的服务,容器与容器之间是隔离的,不会互相有干扰,通常在安装Docker的时候都会连带一起安装 Docker Compose,通过Docker Compose可以方便地部署多个Docker容器实例,我们将使用这些工具来部署Fabric节点,每一个节点都运行在一个独立的Docker容器中。 安装时请选择不低于1.12的版本,安装完毕后,可以分别运行如下命令检查Docker和Docker Compose的版本:


 

docker -v
docker-compose -v


(2)安装Go运行环境

Fabric使用Go语言开发,因此需要安装Go的环境,这个也不再赘述了,安装完毕后不要忘记设置GOPATH环境变量。分别使用如下命令查看Go的版本以及GOPATH的设置:


 

go version
echo $GOPATH


(3)安装Node.js以及NPM

Fabric提供有多种语言版本的SDK,可以用于通过API的调用与Fabric构建的区块链服务进行交互,我 们使用Fabric提供的针对Node.js的SDK来开发应用,注意保持Node运行时的版本为6.9.x,这里使用的版本是6.9.5,目前官方的 SDK还没有支持更高版本的Node,通过以下命令可以查看Node安装的版本:


 

node -v
npm -v


至此,基础环境就安装完毕了,接下来安装Fabric。

(4)创建目录

下载官网提供的平台相关的二进制文件到创建的目录中。


 

cd ~ | mkdir fabricsample
cd ~/fabricsample


(5)下载Fabric组件


 

curl -sSL https://goo.gl/iX9dek | bash


使用curl工具下载Fabric的组件,使用这些文件就可以设置Fabric网络了,下载完毕后,可以看到在目录中生成了一个bin目录,进去后可以看到有以下的文件:

image.png

我们解释一下几个组件的作用:

·configtxgen:用于生成共识服务启动以及通道创建所需的配置数据,它需要一个名为configtx.yaml的配置文件,在这个文件中包含了Fabric节点网络的定义。

·configtxlator:可以用来将通道配置信息转换为可读形式。

·cryptogen: 用于生成x509标准证书,用于实现身份识别等鉴权功能,这个命令工具需要使用一个名为crypto-config.yaml的配置文件,在这个配置文件 中包含需要部署的Fabric网络拓扑结构,根据网络结构,cryptogen命令可以生成所需的证书库以及密钥。

·get-byfn.sh:用来下载名为byfn的脚本程序,实际上其中包含了一个下载命令。

·get-docker-images.sh:这是一个脚本程序,可以用来下载Fabric的各个组件到本地的Docker容器中。

·orderer:共识服务程序,在超级账本中将共识服务独立为一个节点程序,负责将网络中的交易事务打包进区块,并使用通道机制订阅给其他的对等节点(也可以说是账本节点)。

·peer:账本节点程序,用于维护账本数据并且运行智能合约,以下统称这种节点为对等节点。

我们可以看到,运行超级账本的Fabric,要比运行比特币或者以太坊复杂很多,作为一个商业级的联盟链基础设施,增加了很多公链系统没有的组件功能。

除了下载这些文件,命令脚本同时还安装了Fabric组件的Docker镜像,从Docker Hub下载到本机的Docker仓库,使用docker images可以查看到,分别是:

image.png

这里需要对Fabric的结构和模块做一些介绍。在Fabric中,对区块链应用中的各个角色进行了明确的划分,这也 是其高度模块化的一个体现,不再像比特币这样一股脑儿都混在一起,Fabric面向商业应用,因此其本质上是设计为一个私有链或者说是联盟链,除了通常的 模块元素外,主要特点表现在以下几个方面。

1)具有多种类型的节点,比如负责管理账本数据的peer对等节点,负责提供共识服务的orderer共识服务节点,负责鉴权的身份服务节点,负责创建和校验交易并且维护智能合约状态的验证节点,负责提供用户端服务的应用节点等。

2)对等节点之间的账本数据共享通过一个称为channel(也就是通道)的机制来过滤,通道是Fabric中一 个富有特色的机制,正是通过通道的概念,实现了数据的隔离分发,只有处于同一个通道的节点之间才会分享账本数据,通过这种机制,在同一个联盟链的对等节点 之间,可以根据策略拥有不同的账本副本数据。

注意,对于共识服务节点来说,是接收所有数据的,通道只是与对等节点相关,实际上对等节点是通过向共识服务节点订阅了不同的主题,而每个主题就是一个通道,它们的关系如下图所示:

image.png

图中peer1与peer2订阅了同一个通道,peer3与peer4订阅了同一个通道,peer5与peer6订阅了同一个通道,根据不同的通道订阅,共识服务根据策略分发不同的区块数据,我们可以发现,在Fabric的设计中充分考虑了作为商业环境使用的安全问题。

通过证书颁发服务进行身份认证与鉴权,这个与传统的企业级系统是类似的,限制进入系统的用户,设置不同的权限,作为面向商业使用的系统,这个显然是必备的,也是与公链系统(如比特币、以太坊等)很大的一个差别。

Fabric由于有通道和身份认证的设施,使得对于每一个节点看到的数据都是可以不一样的,也就是说从逻辑上来 看,Fabric是一个实现了多通道多链结构的一个区块链网络。这是很有意思的,此前的比特币、以太坊等公链系统,每个节点看到的数据都是一样的,无论是 实际的物理数据还是逻辑上的视图数据都是一致的。Fabric的这个特点,类似于数据库系统中的物理表与视图的概念,通过设定不同的视图逻辑,实现不同的 数据管控要求。

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=77

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
博客
32132
07-14 365
07-12 298
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值