Hyperledger Fabric

一.示例网络

network.structure

四个组织 R1R2R3R4,他们共同决定,并且达成了一个协议,他们将会设置并开发一个 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 中指定的规则来进行管理的,整个网络由组织 R1 和 R4 管理。通道 C1 是根据在通道配置 CC1 中指定的规则来管理的,这个通道由组织 R1 和 R2 管理。通道 C2 是根据在通道配置 CC2 中指定的规则来管理的,这个通道由组织 R2 和 R3 管理。这有一个排序服务 O4 作为这个网络 N 的一个网络管理员节点,并且使用系统通道。排序服务同时也支持应用通道 C1 和 C2,来对交易进行排序、加入区块然后分发。每个组织都有一个首选的 CA。

下面开始一步步的搭建和叙述上述过程

二.创建网络

network.creation

在定义 网络 N 的时候,第一件事情就是定义一个 排序服务, O4。O4 最初被配置并且由组织 R4的一个管理员来启动,并且由 R4 管理。配置 NC4 包含了描述网络管理能力初始集合的规则

你也能够看到一个证书颁发机构,CA4,它会被用来给管理者和网络节点颁发证书。CA4 在我们的网络中扮演着重要的角色,因为它会分配 X.509 证书,这个证书能够用来识别属于组织 R4 的组件也可以用来为交易提供签名,来表明一个组织对交易的结果进行背书,背书是一笔交易可以被接受并记录到账本上的前提条件。

让我们对有关 CA 的两个方面更详细的介绍一下。

  1. 在区块链网络中的不同组件之间,彼此是使用证书来标识自己是来自于特定组织的。这就是为什么通常会有多个 CA 来支持一个区块链网络,因为不同的组织通常会使用不同的 CA。在示例网络中,使用了 4 个 CA,每个组织会有一个 CA。事实上,CA 是非常重要的,所以 Hyperledger Fabric 提供给你一个内置的 CA(被称为 Fabric-CA)以方便使用,尽管在实际当中,组织会选择使用它们自己的 CA。

    将证书同成员组织进行匹配是通过一个称为成员服务提供者(Membership Service Provider, MSP)的结构来实现的。网络配置 NC4 使用一个已命名的 MSP 来识别由 CA4 颁发的证书的属性,这些证书会关联到组织 R4 下的证书持有者。NC4 接下来会使用在策略中的这个 MSP 名字来分配在网络资源上的特殊权利。这个策略的一个例子就是,在 R4 中识别管理员,这个管理员可以向网络中添加新的成员组织。我们没有在这些图标中显示 MSP,因为他们会很杂乱,但是他们是非常重要的。

  2. 接下来我们会看到由 CA 签发的证书是如何在交易的生成和验证的流程中处于核心位置的。特别的,X.509 证书被用于客户端应用的交易提案和智能合约的交易响应,来对交易进行数字签名。接下来持有账本副本的网络节点在接受将交易更新到账本之前会验证交易签名是否有效。

让我们重新整理一下我们的区块链网络示例的基本结构。这有一个资源,网络 N,有一些用户能够访问这个网络,这些用户是由一个证书颁发机构 CA4 定义的,他们具有网络配置 NC4 中包含的规则中所描述的在网络 N 中的权利。当我们配置和启动排序服务节点 O4 的时候上边讲的事情都会发生。

三.添加网络管理员

NC4 最初被配置为仅仅允许 R4 用户在网络中具有管理的权限。在接下来的阶段,我们会允许组织 R1 用户也具有管理的权限。让我们来看看网络是如何演变的:

network.admins

我们看到了新的组织 R1 变成了管理员,R1 和 R4 现在在网络中具有了相同的权限。我们看到证书颁发机构 CA1 也被添加进来了,他用来标识 R1 组织的用户。现在从 R1 和 R4 来的用户就已经是网络的管理员了。

尽管排序节点 O4 是运行在 R4 的基础设施上的,如果 R1 能够访问到的话就可以共享管理的权限。也就是说 R1 或者 R4 可以更新这个网络配置 NC4 来允许组织 R2 进行网络维护中的部分功能。通过这种方式,尽管 R4 运行着排序服务,但是 R1 在其中也具有着全部的管理员权限,R2 具有有限的创建新联盟的权限。

在这个最简单的模式中,排序服务在网络中是一个独立的节点,就像你在例子中看到的。排序服务通常是多节点的,也可以被配置为在不同组织中的不同节点上。比如,我们可能会在 R4 中运行 O4 并连接到 O2,O2 是在组织 R1 中的另一个排序节点。通过这种方式,我们就有了一个多节点、多组织的管理结构。

四.定义联盟

network.consortium

由于 NC4 的配置方式,只有 R1 和 R4 能够创建新的联盟。这个图标显示了一个新的联盟 X1,它定义了 R1 和 R2 是它的联盟组织。我们也看到了 CA2 也被添加进来标识来自 R2 的用户。注意一个联盟可以包含任意数量的组织,这里我们仅包含了两个组织作为一个最简单的配置。

