Go语言Hyperledger区块链开发实战
上QQ阅读APP看书,第一时间看更新

2.1.1 Fabric网络的主要组件

Fabric网络的主要组件如下。

● 成员服务提供者(Membership Service Provider,MSP)。

● 客户端。

● Peer节点。

● 排序节点(Orderer节点)。

1.MSP

MSP是定义身份验证方式和访问网络权限规则的组件。它可以管理希望加入网络的用户和客户端,为发起交易提案的客户端提供证书。MSP通过CA(Certificate Authority,证书颁发机构)来颁发、验证或撤销证书。Fabric区块链支持可插拔的CA服务,默认的CA服务是Fabric CA,但是组织可以选择使用外部的CA服务。

Fabric网络模型中包含两种MSP。

(1)本地MSP:管理用户、客户端和节点(Peer节点和排序节点)的身份与权限。每个节点和客户端都有一个本地MSP,它定义了谁拥有管理或访问自身的权限。

(2)通道MSP:定义通道级别的管理权限。Fabric网络中的不同成员可以组成一个通道(channel),每个通道都有一个独立的区块链。这样多个组织就可以共同使用一个区块链网络,分别维护不同的区块链。只有通道的成员才能看到通道中其他成员的交易。也就是说,通道相当于网络的分区,目的是确保只有相关参与方才能看到相关交易。

关于MSP的具体情况将在第4章介绍。

2.客户端

客户端应用可以通过Fabric SDK与区块链网络通信,并发起交易提案。Fabric SDK可以提供读/写区块链中数据的功能。每个客户端都有CA 颁发的证书。本书第10章将介绍使用Go语言开发客户端应用的方法。

3.Peer节点

节点仅指某项逻辑功能,而不是网络中的物理设备。多个不同类型的节点可以运行在同一个物理服务器上。除了Peer节点,Fabric网络中还包含排序节点。

Peer 节点是用于记账并维护世界状态数据和账本副本的节点,负责接收经过排序服务排序的、以区块形式打包存储的状态更新数据,并维护账本和状态数据。排序服务负责在交易被记账到区块链和状态数据库之前对交易进行排序。交易必须进行排序,因为这样才能确保交易在被写入网络时对世界状态的更新是有效的,也就是说,确保状态数据库中的数据是最新交易产生的。可以这样理解,账本中记录的是交易的明细数据,状态数据库中存储的是最新的交易结果。关于Fabric区块链的数据存储结构将在第6章中介绍。

Peer节点还有一个特殊的背书角色,即在记账之前对交易进行背书。

Fabric网络中包含背书节点、记账节点、锚节点和领导节点这4种类型的Peer节点,具体说明如下。

(1)背书节点。背书节点是一种具有背书交易角色的特殊的记账节点,可以对来自客户端的交易请求进行背书。每个背书节点都负责处理一个安装好的智能合约和一个账本,它的主要功能是模拟交易。背书基于智能合约和账本的本地副本运行,运行过程中会生成读/写集,然后会将读/写集发送至提交交易提案的客户端。在模拟交易的过程中,交易并不会被写入账本中。模拟交易的目的是对交易进行验证。交易的完整流程将在2.1.3小节介绍。

智能合约是运行于区块链平台的程序。客户端应用可以通过接口层调用智能合约,与Fabric网络进行交互。关于智能合约开发的具体情况将在第9章介绍。

(2)记账节点。记账节点负责将从排序服务接收到的交易数据写入区块,并将区块追加到自己维护的区块链副本中。区块中包含一个交易列表,记账节点会对列表中的每个交易进行验证,并标记有效或无效,然后将其写入区块。无论有效交易还是无效交易都会被写入区块链中,以备将来审计时使用。

(3)锚节点。因为Fabric网络可能由多个组织构成,所以需要一些Peer节点进行跨组织通信。并不是所有Peer节点都可以跨组织通信,只有经过授权的特殊Peer节点才可以做到这一点,这些特殊Peer节点就是锚节点。锚节点在通道配置中定义。

(4)领导节点。领导节点负责将排序服务发送来的消息传送给同一组织中的其他 Peer节点。领导节点使用Gossip协议确保组织内的每个Peer节点都可以收到消息,但是它不能跨组织通信。如果领导节点掉线,则组织可以通过投票或随机产生等方式从在线活动的Peer节点中再选择一个作为领导节点。

4.排序节点

排序节点是运行排序服务的节点。关于排序服务的概念将在2.1.3小节介绍。

比特币由矿工在挖矿时根据交易费的金额选择记账的顺序,愿意支付更高手续费的交易会被优先记账。而Fabric区块链则采用不同的策略,它允许组织自行选择最合适的排序机制。这种策略使Fabric区块链更适合企业用户。

Fabric区块链支持SOLO、Kafka和Raft这3种排序机制。关于Fabric区块链的共识算法将在5.3.1小节介绍。