伊斯坦堡拜占庭容错演算法区块链

燎原链 2018-07-27 17:45
分享到:
导读

对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。

blob.png

共识机制是区块链网络用来达成交易确认共识的协议,伊斯坦堡拜占庭容错演算法是共识机制的一种,共识机制是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。

blob.png

我们先了解一下拜占庭容错,其思想渊源来自拜占庭将军问题,是一种解决分布式系统容错问题的通用方案。PBFT算法的核心理论是n>=3f 1,n是系统中的总节点数,f是允许出现故障的节点数。换句话说,如果这个系统允许出现f个故障,那么这个系统必须包括n个节点,才能解决故障。基于拜占庭将军问题,PBFT 算法包括四个阶段来达成共识:请求(request)、预准备(Pre-Prepare)、准备(Prepare) 和确认(Commit)。流程如下图所示:

blob.png

其中C为发送请求端,0123为服务端,3为宕机的服务端,具体步骤如下:

1. Request:请求端C发送请求到任意一节点,这里是0

2. Pre-Prepare:服务端0收到C的请求后进行广播,扩散至123

3. Prepare:123,收到后记录并再次广播,1->023,2->013,3因为宕机无法广播

4. Commit:0123节点在Prepare阶段,若收到超过一定数量的相同请求,则进入Commit阶段,广播Commit请求

5.Reply:0123节点在Commit阶段,若收到超过一定数量的相同请求,则对C进行反馈,根据上述流程,在 N ≥ 3F 1 的情況下一致性是可能解決,N为总计算机数,F为有问题的计算机总数。

伊斯坦堡拜占庭容错演算法通过使用3相一致,从原来PBFT继承PRE-PREPARE,PREPARE,和COMMIT。系统可以容忍验证器节点网络F中的大多数故障节点N,其中N = 3F 1。在每轮之前,验证器将默认以循环方式选择其中一个作为提议者。然后,提议者将提出新的块提议并将其与PRE-PREPARE消息一起广播。在收到PRE-PREPARE来自提议者的消息后,验证者进入状态,PRE-PREPARED然后广播PREPARE消息。这一步是为了确保所有验证器都在同一个序列和同一轮上工作。当接收2F 1的PREPARE消息,验证程序进入的状态PREPARED,然后广播COMMIT信息。此步骤是通知其对等方它接受建议的块并将块插入链。最后,验证等待2F 1的COMMIT消息进入COMMITTED状态,然后插入块链。

伊斯坦堡拜占庭容错演算法(Istanbul BFT)中的块是块是最终的,这意味着没有分叉,任何有效块必须位于主链的某个位置。为了防止故障节点从主链生成完全不同的链,每个验证器将2F 1接收的COMMIT签名附加到extraData标头中的字段,然后将其插入链中。因此,块是可自我验证的,并且也可以支持轻客户端。但是,动态extraData会导致块哈希计算出现问题。由于来自不同验证器的相同块可以具有不同的COMMIT签名集,因此相同的块也可以具有不同的块散列。为了解决这个问题,我们通过排除来计算块哈希COMMIT签名部分。因此,我们仍然可以保持块/块哈希一致性,并将共识证明放在块头中。

状态:

NEW ROUND:提议者发送新的阻止提案。验证器等待PRE-PREPARE消息。

PRE-PREPARED:验证程序已收到PRE-PREPARE消息和广播PREPARE消息。然后,它等待2F 1的PREPARE或COMMIT消息。

PREPARED:验证器接收到2F 1的PREPARE消息和广播COMMIT消息。然后,它等待2F 1的COMMIT消息。

COMMITTED:验证器接收到2F 1的COMMIT消息,并且能够将提出块插入blockchain。

FINAL COMMITTED:新块已成功插入区块链,验证器已准备好进入下一轮。

ROUND CHANGE:验证器正在等待同一个建议的轮数2F 1的ROUND CHANGE消息。

下图是他们之间的状态装换

blob.png

A提议发出者 1 2 3 代表验证者

NEW ROUND- > PRE-PREPARED:

投保人从txpool收集交易。

Proposer生成块提议并将其广播给验证者。然后它进入PRE-PREPARED状态。

每个验证器PRE-PREPARED在收到PRE-PREPARE具有以下条件的消息时进入:

§ 1.阻止提案来自有效的提议者。

§ 2.块头有效。

§ 3.阻止提案的序列和舍入匹配验证器的状态。

ValidatorPREPARE向其他验证器广播消息。

PRE-PREPARED- > PREPARED:

验证器接收2F 1有效PREPARE消息以进入PREPARED状态。有效消息符合以下条件:

§ 1.匹配序列和圆形。

§ 2.匹配块哈希。

§ 3.消息来自已知的验证器。

ValidatorCOMMIT在进入PREPARED状态时广播消息。

PREPARED- > COMMITTED:

验证器接收2F 1有效COMMIT消息以进入COMMITTED状态。有效消息符合以下条件:

§ 1.匹配序列和圆形。

§ 2.匹配块哈希。

§ 3.消息来自已知的验证器。

COMMITTED- > FINAL COMMITTED:

Validator将2F 1承诺签名附加到extraData并尝试将块插入区块链。

FINAL COMMITTED插入成功后,验证器进入状态。

FINAL COMMITTED- > NEW ROUND:

验证器选择一个新的提议器并启动一个新的循环计时器

伊斯坦堡拜占庭容错演算法(Istanbul BFT)它适合金融实务需求的伊斯坦堡拜占庭容错演算法(Istanbul BFT),将抢先应用于摩根大通(J.P. Morgan)“Quorum”金融区块链平台上。

 其实伊斯坦堡拜占庭容错演算法还在燎原连上进行了应用。EUBT的核心算法为IBFT,通过伊斯坦堡拜占庭容错演算法(Istanbul BFT)的应用,相对于拜占庭容错演算法(PBFT),大幅提升现有的以太坊架构的信息交换效率,整合了更多符合区块链实际应用的功能。相对于比特币等公有区块链上常用的工作量校验(Proof-of-Work,简称PoW或俗称「挖矿」演算法)共识演算法,PBFT对此做出很多重大改良,而IBFT更进一步改良,相对于POW不能接受可结束(Final)的区块链区块(Block),导致每一个区块都有被分支(Fork)的微几率,IBFT区块能够即时达到Final状态,共识完成就可以将上传区块,不会衍生更多分支,因此可以大幅提升区块生产力。而产生区块的过程不需要竞争,有别于比拼区块长度的POW,不浪费能源及运行资源。

blob.png

总结

共识机制

伊斯坦堡拜占庭容错演算法

燎原链的共识机制

参考文献

维基百科共识机制的分类

燎原链白皮书和技术白皮书

燎原链官网:www.eubchain.com

加入燎原链社区,了解更多最新动态

Telegram:

t.me/eubsparkchain

Twitter:

twitter.com/eubchain

Facebook:

m.facebook.com/Eubchain-153177778671597

验证 区块 共识 节点 状态
分享到:

1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。


专题报道