为什么联盟这么重要?我们能够看到联盟定义了网络中的一部分组织,他们共享了彼此能够交易的需求,在这个示例中就是 R1 和 R2 能够进行交易。这对于一组有着共同的目标的组织来说是有意义的。

这个网络虽然最初仅包含一个组织,现在已经由多个组织来管理了。我们将从 R1、R2 和 R4 共享管控权的方式开始,这样的构成更容易被理解。

五.为联盟创建通道

现在我们要使用联盟 X1 创建一个对于 Hyperledger Fabric 区块链非常重要的部分——通道。通道是一个联盟中的成员彼此进行通信的主要机制。在一个网络中可能会有多个通道,但是现在让我们从一个通道开始。

network.channel

通道 C1 为联盟 X1 提供了一个私有的通信机制。我们能够看到通道 C1 已经关联到了排序服务 O4 但是这并没有附带任何功能。尽管 C1 是网络 N 中的一部分,它还是跟这个网络非常不同的。同时也要注意组织 R3 和 R4 并没有在这个通道中,因为这个通道仅仅是为了处理在 R1 和 R2 之间进行的交易的。

需要注意的是通道 C1 如何具有一个同网络配置 NC4 完全分开的配置 CC1。CC1 包含了赋予 R1 和 R2 在通道 C1 上的权利的规则,就像我们看到的那样,R3 和 R4 在这个通道中没有权限。R3 和 R4 只有被 R1 或 R2 添加到通道配置 CC1 中的规则后才能够跟 C1 进行交互。这样做的一个例子是定义谁能够向通道中添加新的组织。

为什么通道会如此重要?通道非常有用,因为提供了一个联盟成员之间进行私有通信和私有数据的机制。通道提供了与其他通道以及整个网络的隐私性。Hyperledger Fabric 在这一点上是很强悍的,因为它允许组织间共享基础设施的同时又保持了私有性。这里并不矛盾,网络中不同的联盟之间会需要将不同的信息和流程进行适合的共享,通道为之提供了有效的机制。

我们也能够看到一旦通道被创建之后,它会真正地代表了“从网络中解放出来”。从现在开始和未来,只有在通道配置中指定的组织才能够控制它。同样的,从现在开始,之后的对于网络配置 NC4 的任何改动都不会对通道配置 CC1 造成任何直接的影响。比如如果联盟定义 X1 被改动了,它不会影响通道 C1 的成员。所以通道是有用的,因为他们允许构成通道的组织间进行私有的沟通。并且在通道中的数据跟网络中的其他部分是完全隔离的,包括其他的通道。

同时,这里还有一个被排序服务使用的特殊的系统通道。它跟常规的通道是完全一样的方式运行的,因此常规的通道有时候又被称为应用通道。我们通常不会关心这个通道,但是以后我们会更详细的讨论它。

六.节点和账本

现在,让我们开始使用通道来将这个区块链网络以及组织的组件关联到一起吧。在网络开发的下一个阶段,我们能够看到我们的网络 N 又新增了两个组件,称作 Peer 节点 P1账本实例 L1

network.peersledger

Peer 节点是存储区块链账本副本的网络组件。P1 在这个网络中的目的是单纯地放置被其他人访问的账本 L1 的副本。我们可以想象 L1 会被物理地存储在 P1 上,但是逻辑上是存储在通道 C1 上。当我们向通道中添加更多的节点之后,我们对这些就会更加清楚。

P1 的配置中一个关键部分就是一个由 CA1 颁发的 X.509 身份信息,它将 P1 和组织 R1 关联了起来。当 P1 启动之后,它就可以使用排序 O4 加入通道C1。当 O4 收到这个加入请求,它会使用通道配置 CC1 来决定 P1 在这个通道中的权限。比如,CC1 决定 P1 是否能够向账本 L1 中读取或写入信息。

七.应用程序和智能合约链码

现在通道 C1 拥有了一个账本,我们可以连接客户端应用来使用由 Peer 节点提供的服务了。

network.appsmartcontract

智能合约 S5 被安装在了 P1 上。在组织 R1 中的客户端应用 A1 (就像 Peer 节点和排序节点一样,客户端应用也会有一个使它和组织相关联的身份信息。)可以通过 Peer 节点 P1 使用 S5 来访问账本。A1、P1 和 O4 都加入了通道 C1,他们都可以使用由这个通道提供的通信设施。

智能合约可以被每个组织的应用开发者创建来实现一个在联盟成员间共享的业务流程。智能合约被用来帮助生成被分发到网络中每个节点的交易。我们接下来会详细讨论。

现在,为了达到这一点,需要对智能合约执行两项操作,它必须被安装,然后在通道中被定义

  1. 安装链码包

    在智能合约 S5 被开发完之后,组织 R1 中的管理员必须要把它安装到节点 P1 上。当完成之后,P1 就完全了解了 S5。特别地,P1 能够看到 S5 的实现逻辑(用来访问账本 L1 的程序代码)。当一个组织在一个通道中有多个 Peer 节点时,可以选择在哪个节点安装智能合约,而不需要每个 Peer 节点上都安装。

  2. 定义链码

版权声明:本文为zmk-c原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zmk-c/p/14662632.html