Fabric
是超级账本联盟(Hyperledger
)的主要项目之一,其作为一个私有或“许可”型区块链网络,目前它主要被用于金融和供应链等行业。至今,Fabric已获得了阿里巴巴、AWS、Azure、百度、谷歌、华为、IBM、甲骨文、腾讯等互联网巨头的支持。
Fabric
是一个分布式账本解决方案平台,采用 模块化 架构,支持不同组件的 可插拔 实现,以适应业务系统的复杂性。
架构设计
三大组件:区块链服务(Blockchain)、链码服务(Chaincode)、成员权限管理(Membership)。
区块链服务
- 提供一个分布式账本平台。
- 多个交易被打包进区块中,多个区块构成一条区块链。
- 区块链代表的是账本状态机发生变更的历史过程。
- 交易意味着围绕着某个链码进行操作,交易可以改变世界状态。
链码服务
在 Fabric 中,智能合约叫做链码 (Chaincode
),它包含所有的业务处理逻辑,并对外提供接口,外部通过调用链码接口来改变世界观。
链码需要实现 Chaincode
接口,以被 VP(Validating Peer
,验证节点)节点调用,目前支持的交易类型包括:部署(Deploy)、调用(Invoke)和查询(Query)。不同链码之间可能互相调用和查询。
在实现上,链码需要运行在隔离的 容器 中,超级账本采用了 Docker
作为默认容器。对容器的操作支持三种方法:build
、start
、stop
,对应的接口为 VM
。
链码部署成功后,会创建连接到部署它的 VP 节点的 gRPC 通道,VP 节点和容器之间通过 gRPC 消息来交互。
成员权限管理
通过基于 PKI 的成员权限管理,平台可以对接入的节点和客户端的能力进行限制。证书有三种:
- 注册证书
ECert
:颁发给提供了注册凭证的用户或节点,一般长期有效; - 交易证书
TCert
:颁发给用户,控制每个交易的权限,一般针对某个交易,短期有效。 - 通信证书
TLSCert
:控制对网络的访问,并且防止窃听。
角色管理
节点角色是 Fabric 设计中的一大创新,根据性能和安全需求,不同的节点可以由不同的组织分别管理,彼此协作完成整个区块链系统的记账功能:
- 背书节点(
Endorser Peer
):负责对交易的提案(Transaction Proposal)进行验证并进行 模拟 执行。背书节点相当于中立的第三方,用来保证交易的合法性; - 记账节点(
Committer Peer
):负责维护账本,检查排序后交易结果合法性,接受合法修改,并写入到本地账本结构,目前所有 Peer 默认都是记账节点; - 排序节点(
Orderer
):正式交易会发给排序节点,排序节点负责对网络中所有交易进行排序处理,并整理为区块结构,之后被记账节点拉取提交到本地账本; - 证书节点(
CA
):提供标准的 PKI 服务,负责对网络中所有的证书进行管理,包括签发和撤销。
通道
网络账本的基本单位是 通道(Channel),每个通道内的成员可以共享账本,不同通道内账本则彼此隔离。客户端可以向网络内发送交易,交易经过共识后被通道内的 Peer 节点接收并更新本地对应的账本。类似 chain33
的平行链概念。
交易流程
上图中,客户端(App)使用 SDK 与 Fabric 网络进行交互。
- 客户端先通过证书服务获取合法的身份并加入到应用通道(Channel)中。
- 客户端构造交易请求(Proposal)提交给背书节点(Endorser)。
- 背书节点对交易进行验证和模拟执行后(并不真正更新账本),反馈给客户端。
- 客户端收到足够的背书支持后将交易发送给排序节点(Orderer)。
- 排序节点(Orderer)对网络中的交易进行全局排序,并将排序后的交易打包成区块,然后广播给网络中的记账节点(Committer)。
- 记账节点(Committer)负责维护区块链和账本结构,对交易进行最终检查(交易结构的合法性、交易背书签名是否符合背书策略等),检查通过后写入账本。