Fabric共识机制

  本文从网络节点架构和共识机制两个方面介绍,网络节点架构部分将介绍节点相关概念;共识机制部分将从三个方面进行介绍。

1. 网络节点架构

  节点是区块链的通信主体,是一个逻辑概念。多个不同类型的节点可以运行在同一物理服务器上。

1.1 客户端节点

  客户端必须连接到某一个peer节点或者排序服务节点上,才能与区块链网络进行通信。客户端向背书节点提交交易提案,当收集到足够的背书后,向排序服务广播交易,进行排序,生成区块。

1.2 Peer节点

  所有的Peer节点都是记账节点,负责验证从排序服务节点区块里的交易,维护状态数据和账本的副本。部分节点会执行交易并对结果进行签名背书,充当背书节点的角色。背书节点是动态的角色,是与具体链码绑定的,每个链码在实例化的时候都会设置背书策略(Fabric1.4中的背书策略),指定哪些节点对交易背书才是有效的。也只有在应用程序向其发起交易背书请求时才是背书节点,其它时候就是普通的记账节点,只负责验证交易并记账。

  Peer节点还有一种角色是主节点,代表的是和排序服务节点通信的节点,负责从排序服务节点处获取最新的区块并在组织内部同步。可以强制设置成主节点,也可以动态选举产生。

1.3 排序服务节点

  许多分布式区块链,如以太坊(Ethereum)和比特币(Bitcoin),都是非许可链的,这意味着任何节点都可以参与共识过程,在共识过程中,交易被排序并捆绑成区块。因为这个事实,这些系统依靠概率共识算法最终保证账本一致性高的概率,但仍容易受到不同的账本(有时也称为一个账本“分叉”),在网络中不同的参与者对于交易顺序有不同的观点。

  Hyperledger Fabric 的工作方式不同。它有一种称为排序节点的节点使交易有序,并与其他排序节点一起形成一个排序服务。因为 Fabric 的设计依赖于确定性的共识算法,所以 Peer 节点所验证的区块都是最终的和正确的。账本不会像其他分布式的以及无需许可的区块链中那样产生分叉。

  除了促进确定性之外,排序节点还将链码执行的背书(发生在节点)与排序分离,这在性能和可伸缩性方面给 Fabric 提供了优势,消除了由同一个节点执行和排序时可能出现的瓶颈。

  排序服务节点接收包含背书签名的交易,对未打包的交易排序生成区块,广播给Peer节点。排序服务提供的是原子广播,保证同一个链上的节点接收到相同的消息,并且具有相同的逻辑顺序。

  排序服务的多通道实现了多链的数据隔离,保证只有同一个链的Peer节点才能访问链上的数据,保护用户数据的隐私。

1.4 CA节点

  CA节点是证书颁发机构,由服务器和客户端组件组成。CA节点接收客户端的注册申请,返回注册密码用于用户登录,以便获取身份证书。在区块链网络上所有的操作都会验证用户的身份。

2. 共识机制

  共识机制可以分为以下三个阶段。

2.1 交易背书

  应用程序根据背书策略的要求选择背书节点,给这些节点发送需要执行的交易提案。背书节点调用链码执行这些交易提案,交易是模拟执行的,并不真正提交数据到账本中。执行完成以后调用交易背书系统链码ESCC对模拟执行结果进行签名背书。

2.2 交易排序

  排序阶段接收已经签名背书的交易,确定交易的数量和顺序,将排好序的交易打包到区块中,广播给Peer节点进行验证。通常,从效率方面考虑,排序服务不会输出单个交易作为一个区块,而是将多个交易打包成一个区块

2.3 交易验证

  Peer节点验证接收到区块里包含的交易的有效性,包括背书策略验证及双花检测。可以将验证错误分为两大类:语法错误和逻辑错误。语法错误包括无效输入、未验证的签名以及重复的交易(双花攻击),重复的交易应该丢弃。第二类错误比较复杂,如会导致双花或者MVCC失败的交易,这需要定义策略来决定程序是继续执行还是终止。默认的交易验证系统链码VSCC只支持背书策略的验证。

2.4 目前(Fabric1.4.4)支持的排序服务

  solo、Apache Kafka、Etcd raft

参考资料:《深入探索区块链-Hyperledger技术与应用》

你可能感兴趣的:(Fabric,Hyperledger)