Skip to content

stephenwu2020/fabric-step-by-step

Repository files navigation

区块链网络

本文从概念上描述,企业之间使用Hyperledger Fabric进行商业合作时,是如何构建区块链网络的。架构师,管理员,开发工程师,通过阅读本文,对Hyperledger Fabric主要的架构以及组件,将有更深刻的认识。本文将结合操作简易的例子,介绍区块链网络中的各大构成组件。

企业间通过建立policies对Hyperledger Fabric进行控制,根据指定的policies对网络进行升级。Policies是Hyperledger Fabric的关键功能之一,通过阅读本文,你将理解Hyperledger Fabric的主要技术组成,以及它们在企业决策中的应用。

区块链网络的定义

区块链网络是指为应用程序提供账本记录和智能合约(链码)服务的技术性基础设施。通常来讲,应用程序使用智能合约产生交易数据,这些交易数据有序的派发到网络中的所有节点,并写入节点自身维护的账本之中,账本的数据不可修改。应用程序的用户,或许是终端软件的使用者,或许是区块链网络的管理员。

绝大部分情况,多个企业组成联盟共同构建网络。在网络初始化之际,经过联盟的一致性决定,各个企业的权限通过policies配置设定。此外,随着时间的发展,网络的policies经过联盟的同意进行修订。下文将提及此过程。

目标网络

开始之前,让我们看看最终搭建的网络是什么模样吧。下图展示了目标网络的最终状态。

下图看起来相当复杂,切莫担忧,随着本文行进,每次实现当中的一小块,我们将会看到企业R1,R2,R3,R4是如何加入到网络之中,成为网络的一份子。整个网络的运转,由加入网络的企业一致同意的policies管理,例如,policies指定了谁可以添加新的企业等。接下来会看到,应用程序如何获取账本提供的数据,如何使用智能合约与网络进行交互。 Sample Network 四个企业,R1,R2,R3,R4,达成了协议,决定共同组建一个Hyperledger Fabric网络。R4被大家推举成为网络的初始化一方,授权配置网络的初版。R4并不打算在网络中进行交易。R1和R2需要在网络中进行私密交流,R2和R3也有此诉求。企业R1的应用程序可以在通道 C1中进行交易,企业R2的应用程序可以同时在通道 C1和通道 C2进行交易,企业R3的应用程序可以在通道 C2中进行交易。节点P1维护C1的账本L1,节点P2同时维护C1的账本L1和C2的账本L2,节点P3维护C2的账本L2。网络由配置文件NC4中设定的policies进行管理,控制权归属R1和R4. 通道 C1由配置文件CC1中的policies管理,控制权归属于R1和R2。通道 C2由配置文件CC2中的policies管理,控制权归属于R2和R3. O4提供ordering服务,是网络的管理节点,使用系统通道。Ordering服务同时为C1和C2的交易进行排序,打包和分发。每个企业都有各自的认证机构。

创建网络

我们开始创建网络的基础部分吧。 Basic 网络搭建始于order的运行。在示例网络(N)中,根据网络配置文件NC4,ordering服务由单节点O4提供。NC4同时指定管理员权限归属于R4。在网络层面上,认证机构CA4用于给网络管理员以及R4的节点分配身份。

从上图可以看出,定义网络N的首要特征是ordering服务,O4。把ordering服务作为网络的初始管理入口非常自然。根据配置,企业R4的管理员启动O4节点,节点运行在R4之中。网络配置NC4中的policies的内容制定了网络的管理规则,刚开始时,企业R4拥有全部权限。规则将会改变,下文将会对此描述。目前,R4时网络中的唯一成员。

认证机构

上图中,认证机构CA4给管理员和网络节点发行证书。CA4在网络中扮演核心角色,它给R4的所有组件派发X.509证书,从而确定这些组件的归属。认证机构派发的证书,同时用于交易信息签名,表明企业对交易结果背书,企业的背书是交易被接受的前提条件之一。下面对CA这两方面的功能进一步展开描述。

第一,区块链网络的各个组件用证书表明自身属于某个组织。这也解释了为何同一个区块链网络中通常支持一个以上的认证机构,不通的企业使用不用的认证方式。在示例网络中,共使用了4个CA,4个企业分别使用各自的CA。事实上,CA是如此重要,以至于Hyperledger Fabric提供了内置的CA。实际上,企业会选择适合自身的CA。

证书与企业成员关系的映射,记录在Membership Services Provider(MSP)这种数据结构当中。网络配置文件NC4使用MSP来认证CA4的证书与R4的组件的关系。NC4根据policies中的MSP命名规则,授予R4的组件相对应的权限。举例,根据poicies来鉴别操作者是否是具有添加网络成员的管理员。上图并没有标示MSP,但它是非常重要的。

第二,我们后续会看到CA派发的证书,在交易的生成和认证过程中,起核心作用。具体来说,X.509证书被用于应用程序发起交易提议,以及运行智能合约产生执行结果的过程中参与签名。随后,交易信息被网络节点认证签名合法后,写入账本中。

现在重新回顾示例网络的基本架构。网络中的资源,被认证机构CA4授予证书的用户访问。具体的管理细则通过网络配置文件NC4中的policies设定。这一切始于提供ordering服务的节点O4的启动。

添加网络管理员

NC4的初始配置仅允许R4的用户拥有网络管理权。下一阶段,我们允许R1的用户成为网络管理员。先来看看我们网络如何进化吧: administrator 企业R4更新网络配置文件,使企业R1成为管理员。更新后,R4和R1对网络的控制具有平等的管理能力。

