Fabric超级账本基本架构功能,账本结构、源码以及智能合约。

一.Fabric系统架构

架构图一张

 




afc的五层架构是怎样的 afc五层架构图_区块链


二.网络拓扑

1.节点类型

客户端节点:媒介节点

Peer节点:(Anchor(锚节点)或Endorser(背书节点)或Committer(计算节点))

Orderer节点:排序(solo/kafka方式排序)都不支持拜占庭容错机制(作恶节点)

CA:(可选fabric提供的ca组件,也可选择第三方机构,如中国的CFCA)

2.拓扑图例

 



afc的五层架构是怎样的 afc五层架构图_afc的五层架构是怎样的_02


  • ca在区块链网络以外(也可以在网络内)
  • gossip协议用于区块在组织内扩散
  • 排序节点将排好序的区块广播给每个组织的“主节点”
  • 三个orderer节点直接与kafka集群管理,而之间没有通讯,组织可以任意选择orderer节点进行通信

企业级联盟链:可以采用将orderer节点暴露在公网中,每个企业主体只暴露一个主节点,即可。

3.交易流程

 



afc的五层架构是怎样的 afc五层架构图_区块链_03


(1)客户端先去背书节点拿到模拟执行的结果以及背书节点的签名,然后去向排序节点提交交易(模拟执行结果+签名)

(2)主节点在接受到打包的区块后,回去计算验证某笔交易是否是有效的,若是无效的,依然会存储在区块账本中,但不会更新状态数据库(无效交易之后浪费磁盘空间,后续版本会过滤掉无效交易)

三.共识机制

1.整体过程

交易背书(模拟-Endorser)

交易排序(排序-Orderer)

交易验证(验证-Committer)

2.交易排序

目的:保证系统交易顺序的一致性(有限状态机)

3.多通道模型

 



afc的五层架构是怎样的 afc五层架构图_联盟链_04


4.Orderer部分源码

 



afc的五层架构是怎样的 afc五层架构图_联盟链_05


三.账本结构

1.Peer账本存储

 



afc的五层架构是怎样的 afc五层架构图_超级账本_06


Orderer节点的账本存储:只是临时存储不影响世界状态、历史状态,只是区块存储。

Peer节点的账本存储:

区块存储在文件系统,需要使用levelDB作为区块索引

状态数据库存储区块链上的最新数据,可以重现。(couchDB可以支持结构化数据存储,支持模糊查询)

历史状态索引,若没有状态数据库时,可使用恢复。只存储状态变动对应的交易ID而不存储状态结果,节省存储空间。

2.世界状态

交易执行后的所有键的最新值

显著提升链码的执行效率

世界状态是所有交易日志的快照、可随时重构

3.历史数据索引(可选)

记录改变动作,不记录具体改变

历史读取 --> 历史数据索引 + 区块读取

账本最大容量:64M * 100,0000

区块提交:

保存区块文件==> 更新世界状态==>更新历史状态(可选)

4. 源码解读(4个部分)

读写集

状态数据

历史世界

区块文件

core --> ledger-->
(1)交易模拟执行器代码位置(读写集实现):
core\ledger\kvledger\txmgmt\txmgr\lockbasedtxmgr\lockbased_tx_simulator.go
(2)读写集的验证:
core\ledger\kvledger\txmgmt\validator\statebasedval\state_based_validator.go
(3)状态数据库:
core\ledger\kvledger\txmgmt\statedb\stateleveldb\stateleveldb.go
// 3个问题
// 1. 如何关联智能合约键值对与底层存储的键值对 数据隔离
// 2. 如何持久化区块的状态信息
// 3. 如何标识最新存储的区块编号
(4)历史数据库
core\ledger\kvledger\history\historydb\historyleveldb\historyleveldb.go
(5)区块文件
common\ledger\blkstorage\fsblkstorage\fs_blockstore.go

四、智能合约(链码)

只有背书节点才能执行链码

1.链码生命周期:

打包

安装

实例化(只执行一次)

升级

交互

2.链码交互流程

 



afc的五层架构是怎样的 afc五层架构图_区块链_07


ESCC系统链码,用来完成系统过程,运行在节点进程

3.系统链码

LSCC:管理链码生命周期(部分)

CSCC:配置管理链码

QSCC:查询账本存储

ESCC:交易背书链码

VSCC:用作交易验证

4.链码编程接口

Init()

Invoke()