Linux搭建Hyperledger Fabric区块链框架 - 区块链网络

区块链网络

区块链网络是一个为应用程序提供账本及智能合约(chaincode)服务的技术基础设施。首先,智能合约被用来生成交易,接下来这些交易会被分发给网络中的每个节点,这些交易会被记录在他们的账本副本上并且是不可篡改的。这个应用程序的用户可能是使用客户端应用的终端用户,或者是一个区块链网络的管理员。

在大多数的情况下,多个组织会聚集到一起作为一个联盟来形成一个网络,并且他们的权限是由一套在网络最初配置的时候联盟成员都同意的规则来决定的。并且,网络的规则可以在联盟中的组织同意的情况下随时地被改变。

示例网络

在这里插入图片描述
四个组织 R1、R2、R3 和 R4,他们共同决定,并且达成了一个协议,他们将会设置并开发一个 Hyperledger Fabric 网络。

  • 每个组织都有一个首选的 CA。R1-CA1,R2-CA2,R3-CA3,R4-CA4。
  • R4 被分配作为网络的初始者,它有权设置网络的初始版本NC4。R4 不会在网络中去进行任何的业务交易。
  • 一个排序服务 O4 作为这个网络 N 的一个网络管理员节点,并且使用系统通道。排序服务同时也支持应用通道 C1 和 C2,来对交易进行排序、加入区块然后分发。
  • 组织 R1 有一个客户端应用A1能够在通道 C1 中进行业务的交易。组织 R2 有一个客户端应用A2可以在通道 C1 和 C2 中进行类似的工作。组织 R3 有一个客户端应用A3可以在通道 C2 中做这样的工作。
  • 节点 P1 维护了 C1 的账本 L1 的副本。节点 P2 维护了 C1 的账本 L1 和 C2 的账本 L2 的副本。节点 P3 维护了 C2 的账本 L2 的副本。
  • 这个网络是根据在网络配置 NC4 中指定的规则来进行管理的,整个网络由组织 R1 和 R4 管理。
  • 通道 C1 是根据在通道配置 CC1 中指定的规则来管理的,这个通道由组织 R1 和 R2 管理。通道 C2 是根据在通道配置 CC2 中指定的规则来管理的,这个通道由组织 R2 和 R3 管理。

创建网络

在这里插入图片描述
当一个排序服务启动后就形成了这样的一个网络。在示例网络 N 中,排序服务 O4 由一个单独的节点组成,是根据一个网络配置 NC4 来进行配置的。在网络层面上,证书颁发机构 CA4 被用来向管理员和组织 R4 的网络节点分配身份信息。

在定义网络 N 的时候,第一件事情就是定义一个排序服务:O4。对于一个网络在最初就考虑以管理员节点的形式定义这个排序服务是非常有帮助的。 O4最初被配置并且由组织 R4 的一个管理员来启动,并且由 R4 管理。配置 NC4 包含了描述网络管理能力初始集合的规则。

证书颁发机构(Certificate Authorities,CA)

一个证书颁发机构:CA4,它会被用来给管理者和网络节点颁发证书,这个证书能够用来识别属于组织 R4 的组件。由 CA 颁发的证书也可以用来为交易提供签名,来表明一个组织对交易的结果进行背书,背书是一笔交易可以被接受并记录到账本上的前提条件。

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

将证书同成员组织进行匹配是通过一个称为成员服务提供者(Membership Service Provider, MSP)的结构来实现的。网络配置 NC4 使用一个已命名的 MSP 来识别由 CA4 颁发的证书的属性,这些证书会关联到组织 R4 下的证书持有者。NC4 接下来会使用在策略中的这个 MSP 名字来分配在网络资源上的特殊权利。

添加网络管理员

在这里插入图片描述
组织 R4 更新了网络配置来使组织 R1 也成为管理员,现在 R1 和 R4 在网络配置中便具有了相同的权限。证书颁发机构 CA1 被添加进来,用来标识 R1 组织的用户。