上图看出,新的企业R1加入,并成为管理员,与R4拥有相同的权力。我们也看到,新的认证机构CA1加入,用于识别来自企业R1的用户。至此,来自R1和R4的用户均可管理网络。

尽管orderer节点O4运行在企业R4的机房,R1同样可以管理O4,只要网络访问正常的话。这就是说,R1和R4都可以更新网络配置,比如,授权R2执行特定的网络操作。

当前简单的架构形式,只有单一的orderer节点,然而,ordering服务也可以多节点,多企业的分布式架构实现。比如,可以在R1内部启动O2,O4与O2形成集群共同对外服务。具体内容将会在后面的章节讨论。当前只需把ordering服务当作是不同企业控制网络的管理入口。

定义联盟

至此,R1和R4可以共同管理网络,然而当前网络并不可提供有用的功能。为了发挥网络的作用,首先需要定义一个联盟。联盟,字面上意义为命运共同体,在区块链网络中,它指相互交互的一组企业。

请看联盟是如何定义的: 联盟 网络管理员定义联盟 X1,包含两成员,企业R1和企业R2。联盟定义在配置文件NC4中。图中CA1,CA2为各自企业的认证机构。

由于NC4的管理权限配置,只有R1和R4可以创建联盟。上图新增联盟X1,R1和R2是当中的成员。新增CA2用于识别R2的用户。联盟可以包含无数成员,上图仅仅是最简单的情况。

为何联盟如此重要呢?因为联盟定义了一组可以相互交流的企业,这些企业有着相同的目标。

网络始于单个组织,现在已发展成多个组织共同支撑的形式了。有了联盟的定义,就可以创建通道,通道是Hyperledger Fabric非常重要的一部分。

为联盟建立通道

下面将创建Fabric区块链网络的关键组成--通道. 通道是联盟各个成员之间最基本的沟通机制。同一个网络可以同时存在多个通道,为了方便理解,我们从创建一个通道开始。

来看看,第一个通道加入网络后的情形: channel 根据联盟X1的定义,创建通道C1,为R1和R2提供交流机制。通道根据配置文件CC1的规则运行,与网络配置文件NC4完全独立。R1和R2通过配置CC1平等地管理通道C1。R4没有任何操作通道C1的权限。

通道C1为联盟X1提供私密的通讯机制。上图中通道C1与ordering服务O4相连,除此没有与其他组件连通。下一节。我们会连接通道与应用程序,节点等组件,当前只需知道通道具有连接组件的潜力即可。

通道C1虽说是网络的一部分,自身的运作与网络是各自独立的。企业R3,R4并不再通道C1中,C1仅仅处理R1与R2之间的交易传递。上文提到,R4可以授权R1创建联盟,实际上,R4同时授权R1创建通道。上图中,也许是R4创建了C1,也许是R1创建了C1.通道可以连接任意数量的企业,上图两个企业相接通道是简单的情形。

为何通道如此重要呢?因为通道是联盟之间的成员进行私密通讯的机制。Hyperledger Fabric是这方面的大师,企业之间共享基础设置,同时提供信息保密机制。两者在Hyperledger Fabric的网络中并没有冲突,网络中的不同联盟之间需要适当的信息分享,同时需要保持特殊信息的隐秘性。通道的机制,有效的利用了共享的基础设施,同时维护的数据与交流的私密。

一旦通道创建之后,它就从网络中放飞了。仅仅定义在通道配置中的企业拥有控制权。任何网络的更新对通道无影响,即使联盟X1的配置发生变化,也不会改变通道C1。通道中的数据与网络是完全隔离的。

此外,有一类特殊的通道,系统通道,用于ordering服务。它与普通通道的运行机制一致,又被成为应用程序通道。此类通道将在下文展开论述。

节点与账本

现在我们利用通道连接区块链网络与企业组件。下阶段的开发,我们从图中看出,两个新的组件加入网络,节点P1和账本示例L1.

ledger 节点P1加入通道C1.P1物理层面维护账本L1的其中一个备份。P1与O4通过通道C1进行相互。

节点是区块链账本备份存放的网络节点。P1的作用仅仅是存储账本的备份,方便其他应用程序访问。账本L1,物理上存储在P1,逻辑上存放在通道C1之中。随着越来越多的节点加入通道,这一观点将会越明晰。

P1的配置是CA1发行的X.509证书,此证书表明了P1与企业R1的隶属关系。一旦P1开始运行,它可请求O4将其加入通道C1.O4收到请求后,根据配置CC1鉴别P1是否具有加入通道的权限。

应用程序与智能合约,链码

现在有一份账本在通道C1里,应用程序可以访问节点获取账本的信息,我们可以把节点看作是账本的管家。

chaincode 智能合约S5已经安装在节点P1上。企业R1的应用程序A1可以通过P1上的合约S5访问账本。A1,P1和O4都加入到通道C1.它们之间通过通道C1进行交互。

应用程序A1利用通道C1访问网络上的资源,例如,节点P1和order节点O4。上图再次展示了通道是网络与企业交互的桥梁。像节点与order节点一样,应用程序也需要与企业关联的证书。上图应用程序A1与企业R1相关联。尽管A1在网络之外, 仍然可以通过通道访问网络的资源。

上图看起来,A1通过P1访问L1,实际上内部实现需要智能合约链码S5提供服务。S5相当于访问账本的外部接口、模式,A1通过节点的程序S5访问L1.

添加R2的节点之后,网络完整形态如下: complete

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published