背景
区块链共识是指多个节点或代理在给定的时间点就区块链状态达成一致的能力。当涉及区块链上分散记录保存和验证的核心功能时,单独依靠信任来确保添加到账本的信息是正确的可能会存在问题。因为没有中央实体来进行仲裁,这种问题在去中心化网络中更为明显。
共识度量是可测量的数据,区块链网络的节点必须在该数据上达成一致,以便为每个块中包含的数据建立并保持一致。在区块链技术中,每次将新块添加到链中时,每个网络节点都会测量并批准一致性度量。
共识度量有多种形式,最重要的两种是基于风险的度量(PoS)和基于工作量的度量(PoW)。本文将讨论的Quorum共识协议都是授权证明(PoA)的实现,而PoA是PoS一致性算法的子集,主要由测试网和私有或联盟网络使用。
IBFT
Istanbul Byzantine Fault Tolerant即IBFT是基于PBFT,PBFT就是Practical Byzantine Fault Tolerance的缩写,意为实用拜占庭容错算法,解决了原始拜占庭容错算法效率不高的问题,关于拜占庭容错BFT感兴趣读者可自行了解。
IBFT继承PBFT共识的三个阶段:pre-prepare,prepare和commit,称之为预准备阶段、准备阶段和提交阶段。系统可以容忍N个validator节点的网络中F个节点错误,其中 N = 3F + 1。每一轮之前,validators会首先投票选出一个proposer,默认的选举方式是轮询。选出的proposer将会打包一个新的区块并附随pre-prepare消息广播出去,当接收到pre-prepare消息,validators会进入pre-prepared状态,然后广播prepare消息。这一步是为了确认所有的validators在同一个sequence和同一个round上工作。当接收到 2F + 1个prepare消息,validator就会进入prepared状态并广播commit消息。这一步是为了通知其它节点,它验证了新区块并且将会把新区块添加到了区块链中。最后,验证者们等待2F + 1个commit消息并进入 committed 状态,并把区块添加到区块链末尾。
1.1 共识状态
IBFT是一个状态机复制算法,每个验证者为了达成区块一致都维持一个状态机副本。
状态(States):
new round:proposer打包新区块,验证者等待 pre-prepare 消息pre-prepared:验证者接收 pre-prepare 消息,广播 prepare 消息,然后等待 2F + 1 个 prepa