尽管排序节点 O4 是运行在 R4 的基础设施上的,如果 R1 能够访问到的话就可以共享管理的权限。也就是说 R1 或者 R4 可以更新这个网络配置 NC4 来允许组织 R2 进行网络维护中的部分功能。

定义联盟

在这里插入图片描述
网络管理员定义了一个包含两个成员的联盟 X1,包含组织 R1 和 R2。这个联盟的定义被存储在了网络配置 NC4 中,会在接下来的网络开发中被使用。CA1 和 CA2 是这两个组织对应的证书颁发机构。

联盟定义了网络中的一部分组织,他们共享了彼此能够交易的需求,在网络N中就是 R1 和 R2 能够进行交易。

为联盟创建通道

在这里插入图片描述
使用联盟 X1 为 R1 和 R2 创建的的通道 C1,通道 C1 为联盟 X1 提供了一个私有的通信机制。这个通道通过通道配置 CC1 来进行管理,完全独立于网络配置。CC1 是由 R1 和 R2 管理的,他们在 C1 上具有同等的权利。 R4 在 CC1 中是没有任何权利的。之后的对于网络配置 NC4 的任何改动都不会对通道配置 CC1 造成任何直接的影响。比如如果联盟定义 X1 被改动了,它不会影响通道 C1 的成员。

通道提供了一个联盟成员之间进行私有通信和私有数据的机制。它允许组织间共享基础设施的同时又保持了私有性。

节点和账本

在这里插入图片描述
一个 Peer 节点 P1 加入了通道 C1。物理上 P1 会存储账本 L1 的副本。P1 和 O4 可以使用通道 C1 来进行通信。

Peer 节点是存储区块链账本副本的网络组件。P1 在这个网络中的目的是放置被其他人访问的账本 L1 的副本。 L1 会被物理地存储在 P1 上,但是逻辑上是存储在通道 C1 上。

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

应用程序和智能合约链码

在这里插入图片描述
现在通道 C1 拥有了一个账本,可以连接客户端应用来使用由 Peer 节点提供的服务了。智能合约 S5 被安装在了 P1 上。在组织 R1中的客户端应用 A1 可以通过 Peer 节点 P1 使用 S5 来访问账本。S5 提供了一套完整的定义来对账本 L1 进行查询及更新。A1、P1 和 O4 都加入了通道 C1,都可以使用由这个通道提供的通信设施。

智能合约可以被每个组织的应用开发者创建来实现一个在联盟成员间共享的业务流程。智能合约被用来帮助生成被分发到网络中每个节点的交易。为了达到这一点,需要对智能合约执行两项操作,它必须被安装,然后在通道中被定义。

  • 一个智能合约定义了交易逻辑,它控制了在世界状态中包含的一个业务对象的生命周期。然后它会被打包进一个链码中,这个链码会被部署到一个区块链网络中。可以把智能合约想象为管理交易,链码则管理着智能合约应该如何被打包部署。
安装链码包

在智能合约 S5 被开发完之后,组织 R1 中的管理员必须要把它安装到节点 P1 上。当完成之后,P1 就完全了解了 S5,P1 能够看到 S5 的实现逻辑(用来访问账本 L1 的程序代码)。同 S5 的接口进行对比,接口只是描述了 S5 的输入和输出,但是没有它的实现。

当一个组织在一个通道中有多个 Peer 节点时,可以选择在哪个节点安装智能合约,而不需要每个 Peer 节点上都安装。

定义链码

尽管链码会被安装在组织的 Peer 节点上,但是它是在一个通道范围内被管理和维护的。

  • 每个组织需要批准一个链码定义和一系列参数来定义在一个通道中链码应该被如何使用。
  • 一个组织必须要批准一个链码定义,才能使用已经安装的智能合约来查询账本和为交易背书。

在我们的例子中,只有一个单独的 Peer 节点 P1,一个组织中的管理员 R1 必须要批准 S5 的链码定义。在链码定义能够被提交到通道并且用来同通道账本进行互动之前,需要有效数量的组织来批准一个链码的定义(默认为大多数)。 因为通道中只有一个成员,R1 的管理员可以提交 S5 的链码定义到通道 C1。当这个定义提交后,S5 就可以被客户端应用 A1 调用了!

