Fabric官方文档学习①——关键概念

Fabric官方文档学习①——关键概念

区块链网络

Fabric官方文档学习①——关键概念
整个Hyperledger Fabric 网络中有
一个排序服务 O4 ;
一个网络配置策略 NC4;
四个组织 R1、R2、R3 、R4 和对应的证书颁发机构 CA1、CA2、CA3、CA4;
两个通道 C1、 C2 和通道的账本 L1、L2,以及通道配置 CC1、CC2;
两个智能合约 S5 、 S6;
三个节点 P1、P2、P3;
三个客户端 A1、A2、A3;

NC4是网络配置中策略,这个网络受NC4的规则管理,并且由组织 R1 和 R4 控制。通道 C1、C2 是根据在通道配置 CC1 、 CC2 中指定的规则来管理的,分别由组织 R1 和 R2组成的联盟、R2和R3组成的联盟管理。
这有一个排序服务 O4 作为这个网络 N 的一个网络管理员节点,并且使用系统通道与NC4相连。排序服务同时也支持应用通道 C1 和 C2,来对交易进行排序、加入区块然后分发。每个组织都有一个首选的 CA。
S5、S6为智能合约,由A1、A2、A3等客户端应用程序在通道C1、C2上进行调用,结果经过排序后写入对应的分类账L1、L2。节点 P1 维护了 C1 的账本 L1 的副本。节点 P2 维护了 C1 的账本 L1 和 C2 的账本 L2 的副本。节点 P3 维护了 C2 的账本 L2 的副本。

节点和账本

Peer 节点是存储区块链账本副本的网络组件,可以认为 L1 会被物理地存储在 P1 上,但是逻辑上是存储在通道 C1 上。当 P1 启动之后,它就可以使用排序 O4 加入通道C1。当 O4 收到这个加入请求,它会使用通道配置 CC1 来决定 P1 在这个通道中的权限。
节点分为提交节点、背书节点、领导节点和锚定节点。
通道中的每一个对等节点都是提交节点,它们接收生成的交易区块,随后这些区块在被提交到节点的账本副本之前先被验证。
安装了智能合约对等方可以成为背书节点。但一个真正的背书节点,其节点上的智能合约必须要被客户端应用使用,来生成一个被签名的交易响应。
领导节点负责将交易从排序节点分发到组织中其他对等节点,一个节点可以选择参与静态或动态的领导选举。
锚定节点可以与另一个组织中的对等节点进行通信,需要在通道配置中定义。

智能合约和背书策略

智能合约可以被每个组织的应用开发者创建来实现一个在联盟成员间共享的业务流程,它必须被安装,然后在通道中被定义。一个智能合约定义了交易逻辑,它控制了在世界状态中包含的一个业务对象的生命周期。然后它会被打包进一个链码中,这个链码会被部属到一个区块链网络中。从概念上讲,这意味着实际上是定义并提交了智能合约的接口到通道,而不是安装了只能合约的实现。为了强调这个想法,安装智能合约展示了我们是如何将它物理地存储在 Peer 节点上,而实例化智能合约展示了我们是如何将它逻辑地存储在通道中。
背书策略描述了在交易被其他的组织接受并存储在他们的账本副本上之前,哪些组织必须要同意此交易。在我们的示例网络中,只有当 R1 和 R2 对交易进行背书之后,交易才能够被接受并存储到账本 L1 中。

交易流程

  1. 应用程序客户端通过相应的SDK调用CA服务,进行注册和登记,并获取身份证书;
  2. 客户端通过SDK向区块链网络发起一个交易提案(Proposal),交易提案把带有本次交易要调用的合约标识、合约方法和参数信息以及客户端签名等信息发送给背书节点。
  3. 背书节点收到交易提案后,验证签名并确定提交者是否有权执行操作,同时根据背书策略模拟执行智能合约,并将结果及其各自的CA证书签名发还给应用程序客户端。注意,此时的调用链码是模拟执行,不会对账本中的数据进行真正意义上的更改。
  4. 客户端收到背书节点返回的信息后,如果应用程序的请求仅仅是查询分类帐,则应用程序将检查查询响应信息,并且不会将事务提交给 Orderer 服务。
    如果客户端应用程序的请求是更新分类账本数据,则会将事务提交给 Orderer 服务以继续下一步的操作,并且应用程序在提交事务之前检查确定请求是否已满足指定的认可策略(即指定的背书节点都认可)。
  5. Orderer并不需要检查交易中的具体数据,它只是从网络中的所有通道接收交易,按时间顺序对它们进行排序,然后按照区块生成策略,将一批交易打包到一起,生成新的区块,发送给领导节点;
  6. 领导节点收到区块后,会对区块中的每笔交易进行校验,检查交易依赖的输入输出是否符合当前区块链的状态,完成后将区块追加到本地的区块链,并修改世界状态(链交易日志中包含的所有键的最新值)。
  7. 领导节点同步广播给组织内的其它节点。每个对等节点将区块附加到区块链中,写集被提交到当前的状态数据库中。并且对于每个有效的事务,发出一个事件,通知客户端应用程序事务(调用)已被不可变地附加到链中,以及通知该事务是否已经过验证或为无效事务。
上一篇:fabric安装环境和运行测试网络时的踩坑合集!


下一篇:Hyperledger Fabric教程(15)--基于Kafka的Order服务实战