这部分比较详细的描述了Fabric网络的构造,和如何一点点把这个网络拼凑起来的。每个必备的组织都有提到,具体细节还会在后面的章节中细说,这里用了许多图,很形象的解释了网络。
原文地址: Hyperledger Fabric 官方文档
注意:本教程描述了一个使用上一个生命周期过程的网络,其中一个链代码在一个通道上实例化。本主题将更新以反映在2.0.0版的alpha版本中首次引入的结构链代码生命周期功能。
本主题将在概念层面描述超账本结构如何允许组织在区块链网络的形成过程中进行协作。如果您是架构师、管理员或开发人员,您可以使用此主题深入了解超级账本结构区块链网络中的主要结构和流程组件。本主题将使用一个可管理的工作示例,介绍区块链网络中的所有主要组件。在理解了这个例子之后,您可以在文档的其他地方阅读关于这些组件的更详细的信息,或者尝试构建一个示例网络。
阅读本主题并了解策略的概念后,您将对组织在建立控制已部署的Hyperledger Fabric网络的策略时需要做出的决策有充分的了解。您还将了解组织如何使用声明性策略管理网络演变 - 这是Hyperledger Fabric的一个关键特性。简而言之,您将了解Hyperledger Fabric的主要技术组件以及组织需要做出的决策。
区块链网络是一种技术基础设施,为应用程序提供账本和智能合约(链代码)服务。 首先,智能合约用于生成交易,这些交易随后被分配到网络中的每个对等节点,在那里它们不可变地记录在其账本的副本上。 应用程序的用户可能是使用客户端应用程序或区块链网络管理员的最终用户。
在大多数情况下,多个组织作为一个联合体聚集在一起形成网络,它们的权限由一组策略决定,这些策略在最初配置网络时由联合体商定。此外,网络策略可以随着时间的变化而变化,这取决于联合体中组织的同意,正如我们在讨论修改策略的概念时所发现的那样。
在我们开始之前,让我们展示一下我们的目标!这是一个表示示例网络最终状态的图表。
不要担心这可能看起来很复杂! 在我们讨论这个主题时,我们将逐个构建网络,以便您了解组织R1,R2,R3和R4如何为网络提供基础架构以帮助形成网络。 该基础架构实现了区块链网络,它由组成网络的组织商定的策略管理 - 例如,谁可以添加新组织。 您将了解应用程序如何使用区块链网络提供的分类帐和智能合约服务。
四个组织,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中指定的策略规则进行管理,网络由组织R1和R4控制。
通道C1按照通道配置CC1中指定的策略规则进行管理;通道由组织R1和R2控制。
通道C2按照信道配置CC2中指定的策略规则进行管理;通道由组织R2和R3控制。
有一个排序服务O4作为N的网络管理点,并使用系统通道。
排序服务同时支持应用程序通道C1和C2,以便将事务排序成块进行分发。
四个组织中的每一个都有一个首选的证书颁发机构。
让我们从创建网络基础开始:
在排序节点启动时形成网络。在我们的示例网络N中,根据网络配置NC4配置包括单个节点O4的订购服务,网络配置NC4给予组织R4管理权限。在网络级别,证书颁发机构CA4用于将身份分配给R4组织的管理员和网络节点。
我们可以看到,定义网络N的第一件事是排序服务O4。将排序服务视为网络的初始管理点是很有用的。如前所述,O4最初由组织R4中的管理员配置并启动,并在R4中托管。 配置NC4包含描述网络的起始管理功能集的策略。 最初设置为仅通过网络授予R4权限。 正如我们稍后将看到的,这将发生变化,但目前R4是该网络的唯一成员。
您还可以看到证书颁发机构CA4,用于向管理员和网络节点颁发证书。CA4在我们的网络中扮演着关键的角色,因为它分发X.509证书,可用于识别属于组织R4的组件。由CA颁发的证书也可用于签署交易,以表明组织认可交易结果——这是将其接受到账本上的前提条件。让我们更详细地研究一下CA的这两个方面。
首先,区块链网络的不同组件使用证书将彼此标识为来自特定组织。这就是为什么通常有多个CA支持区块链网络 - 不同的组织通常使用不同的CA.我们将在我们的网络中使用四个CA.每个组织一个。实际上,CA非常重要,Hyperledger Fabric为您提供了一个内置的(称为Fabric-CA)来帮助您开始使用,但在实践中,组织将选择使用自己的CA.
证书到成员组织的映射是通过称为Membership Services Provider (MSP).的结构实现的。网络配置NC4使用命名的MSP来识别由CA4分配的证书的属性,该证书将证书持有者与组织R4相关联。然后,NC4可以在策略中使用此MSP名称,以通过网络资源授予R4特定权限的参与者。此类策略的一个示例是识别R4中可以将新成员组织添加到网络的管理员。我们没有在这些图表上显示MSP,因为它们会使它们混乱,但它们非常重要。
其次,我们稍后会看到CA颁发的证书如何成为 transaction生成和验证过程的核心。 具体而言,X.509证书用于客户端应用程序transaction proposals和智能合约transaction responses以对数据签名transaction进行数字签名。 随后,托管账本副本的网络节点在接受到账本上的事务之前验证事务签名是否有效。
让我们回顾一下我们的区块链网络示例的基本结构。 有一个资源名叫网络N,存在由证书颁发机构CA4定义的一组用户访问,其具有对网络N中的资源的一组权限,如网络配置NC4内包含的策略所描述的。 当我们配置和启动排序服务节点O4时,所有这一切都成为现实。
NC4最初配置为仅允许R4用户通过网络进行管理。在下一阶段,我们将允许组织R1用户管理网络。让我们看看网络是如何发展的:
组织R4更新网络配置,使组织R1也成为管理员。在这之后,R1和R4对网络配置拥有相同的权限。
我们看到添加了一个新的组织R1作为管理员——R1和R4现在在网络上拥有平等的权利。我们还可以看到添加了证书颁发机构CA1——它可以用来识别R1组织中的用户。在这之后,来自R1和R4的用户都可以管理网络。
尽管订购方节点O4运行在R4的基础结构上,但R1对它具有共享的管理权限,只要它可以获得网络访问权。这意味着R1或R4可以更新网络配置NC4,使R2组织成为网络操作的一个子集。通过这种方式,即使R4正在运行排序服务,R1也对其具有完全管理权限,R2只有有限的权利创建新的联盟。
在最简单的形式中,排序服务是网络中的单个节点,这就是您在示例中可以看到的内容。排序服务通常是多节点的,并且可以配置为在不同的组织中具有不同的节点。 例如,我们可能在R4中运行O4并将其连接到组织R1中的单独排序节点O2。 通过这种方式,我们将拥有一个多站点,多组织的管理结构。
稍后我们将在本主题中进一步讨论排序服务,但现在只需将排序服务视为一个管理点,它提供不同组织控制的网络访问。
尽管网络现在可以由R1和R4管理,但几乎没有什么可以实现的。我们需要做的第一件事就是定义一个联合体。这个词的字面意思是“有着共同命运的群体”,因此对于区块链网络中的一组组织来说,这是一个合适的选择。
让我们看看联合体是如何定义的:
网络管理员定义一个包含两个成员R1、R2的联合体x1。该联合体定义存储在网络配置NC4中,将在网络开发的下一阶段使用。CA1和CA2是这些组织各自的证书颁发机构。
由于NC4的配置方式,只有R1或R4可以创建新的联合体。此图显示添加了一个新的联合体x1,它将r1和r2定义为其组成组织。我们还可以看到,添加了CA2来识别来自R2的用户。请注意,一个联合体可以有任意数量的组织成员——我们刚刚展示了两个,因为它是最简单的配置。
为什么联合体很重要?我们可以看到,一个联合体定义了网络中的一组组织,这些组织共享彼此进行交易的需求——在本例中是R1和R2。如果组织有一个共同的目标,那么将它们组织在一起是很有意义的,而这正是正在发生的事情。
这个网络虽然是由一个组织发起的,但现在由一组更大的组织控制。我们本来可以这样开始的,因为R1、R2和R4共享控制权,但是这种构建使我们更容易理解。
我们现在将使用联合体x1来创建一个Fabric区块链的非常重要的部分——一个通道。
因此,让我们创建这个结构区块链网络的关键部分——一个通道channel。通道是一种主要的通信机制,通过它,联合体成员可以相互通信。一个网络中可以有多个通道,但现在,我们将从一个通道开始。
让我们看看第一个通道是如何添加到网络的:
已使用联合体定义x1为r1和r2创建了通道c1。通道由通道配置CC1控制,完全独立于网络配置。CC1由对C1拥有同等权利的R1和R2管理。R4在CC1中没有任何权利。
通道C1为联合体X1提供了一个专用通信机制。我们可以看到通道C1已连接到排序服务O4,但没有其他连接到它。在网络开发的下一个阶段,我们将连接客户端应用程序和对等节点等组件。但在这一点上,通道代表了未来连接的潜力。
尽管信道C1是网络N的一部分,但它与网络N是完全不同的。还请注意,通道用于R1和r2之间的事务处理,组织r3和r4不在此通道中。在前面的步骤中,我们看到了R4如何授予R1创建新联合体的权限。值得一提的是,R4还允许R1创建通道!在这个图中,可能是组织R1或R4创建了通道C1。同样,请注意,一个渠道可以有任意数量的组织连接到它——我们已经展示了两个,因为它是最简单的配置。
同样,请注意通道C1如何对网络配置NC4进行完全独立的配置CC1。CC1包含管理R1和R2对通道C1拥有的权限的策略—正如我们所看到的,R3和R4在此通道中没有权限。r3和r4只能与c1交互,前提是它们被r1或r2添加到通道配置cc1中的相应策略中。一个例子是定义谁可以向渠道添加新组织。具体来说,请注意,R4不能将自身添加到通道C1中——它必须且只能由R1或R2授权。
为什么通道如此重要?通道为联合体成员之间的私有通信和私有数据提供了一种机制。通道提供了隔绝其他频道和网络的隐私保障。在这方面,Hyperledger结构非常强大,因为它允许组织共享基础设施,同时保持其私有性。这里没有矛盾——网络中不同的联盟需要适当地共享不同的信息和流程,而渠道提供了一种有效的机制来实现这一点。通道在保持数据和通信隐私的同时,提供了基础设施的高效共享。
我们还可以看到,一旦创建了一个通道,它就在一个非常真实的意义上“从网络中解放出来”。不管是现在还是将来只有在通道配置中明确指定的组织才能控制它。同样,从此时起对网络配置nc4的任何更新都不会对通道配置cc1产生直接影响;例如,如果更改了联合定义x1,则不会影响通道c1的成员。因此,通道是有用的,因为它们允许构成通道中的组织之间进行私人通信。此外,通道中的数据与网络的其他部分(包括其他通道)完全隔离。
除此之外,排序服务还定义了一个特殊的系统通道。它的行为方式与常规通道完全相同,因此有时称为应用程序通道。我们通常不需要担心这个频道,在later in this topic对此进行更多讨论。
现在让我们开始使用该渠道将区块链网络和组织组件连接在一起。在网络开发的下一阶段,我们可以看到我们的网络n刚刚获得了两个新东西,即对等节点p1和账本实例l1。
对等节点p1已加入通道c1。p1保存着账本l1的副本。P1和O4可以通过通道C1相互通信。
对等节点是承载区块链账本副本的网络组件!最后,我们开始看到一些可识别的区块链组件!p1在网络中的目的纯粹是为其他人提供一份分类账l1的副本。我们可以把L1看作是物理托管在P1上,而逻辑托管在通道C1上。当我们向频道添加更多的peer时,我们会更清楚地看到这个想法。
P1配置的一个关键部分是由CA1颁发的X.509标识,它将P1与组织R1关联起来。一旦p1启动,它就可以使用order o4连接通道c1。当O4收到这个连接请求时,它使用通道配置cc1来确定p1对此通道的权限。例如,cc1确定p1是否可以读取和/或写入分类帐l1的信息。
请注意,拥有这些节点的组织如何将对等节点加入到通道中,尽管我们只添加了一个对等节点,但我们将看到网络中多个通道上可以有多个对等节点。我们将看到peer稍后可以扮演的不同角色。
Applications and Smart Contract chaincode
既然通道C1上有一个账本,那么我们就可以开始连接客户机应用程序来使用账本的peer提供的一些服务了!
智能合约S5已安装到P1上。组织r1中的客户端应用程序a1可以使用s5通过对等节点p1访问账本。A1、P1和O4都与信道C1相连,即它们都可以利用该信道提供的通信设施。
在网络开发的下一阶段,我们可以看到客户机应用程序A1可以使用通道C1连接到特定的网络资源——在这种情况下,A1可以连接到对等节点P1和排序节点O4。同样,请看一下通道如何成为网络和组织组件之间通信的核心。就想peer和orderer一样,客户机应用程序将具有一个将其与组织关联的标识。在我们的示例中,客户机应用程序A1与组织R1关联;尽管它在结构区块链网络之外,但它通过通道C1连接到它。
现在看来,A1可以通过p1直接访问账本l1,但实际上,所有访问都是通过一个称为智能合约链码(smart contract chaincode,s5)的特殊程序进行管理的。将S5视为定义了对账本的所有常见访问模式;S5提供了一组定义良好的方法,通过这些方法可以查询或更新账本L1。简而言之,客户应用程序A1必须通过智能合约S5才能到达账本L1!
每个组织中的应用程序开发人员可以创建智能合同链代码,以实现联合体成员共享的业务流程。智能合约用于帮助生成事务,这些事务随后可以分发到网络中的每个节点。稍后我们将讨论这个想法;当网络更大时,更容易理解。现在,要理解的重要一点是,要达到这一点,必须对智能合约执行两个操作;必须先安装智能合约,然后实例化它。
开发智能合约S5后,组织R1中的管理员必须将其安装到对等节点P1上。这是一个简单的操作;在它发生之后,p1已经完全了解了s5。具体来说,p1可以看到s5的实现逻辑——它用来访问账本l1的程序代码。我们将其与仅描述S5输入和输出的S5接口进行对比,而不考虑其实现。
当一个组织在一个通道中有多个peer时,它可以选择安装智能合约的peer;它不需要在每个peer上安装智能合约。
然而,仅仅因为p1安装了s5,连接到通道c1的其他组件并不知道它;它必须首先在通道c1上实例化。在我们的示例中,只有一个对等节点p1,组织r1中的管理员必须使用p1在通道c1上实例化s5。在实例化之后,通道C1上的每个组件都知道存在S5;在我们的示例中,它意味着现在可以由客户机应用程序A1调用S5!
请注意,虽然通道上的每个组件现在都可以访问S5,但它们无法看到其程序逻辑。对于安装了它的节点p1,这仍然是私有的.从概念上讲,这意味着它是实例化的智能合约接口,而不是安装的智能合约实现。为了强化这一想法,安装智能合约显示了我们如何看待它在物理上托管在peer上,而实例化智能合约则显示了我们如何看待它在逻辑上托管在通道上。
在实例化时提供的最重要的附加信息是认可策略。它描述了哪些组织必须先批准交易,然后才能被其他组织接受到其账本副本中。在我们的样本网络中,只有在R1或R2对交易进行背书的情况下,交易才能被接受到分类账L1上。
实例化操作将背书策略放置在通道配置CC1中;它使通道的任何成员都可以访问它。您可以在transaction flow topic.主题中了解更多有关背书策略的信息。
这部分太长了,分两节。
记录每天解决的小问题,积累起来去解决大问题