背书策略

在链码定义提供的信息中最重要的部分就是背书策略。它描述了在交易被其他的组织接受并存储在他们的账本副本上之前,哪些组织必须要同意此交易。在我们的示例网络中,只有当 R1 和 R2 对交易进行背书之后,交易才能够被接受并存储到账本 L1 中。

将链码定义提交到通道的同时背书策略也会被放置在通道账本上,通道中的每个成员都可以访问该策略。你可以在交易流程话题中阅读更多关于背书策略的内容。

调用智能合约

当智能合约被安装在 Peer 节点并且在通道上定义之后,它就可以被客户端应用调用了。客户端应用是通过发送交易提案给智能合约背书策略所指定的 Peer 的节点方式来调用智能合约的。这个交易的提案会作为智能合约的输入,智能合约会使用它来生成一个背书交易响应,这会由 Peer 节点返回给客户端应用。

这些交易的响应会和交易的提案打包到一起形成一个完整的经过背书的交易,他们会被分发到整个网络。在网络开发的这个阶段,我们能够看到组织 R1 完整参与了这个网络。它的应用,从 A1 开始,通过智能合约 S5 访问账本 L1,并生成将要被 R1 背书的交易,最后会被接受并添加到账本中,因为这满足了背书策略。

完成网络

在这里插入图片描述
这个网络通过增加新组织 R2 的基础设施变得更大。具体来说,R2 添加了 Peer 节点 P2,它会存有账本 L1 的一个副本和链码 S5。R2 像 R1 一样批准了相同的链码定义。P2 也加入了通道 C1,也有一个客户端应用 A2。A2 和 P2 使用由 CA2 颁发的证书来标识 A2 和 P2。A1 和 A2 均能够使用 Peer 节点 P1 或者 P2 来调用在 C1 上的 S5。

组织 R2 在通道 C1 上添加了 Peer 节点 P2。P2 也存储了账本 L1 和智能合约 S5 的副本。R2 也添加了客户端应用 A2,它能够通过通道 C1 连接到网络。为了达到这个目的,组织 R2 的管理员添加了 Peer 节点 P2 并且将它加入到通道 C1,就像 R1 的管理员一样。管理员也必须要像 R1 那样批准相同的链码定义。

第一个可运行的网络! 目前,定义了一个通道,在这个通道中组织 R1 和 R2 能够彼此进行交易。特别地,这意味着 A1 和 A2 能够使用在通道 C1 上的智能合约 S5 和账本 L1 来生成交易。

生成并接受交易

相较于经常会存有账本副本的 Peer 节点,存在两种类型的 Peer 节点,一类是存储智能合约而另一类则不存。在当前网络中,每个 Peer 节点都会存储智能合约的副本,但是在一个更大的网络中,会存在更多的 Peer 节点并且没有存储智能合约的副本。节点只有在安装了智能合约之后才能够运行它,但是这个 Peer 节点可以通过连接到通道来获取一个智能合约的接口信息。

更多情况下,带有智能合约的 Peer 节点通常会拥有一个特殊的能力——帮助生成交易。需要注意的是所有的 Peer 节点都可以验证并接受或者拒绝交易存入他们的账本 L1 的副本中。然而,只有安装了智能合约的 Peer 节点才能够参与交易背书的流程,这是生成一笔有效交易的核心。

Peer 节点的类型

在 Hyperledger Fabric 中,所有的 Peer 节点都是一样的,基于这个网络的配置,Peer 节点能够担当多个角色。

  • 提交节点(Committing Peer)。通道中的每个 Peer 节点都是一个提交节点。他们会接收生成的区块,在这些区块被验证之后会以附加的方式提交到 Peer 节点的账本副本中。

  • 背书节点(Endorsing Peer)。每个安装了智能合约的 Peer 节点都可以作为一个背书节点。然而,想要成为一个真正的背书节点,节点上的智能合约必须要被客户端应用使用,来生成一个被签名的交易响应。智能合约的背书策略明确了在交易被接受并且记录到提交节点的账本之前,需要哪些组织的 Peer 节点为交易签名。

