Fabric中的共识机制主要分为三步
- 交易背书 - 模拟执行交易并进行签名,将结果返回给提交者
- 交易排序 - 排序节点接收已经背书的交易,并对交易进行排序,将排好序的交易进行打包,生成区块,并分发给各组织的主节点(Anchor)。
- 交易验证 - 验证交易是否有效
交易排序
对交易进行排序的目的是为了保证系统交易顺序的一致性(有限状态机)
Fabric中有两种排序方式,Solo和Kafuka
区块分发
排序节点的区块分发是数据中间状态的区块,并不是实实在在存储在Peer中的区块,是否存储区块要经过Peer的验证后才决定。Orderer节点并不保证区块交易的有效性,它只负责打包
多通道数据隔离
排序节点在收到交易提议时,会根据通道类型分别打包,不同通道的数据互不影响,互不相通。Peer收到不同通道的区块时,也会独立存储,从而达到数据隔离。
世界状态
- 世界状态是交易执行后所有区块的最新数据
- 世界状态是区块链的一个快照,可以随时通过区块重新构造
- 提升链码执行效率
历史数据索引
如果智能合约需要查询历史数据,则需要开启这个功能。历史数据索引只记录改变操作,不记录改变了什么。
区块存储
- 命名为blockfile_xxx
- 一个区块64M,硬编码
- 一个账本(一条链)最大容量 64M * 1000000(区块编号最大值)
区块读取
- 区块文件流
- 区块流
- 区块迭代器
区块索引
- 快速定位区块
- 索引建可以是区块高度,区块哈希,交易哈希
- 索引值是 区块文件编号 + 文件内容偏移 + 区块数据长度