本文参照fabric网络流程做了一个总结。参考链接:
区块链网络 — hyperledger-fabricdocs master 文档
在之前学习区块链网络时大致看过一遍,但是初学的理解并不深刻,所以重新看过一遍继续理解,每次学到不同程度再看这些文章都会有新的收获,基于fabric2.2的区块链网络。
最终的简易网络会是这样,看着很复杂,需要一点点分析。
1.在网络开始之初我们可以讲整个网络想象为一个空白区域,没有人参与网络。 此时网络需要有人参与,我们假定有一个组织R4加入到该网络,该组织通过对应CA机构颁发证书许可加入,跟着这个组织一起的组件有NC4,O4,CA4。接下来将一一解释这些名词,什么是组织,组织大到区域,小到商铺,它是一个独立的个体或集合,如每个公司,人数可以不同,但每个公司可以看作一个组织。CA4为签证机构,用于颁发证书给需要组织,使得这些组织获得网络操作的许可。O4为排序节点,将收到的交易进行排序,在本地还可以存组织联盟信息(之后会提及联盟),O4的操作权限主要是由NC4控制,NC4为网络配置,可以定义策略(策略是规则的意思),如分配R4组织设定为管理员,拥有网络最高权限,让O4节点本地存储联盟信息等。如下图,由于这些组件都由CA4颁发证书,所以R4可以和O4连接通信。
?接下来初始网络有一个管理员R4组织加入到网络,R4可以修改NC4网络配置,将R1组织加入到该网络与其拥有同样权限,所以修改NC4配置使得R1获得管理权限,那当R1也为管理员后是否可以修改NC4网络配置将R4给删除呢,那就要看当时R4将R1加入到网络时是否允许,这里需要引入修改策略mod_poicy,R1虽然拥有管理权限,但是无法修改策略mod_poicy,一旦R4将R1加入到mod_poicy中,那R1也具有删除R4的权限,但实际情况R1需要调用mod_poicy时需要得到R4的许可。
?此时R1与R4拥有同样权限,CA1为R1颁发证书,如果此时R1想让R2也加入网络,但不想让R2与R4进行通信,例如R1是供应商,R4和R2为购买商,R1给他们的售价不一样,这时是不希望R2与R4通信的。这时引入了联盟的概念。即R1与R2联盟到该网络中,怎么能让网络知道有R2的存在呢?这时R1就会发挥它管理员的作用配置NC4将自己与R2写入,告诉NC4自己要与R2联盟了。下图的为联盟的意思,联盟可以有多个,不一定是两个,文档以两个举例。当网络知道R2组织加入进来后,NC4配置文件会调用O4排序节点让它本地创建一个通道信息给R1和R2,如下图C1通道。通道的概念类似于两个组织之间的通信,如创建群聊,R1与R2创建群聊,则R1与R2之间相当于构建了一条通道C1。C1通道是逻辑上的概念,实际上通道信息存储于O4本地,所以C1上的区块信息可以与排序节点O4进行通信,R1与R2联盟后会生成一个通道配置CC1,与NC4不同,NC4为网络配置,管理全网组织通道信息,CC1仅为通道C1的通道配置,该配置只适用于C1通道上。
我们在现有基础上增加两个组件,账本L1和peer节点P1。?
当P1节点受CA1颁发证书启动后使用O4加入通道C1,并使用CC1来设置P1的权限,P1可以认为是一个节点用于存储账本和验证操作的。L1为通道C1的账本,在下图中指R1组织与R2组织的交易记录,由于P1在实体中也是一个服务器,所以账本物理存储在了该节点P1中,通道是一种概念,所以无法实际存储数据在通道上,但逻辑上账本是在通道上的,因为通道可以通过调用Peer节点P1调用智能合约接口(即将引入)来获取L1账本,所以物理上账本存储在P1上,逻辑上账本存储在通道C1上。如下图P1节点加入C1,就可以通过C1与O4进行通信。
如果账本L1需要更改怎么办,区块链网络的安全性,账本是很重要的元素,不可以轻易改变,所以引入了智能合约S5,智能合约为一段触发后自动执行的代码,当客户端A1想要获取账本L1时会通过网络请求提交至S5,S5会自动执行调用L1操作,S5提供了完整的查询和更新操作?
A1客户端可以直接通过通道C1访问S5智能合约接口吗?不,不能,这里需要提到一个概念。链码定义,在智能合约被安装到Peer节点上时需要大多数组织同意一个链码定义,Peer节点只能看到智能合约被安装的接口,不能看到完整实现,链码定义即大部分组织同意一个标准对账本进行修改操作,同意后方可将链码定义提交到通道上,以便客户端通过该链码定义访问智能合约从而调用账本,链码定义中最重要的一个信息是背书策略,即客户端进行交易时必须规定特定的组织签名后才可以将交易区块存入账本副本。
接下来一次性将之前相同的组件以相同的方式将P2等组件加入该网络,P2本地也存入智能合约合约与账本,但官方强调,账本物理存储在peer节点上,逻辑存储与通道中,他们都装的是S5智能合约,因为P2节点加入进来必须由R2同意相同的链码定义,这样才可以以相同的操作访问账本。这样一个小型的区块链网络就构造完成了!在网络中S5智能合约不是必须安装的,Peer可以选择不安装智能合约,这样可以将Peer节点分为几种角色。1.提交节点:所有Peer节点都是提交节点,它们都可以将验证区块真实性并选择或拒绝区块放入自己的账本副本。2.背书节点:只有安装了智能合约的Peer节点才可能被选为背书节点,实际上得从客户端发出的交易提案中规定的节点才为真正的背书节点,节点上的智能合约被客户端调用来生成一个签名响应,所以必须要用到智能合约。3.主节点:每个通道中都有一个主节点,用于收集交易签名以及分发区块等。4.锚节点:这个节点可选择没有,主要负责组织间的通信。此区块网络中的O4更像是一个中心化的节点,其实因为该网络组件比较少,O4也可以去中心化,order排序节点可以有多个,它们之间也有通道,被称为超级通道,主要复制其他order节点的通道信息(应用通道,如C1),也可以减少一台order设备的开销,如果网络足够大,整个网络大致构造就是这样,再来的组件也是按照以上的规则进行加入。刚开始读文档可能比较复杂,需要将官方文档多吸收几遍,我还有许多问题,如每个配置实际放入的位置,即物理存储分别在哪,以及配置内的信息具体有什么,CA机构怎样颁发证书运作等等,都是需要之后慢慢了解的。
|