这是 Peer 节点的两个主要类型,一个 Peer 节点还可以担任的两种其他的角色:

  • 主节点(Leading Peer)。当组织在通道中具有多个 Peer 节点的时候,会有一个主节点,它负责将交易从排序节点(Ordering Node)分发到该组织中其他的提交节点。一个节点可以选择参与静态或者动态的领导选举。对于静态选择,0个或者多个节点可以被配置为主节点。对于动态选举,一个节点会被选举成为主节点。另外,在动态选举主节点中,如果一个主节点出错了,那么剩下的节点将会重新选举一个主节点。这意味着一个组织的节点可以有一个或者多个主节点连接到排序服务。这有助于改进需要处理大量交易的大型网络的弹性以及可扩展性。

  • 锚节点(Anchor Peer)。如果一个 Peer 节点需要同另一个组织的 Peer 节点通信的话,它可以使用对方组织通道配置中定义的锚节点。一个组织可以拥有0个或者多个锚节点,并且一个锚节点能够帮助很多不同的跨组织间的通信。

一个 Peer 节点可以同时是一个提交节点、背书节点、主节点和锚节点。在实际情况中只有锚节点是可选的,一般都会有一个主节点,至少一个背书节点和一个提交节点。

向通道中添加组织和节点

当 R2 加入到通道的时候,组织必须要向它的 Peer 节点 P2 上安装智能合约 S5,应用 A1 或者 A2 就可以使用 Peer 节点 P2 上的 S5 来生成交易。 P2 有了智能合约和账本的物理的副本,像 P1 一样,它可以生成并接受交易到它的账本 L1 的副本上了。

R2 必须要像 R1 那样批准相同的链码定义才能够使用智能合约 S5。因为链码定义已经被组织 R1 提交到了通道,当 R2 的组织批准了链码定义并且安装了链码包之后,R2 就可以使用链码了。提交的交易只需要发生一次。通道中新的组织批准了通道中其他成员已经同意的链码参数之后就可以使用链码了。 因为链码定义的批准是发生在组织级别的,所以 R2 只需要批准链码定义一次,然后就可以将多个节点加入到安装了链码包的通道。然而,如果 R2 想改变链码的定义,那么 R1 和 R2 需要为他们的组织批准一个新的定义,然后其中一个组织需要将定义提交到通道。

在网路N中,能够看到通道 C1 连接了两个客户端应用、两个 Peer 节点和一个排序服务。因为这里只有一个通道,也就只有一个跟这个通道组件交互的逻辑账本。Peer 节点 P1 和 P2 具有相同的账本 L1 的副本。智能合约 S5 的副本通常会使用相同的编程语言来进行相同的实现,如果语言不同,他们也必须有相同的语义。

在网络精心的增加节点有助于提升吞吐量、稳定性以及弹性。比如,网络中有更多的节点将允许更多的应用来连接这个网络,并且当组织中有多个节点发生计划内和计划外停机的时候可以提供额外的弹性。 这意味着可以通过配置网络拓扑来支持不同的目的,网络的大小是没有理论上限的。并且,一个组织内节点的发现和通信的技术机制,gossip 协议,可以容纳大量的 Peer 节点来支持这样的拓扑。网络和通道策略的精心使用可以很好的管理庞大的网络。组织可以随意地向网络中添加 Peer 节点,只要他们满足了网络的策略。网络及通道的策略在描绘去中心化网络中的自主和管控之间创建了平衡。

简化视觉词汇表

在这里插入图片描述
这个网络的图表通过将通道连线替换成了连接点的方式进行了简化,连接点显示为一个蓝色的圆圈,里边包含了通道数字。没有任何的信息丢失。这种展现方式更加的可扩展,因为它去除了交叉的连接线。这个让我们能够更清晰地展现更大的网络。

