共识:在Fabric中,共识过程意味着多个Peer节点对于某一批交易的发生顺序、合法性以及它们对账本状态的更新达成一致的观点。
1、Fabric共识
Fabric中的共识达成过程为以下三个步骤:
image.png-
Endorsement背书:在背书( endorsement )阶段中,背书节点对客户端发来的交易预案进行合法性检验,然后模拟执行链码得到交易结果,最后根据设定的背书逻辑判断是否支持该交易预案。如果背书逻辑决定支持交易预案,它将把预案签名后发回给客户端。
客户端通常需要根据链码的背书策略,向一个或者多个成员的背书节点发出背书请求。背书策略会定义需要哪些节点背书交易才有效,例如需要5个成员的背书节点中至少3个同意;或者某个特殊身份的成员支持等。客户端只有在收集满足背书策略的支持之后,广播出去的交易才能被视为有效。
这些背书策略可以由链码在实例化之前来指定。 -
Ordering排序:排序( ordering )阶段就是由排序服务对交易进行排序,确定交易之间的时序关系。排序服务把一段时间内收到的交易进行排序,然后把排序后的交易打包成数据块(区块),再把区块广播给通道中的成员。采用这种方式,各个成员收到的是一组发生顺序相同的交易,从而保证了所有节点的数据一致性。
Fabric 1.0 中的排序服务支持可插拔的架构,solo模式(测试使用)、Kafka在内的CFT类型后端、BFT类型后端。
排序服务是共识机制中最重要的一环,所有交易都要通过排序服务的排序才可以达成全网共识,因此排序服务要避免成为网络上的性能瓶颈。
-
Validation验证:validation阶段是确认节点对排序后的交易进行一系列的检验,包括交易数据的完整性检查、是否重复交易、背书签名是否符合背书策略的要求、交易的读写集是否符合多版本并发控制 MVCC ( Multiversion Concurrency Control )的校验等等。
当交易通过了所有校验之后,将被标注为合法并写入账本中。因为所有的确认节点都按照相同的顺序检验交易,并且把合法的交易依次写入账本中,因此它们的状态能够始终保持一致。
Fabric建立共识的三个阶段都支持可配置,用户可以实现自己的endorsement、ordering、validation过程。
2、Fabric共识插件
Solo:单节点的排序功能,仅适合开发测试中使用。
Kafka: 基于 Kafka 开源的分布式数据流平台,具有高扩展性和容错能力,适合用在生产系统。需要注意的是,Kafka 只提供了 CFT 类型的容错能力,即仅可对节点的一般故障失效容错,缺乏对节点故意作恶的行为进行容错的能力。
SBFT: 支持BFT容错的排序实现,开发中。
3、源码目录
image.png- bccsp : 密码学:加密、签名以及证书
- bddtests:行为驱动开发
- common:公共库,包括 错误处理,日志处理,账本存储,等等
- core:核心库,组件核心逻辑
- devenv:开发环境,Vagrant
- docs:相关文档
- events:事件监听机制
- examples:例子
- gossip:最终一致性共识算法,用于组织内部区块同步
- images:docker镜像打包
- msp:成员服务管理 member service provider
- orderer:排序节点入口
- peer:peer节点入口
- proposals : 新功能提案
- protos:grpc(protobuffer + rpc);jsonrpc(json + rpc)
4、共识插件源码(待补充)
- 排序接口
- 基于solo的排序服务
- 基于kafka的排序服务
- 自由实现排序服务
网友评论