Hyperledger Fabric 联盟链底层架构与技术
Hyperledger Fabric 2.0(项目仓库为hyperledger/fabric)属于联盟链。在Fabric区块链网络中,联盟成员认可彼此的身份、权限配置、责任划分,成员依据相同的交易逻辑产生数据、依据相同的策略认可交易。
超级账本
超级账本实际上由两个部分组成,一个是 world state,另一个是 Tx Log(交易)。world state 描述的是账本的当前状态,而 Tx Log 则记录了所有事务按照时间顺序的状态变化,它最终被记录在区块链上。
超级账本有一些关键特性,如下:
- 资产(assets):这里不单单指货币金钱的范畴,而是泛指一切的价值物,这也是区块链被视为价值传递网络的原因,价值物的价值在区块链网络中从一方流转到另一方,而流转是通过触发区块链上的智能合约导致状态发生改变实现的
- 节点:是组成组织的个体在Fabric区块链网络中运行的基础设施实体。由于职责和功能的迥异,Fabric区块链网络将主要的参与节点分为orderer和peer。orderer节点主要负责运行系统通道、共识排序服务,peer节点负责背书、广播、散播等服务。
- peer专门存储账本的数据,可以担任记账结点、领导结点(连接order结点,转发区块)、背书结点(对交易模拟执行,然后签名)、锚结点(负责跨组织通讯)
- order结点:对fabric网络的交易进行排序,然后进行签名,并产生区块的结点。(类似于挖矿结点)
- 组织(organization)是参与Fabric区块链网络、组成一个联盟的基本单位,也是一个逻辑主体,如现实中的公司、行业协会、多个工厂同类产品的生产线等。
- MSP:每个组织、结点、用户都拥有MSP信息,可以理解为会员卡。可以定义用户的角色盒访问权限。MSP信息由CA颁发
- 链码(chaincode):智能合约,书写业务逻辑的地方
- 通道(channel)是Fabric区块链网络中隔离账本交易数据的逻辑主体。一个通道对应着一个联盟,一个通道也对应着一个账本。通道中的账本数据在联盟成员之间共享,但完全与另一个通道的数据隔离。
- 智能合约(smart contract)是使用编程语言实现的一种交易规则,以链码(chaincode)的形式部署在Fabric区块链网络中。智能合约属于通道,供联盟成员调用,产生交易数据。
- 账本(ledger)是Fabric区块链网络中数据存储的主体,用于以多种形式记录网络中所有发生的成功或失败的交易。具体地,账本使用blockfile存储区块,使用LevelDB或CouchDB存储来自区块的有效交易数据、区块索引、历史数据、私有交易数据。
- 区块(block)是区块链特性在数据存储方面的核心体现,也是Fabric区块链网络中账本数据存储的基本单位。区块的次序号由0开始,依次递增,前后块相互验证关联,形成一条不可篡改的链。一个通道的账本,可以视为一条区块链。
- 交易(transaction)是Fabric区块链网络的通道账本中组成区块的基本单位,主要描述了依据交易规则对应用通道中账本数据的读取、更改,以及对交易数据表示认可的背书主体。
- 私有数据集合(private data collection)是在Fabric区块链网络参与者之间隔离交易数据方面更细化的应用。通道中,有不公开交易需求的若干参与者组成一个“小团体”,遵循一份私有数据集合定义,执行交易,产生的交易数据只在“小团体”范围内散播存储。
- 共识机制(consensus mechanism)保证了Fabric区块链网络的账本数据的可信、防篡改等特性。Fabric区块链网络中的共识机制不单指某一共识算法(如PoW、PoS、Raft、PBFT等),而是基于交易处理流程的分阶段共识,并在分阶段共识的基础上,达成整个网络交易处理的共识。
流程与架构
Endorser peer是背书结点,链码是在这里被调用的
APP收集够背书结果后,提交给order,order生成区块提交给leader
leader将区块进行分发(跨组织的交给锚结点)
Fabric 网络如何构建的
Fabric 中网络的概念
多通道网络
一个通道只是一个子区块链网络,而 Fabric 支持多个通道,从而形成一个多链网络的结构,一个组织,组织中的节点,组织中的应用程序都可以依据配置文件(CCx)加入到多个通道中,而它们在每个通道中都是相互独立的实例
多通道网络的特点——
- 通道完全分隔了不同子区块链的通信机制,即便两个不同的通道可能都有相同的组织参与
- 多通道的之间虽然隔离,但是通过智能合约是可以实现不同通道之间的通信的
代码框架
三类模块
核心模块:提供核心功能服务的代码,包括core、orderer两个代码包,这两个代码包涵盖了Orderer排序节点与Peer节点(包含Endorser背书节点与Committer记账节点)的核心代码,我将在后续文章中深入分析各个模块的初始化启动流程、处理交易流程以及与其他模块间的交互过程,并介绍其核心功能的设计与实现细节。
公共模块:为核心模块和其他模块提供基础支持服务,包括bccsp、common、gossip、msp、protoutil等目录代码。其中,Gossip消息模块为Peer节点提供安全、可靠、可扩展的P2P数据分发协议。common公共功能模块包括账本数据存储模块、安全服务模块、通道配置等,为其他模块提供底层存储机制、安全机制、异步通信机制等。
辅助模块:为其他模块提供辅助性工具、运行环境、测试用例、文档等,包括ccaas_builder、ci、docs、release_notes、swagger等,不作为分析重点,视情况分析以帮助理解其他模块。
目录结构
1 | wujinquan@wujinquandeMacBook-Pro ~/workspace/gospace/src/github.com/hyperledger/fabric tree -L 1 |
链码
1 | // InitLedger adds a base set of assets to the ledger |
[1] https://zhuanlan.zhihu.com/p/669519180
[2] https://zhuanlan.zhihu.com/p/661248922