在网络 N 中:客户端应用 A1 和 A2 能够通过节点 P1 和 P2 以及排序节点 O4 使用通道 C1 来进行通信。Peer 节点 P1 和 P2 可以使用通道 C1 的通信服务。排序服务 O4 可以使用通道 C1 的通信服务。通道配置 CC1 应用于通道 C1。

添加另外一个联盟定义

在这里插入图片描述
引入组织 R3,来自 R1 或者 R4 的网络管理员添加了一个新的联盟定义 X2,其中包含了 R2 和 R3。引入联盟 X2 是为了给 R2 和 R3 创建一个新的通道。新通道只能够由网络配置策略 NC4 中指定的组织比如 R1 或者 R4 来创建。

添加一个新的通道

在这里插入图片描述
新的联盟定义 X2 为 R2 和 R3 创建一个新的通道 C2。这个通道具有通道配置 CC2,完全同网络配置 NC4 以及通道配置 CC1 分离。通道 C2 由 R2 和 R3 来管理,R1 和 R4 在 CC2 中是没有任何权利的。通道 C2 为联盟 X2 提供了一个私有的通信机制。联盟将组织统一到一起的方式就是通道。 通道配置 CC2 包含了管理通道资源的策略,通过通道C2 来向组织分配管理权限。由 R2 和 R3 唯一管理,比如可以更新通道配置 CC2 来添加新的组织以支持网络的增长,这个只能由 R2 或者 R3 来完成。

通道配置 CC1 和 CC2 以及网络配置 NC4 是彼此完全分离的。这就是一个 Hyperledger Fabric 网络的去中心化的特质,一旦通道 C2 被创建后,它是由组织 R2 和 R3 来管理的,独立于网络中的其他元素。通道的策略通常是保持彼此分离的,并且只能由通道中授权的组织来进行改动。

网络和通道配置

当使用排序服务节点 O4 首次组建网络的时候,它的行为是由网络配置 NC4 来管理的。NC4 的初始配置中只包含了允许组织 R4 来管理网络资源的策略。NC4 接下来被变更为也允许 R1 来管理网络资源。一旦这个改动生效后,任何来自于组织 R1 或者 R4 的管理员连接到 O4 都将具有网络管理的权限,因为这是网络配置 NC4 中的策略所允许的。

当 Peer 节点 P1 和 P2 同客户端应用程序 A1 或者 A2 进行交互的时候,他们使用了在通道配置中定义的策略来管理对通道 C1 资源的访问。比如,如果 A1 想要访问在 Peer 节点 P1 或者 P2 上的智能合约链码 S5 的话,每个 Peer 节点会使用它的 CC1 的副本来决定 A1 能够进行哪些操作。比如根据在 CC1 中定义的策略,A1 可能被允许从账本 L1 上读取或者写入数据。尽管 Peer 节点和应用程序在网络中是关键的操作者,他们在一个通道中的行为更多的是由通道配置的策略来决定的。

网络和通道的配置在逻辑上是独立的,网络会有一个配置,每个通道也会有一个配置。任何访问网络或者通道的组件必须对不同组织的授权有共同的理解。 在网络N中,节点 P1 和 P2 都有通道配置 CC1 的副本,在这个网络完成的时候,节点 P2 和 P3 也会有通道配置 CC2 的副本。类似的,排序服务节点 O4 有网络配置的副本,但是在多节点配置中,每个排序服务节点都会有他们自己的关于网络配置的副本。

网络和通道的配置使用了和用户交易所使用的相同的区块链技术来保持一致,只是被叫做配置的交易。想要改变网络或者通道的配置,管理员必须要提交一个配置交易来改变网络或者通道的配置。该交易必须被对应策略中指定的组织签名,这些组织负责配置的改变。这个策略被称为mod_policy 。 实际上,排序服务节点运行着一个小型的区块链,通过系统通道连接。使用系统通道排序服务节点分发网络配置交易。这些交易被用来维护每个排序服务节点间网络配置副本的一致性。类似的,应用程序通道中的 Peer 节点分发通道配置交易。同样,这些交易被用来维护每个 Peer 节点通道配置的一致性。

这种对象在逻辑上独立,却在物理分发上平衡,这在 Hyperledger Fabric 中是一种常见的模式。像网络配置这样的对象,逻辑上是独立的,但在一些排序服务节点间被物理复制。对于通道配置、账本及智能合约,他们被安装在了多个地方,但是在逻辑上他们的接口是在通道级别上的。这使 Hyperledger Fabric 变得既去中心化,有能够在同一时间进行管理。

添加另外一个 Peer 节点

在这里插入图片描述
客户端应用程序 A1 和 A2 可以使用通道 C1 来同节点 P1 和 P2,以及排序服务 O4 进行通信。客户端应用程序 A3 能够使用 C2 同节点 P3 和排序服务 O4 进行通信。排序服务 O4 可以使用通道 C1 和 C2 的通信服务。通道配置 CC1 应用到了通道 C1 上,CC2 应用到了通道 C2 上。因为 Peer 节点 P3 连接到了通道 C2,所以它有一个和使用通道 C1 的节点不同的账本 L2。账本 L2 被有效地控制在了通道 C2 中。账本 L1 是完全独立的,它被限制在了通道 C1。通道 C2 的目的是为联盟 X2 的成员提供私有通信,并且账本 L2 是他们的交易的私有存储。智能合约 S6 安装在 Peer 节点 P3,定义在通道 C2 上,用来为账本 L2 提供可控的访问。应用程序 A3 现在能够使用通道 C2 来调用智能合约 S6 提供的服务来生成交易,这些交易会在网络中被每个账本的副本所接受。

把一个 Peer 节点添加到多个通道中

在这里插入图片描述
客户端应用程序 A1 能够使用通道 C1 与节点 P1 和 P2 以及排序服务 O4 进行通信。客户端应用程序 A2 可以使用通道 C1 与节点 P1 和 P2 进行通信,以及使用通道 C2 与节点 P2 和 P3 以及排序服务 O4 进行通信。客户端应用程序 A3 能够使用通道 C2 与节点 P3 和 P2 和排序服务 O4 进行通信。排序服务 O4 能够使用通道 C1 和 C2 的通信服务。通道配置 CC1 应用在了通道 C1 中,CC2 应用在了通道 C2 中。R2 在网络中是一个特别的组织,因为它是唯一一个同时属于两个通道成员的组织!它能够在通道 C1 上跟组织 R1 进行交易,也能够同时使用另外一个通道 C2 来跟组织 R3 进行交易。节点 P2 将智能合约 S5 安装在通道 C1 中,将智能合约 S6 安装在通道 C2 中。节点 P2 同时是两个通道的成员,并且通过不同的智能合约来处理不同的账本。

通道既提供了组织间的分离,又提供了组织间进行合作的机制。 在不同通道上交易时 Peer 节点 P2 的行为受到不同的约束。特别地,在通道配置 CC1 中包含的策略决定了 P2 在通道 C1 中进行交易的时候的操作,通道配置 CC2 中的策略对 P2 在通道 C2 中进行控制。R2 和 R1 同意了通道 C1 的规则,R2 和 R3 同意了通道 C2 的规则。这些规则包含在对应的通道策略中,它们能够且必须要在通道里被用来强制执行正确的操作。客户端应用程序 A2 能够在通道 C1 和 C2 上进行交易。同样,它也会按照在相关通道配置中的策略来进行管理。

排序服务

排序服务看起来像是一个中心化的组件,它最初被用来创建这个网络,然后连接到了网络中的每个通道。即使添加 R1 和 R4 到了管理排序服务的网络配置策略 NC4,这个排序节点依旧是运行在 R4 的基础设施上。
在这里插入图片描述
一个多组织的排序服务。排序服务包括排序服务节点 O1 和 O4。O1 是由组织 R1 提供的,O4 是由组织 R4 提供的。网络配置 NC4 中定义了来自 R1 和 R4 的操作者的网络资源权限。

这个排序服务是完全去中心化的,它在组织 R1 和 R4 中运行。网络配置策略 NC4 赋予了 R1 和 R4 对于网络资源相同的权限。R1 和 R4 的客户端应用程序和 Peer 节点可以通过连接 O1 或者 O4 来管理网络资源,就像在网络配置 NC4 中定义的策略一样,两个节点是用相同的方式来操作的。

去中心化的交易分发

跟作为网络的管理点一样,排序服务同样提供了另外一个关键的设施——交易的分发点。排序服务是一个从应用程序搜集背书过的交易的组件,然后它会把这些交易进行排序并放进区块中,这些区块会被分发到通道中的每个 Peer 节点。在每个这样的提交节点中,交易不管是有效的还是无效的都会被记录下来,并且他们本地账本副本也会更新。

排序服务节点 O4 在通道 C1 扮演着和网络 N 不同的角色。当在通道级别操作时,O4 的角色是搜集交易并在通道中分发区块。它依据通道配置 CC1 中定义的策略来操作。当在网络级别操作时,O4 的角色是提供对网络资源的管理,这是根据网络配置 NC4 中定义的策略来操作的。两种策略都被定义并且用来管控联盟中的每个成员都同意的行为。排序服务和 Hyperledger Fabric 中的其他组件一样,是一个完全去中心化的组件。不管是作为一个网络的管理点,还是作为一个通道中的分发节点,它的节点都可以依据在一个网络中的多个组织的要求被分散地运行。

修改策略

一个策略的变化是由策略中的策略来管理的。 那就是修改策略,或者简称mod_poicy,它是在管理变化的网络或者通道配置中的头等策略。

  • 创建网络初始时,只有组织 R4 被允许管理网络。在实际当中,这个是通过在网络配置 NC4 中把 R4 定义为唯一一个有权限来管理网络资源的组织来实现的。并且对于 NC4 的 mod_policy 也仅仅提到了组织 R4,因此只有 R4 被允许改变这个配置。

  • 接下来将网络 N 进行了演进,同时允许组织 R1 来管理网络。R4 通过将 R1 添加到通道创建和联盟创建的策略中来实现。因为这个改动,R1 就可以定义联盟 X1 和 X2 了,并且可以创建通道 C1 和 C2。R1 在网络配置中对于通道和联盟策略具有了同样的管理权限。R4 可以将 R1 添加到 mod_poicy,这样 R1 就同样可以管理这个网络中的变更了。

  • 现在 R1 具有了在网络配置 NC4 上的所有权限!这意味着,R1 能够移除 R4 在这个网络的管理权限。在实际当中,R4 会将 mod_policy 配置成对这样的改动需要 R4 批准,或者需要所有在 mod_policy 中定义的组织批准。这里有很大的灵活性来使 mod_policy 根据需要来定义任何更改流程。

mod_policy,它允许一个基本的配置被优雅地演进为一个成熟的配置。 这些演进都需要所有被引入的组织的同意。mod_policy 像在一个网络或者通道配置中的每一个其他的策略一样,它定义了一系列的组织,这些组织被允许自己来修改这个 mod_policy。

网路完全形成

在这里插入图片描述
本文中创建的 Fabric 区块链网络有四个组织的网络,带有两个通道和三个 Peer 节点,两个智能合约和一个排序服务。并由四个证书颁发机构来支撑。它为三个客户端应用程序提供了账本及智能合约服务,这些应用程序可以通过两个通道与账本和智能合约进行交互。

组织 R1 和 R4 负责排序通道,R1 和 R2 负责蓝色的应用程序通道,R2 和 R3 负责红色的应用程序通道。客户端应用程序 A1 是组织 R1 的元素,CA1 是它的证书颁发机构。到组织 R2 的节点 P2 可以使用蓝色的通信设施,也可以使用红色的应用程序通道。 每个应用程序通道具有它自己的通道配置,这里是 CC1 和 CC2。系统通道的通道配置是网络配置 NC4 的一部分。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值