共识算法解决的是对某个提案(proposal)大家达成一致意见的过程。

PBFT (拜占庭容错)算法 -Fabric 0.6采用

五个阶段:request,预准备(pre-prepare)、准备(prepare)、和确认(commit),reply

步骤:

1.从全网节点选举出一个主节点(Leader),新区块由主节点负责生成
    2.Pre-Prepare:每个节点把客户端发来的交易向全网广播,主节点0将从网络收集到需放在新区块内的多个交易排序后存入列表,并将该列表向全网广播,扩散至123
    3.Prepare:每个节点接收到交易列表后,根据排序模拟执行这些交易。所有交易执行完后,基于交易结果计算新区块的哈希摘要,并向全网广播,1->023,2->013,3因为宕机无法广播
    4.Commit:如果一个节点收到的2f(f为可容忍的拜占庭节点数)个其它节点发来的摘要都和自己相等,就向全网广播一条commit消息
    5.Reply:如果一个节点收到2f+1条commit消息,即可提交新区块及其交易到本地的区块链和状态数据库。

拜占庭容错能够容纳将近1/3的错误节点误差,IBM创建的Hyperledger 0.6版本就是使用了该算法作为共识算法(1.0版本已弃用,使用kafka)。

Fabric1.0采用共识算法为Solo、Kafka

1.Solo Orderer: The solo orderer is intended to be an extremely easy to deploy, non-production orderer. It consists of a single process which serves all clients, so no `consensus' is required as there is a single central authority. There is correspondingly no high availability or scalability. This makes solo ideal for development and testing, but not deployment. The Solo orderer depends on a backing orderer ledge

order-solo模式作为单节点通信模式,所有从peer收到的消息都在本节点进行排序与生成数据块,详细流程见下图:(用于开发模式下)

order-solo过程分析:Peer(客户端)通过GRPC发起通信,与Orderer连接成功之后,便可以向Orderer发送消息。Orderer通过Recv接口接收Peer发送过来的消息,Orderer将接收到的消息生成数据块,并将数据块存入ledger,peer通过deliver接口从orderer中的ledger获取数据块。

2.Kafka Orderer : The Kafka orderer leverages the Kafka pubsub system to perform the ordering, but wraps this in the familiar ab.proto definition so that the peer orderer client code does not to be written specifically for Kafka. In real world deployments, it would be expected that the Kafka proto service would bound locally in process, as Kafka has its own robust wire protocol. However, for testing or novel deployment scenarios, the Kafka orderer may be deployed as a network service. Kafka is anticipated to be the preferred choice production deployments which demand high throughput and high availability but do not require byzantine fault tolerance. The Kafka orderer does not utilize a backing orderer ledger because this is handled by the Kafka brokers.

Orderer-Kafka分析 (用于正式环境下)

  1. BroadCast :Broadcast主要接收Peer的数据并在Orderer里面生成一系列数据块,主要流程见下图:
  2. Broadcast过程分析:Peer(客户端)通过GRPC发起通信,与Orderer连接成功之后,便可以向Orderer发送消息。Orderer通过Recv接口接收Peer发送过来的消息,并将消息推送到Kafka。同时与Kafka相连接的Orderer通过Consumer实例消费Kafka上的消息,将消费的消息进行同一排序(Order),排序完成后,当达到生成数据块(Block)的条件(条件有两个1:下一数据块定时器到期,定时器通过向Orderer向Kafka发送定时器消息,再通过Kafka消费来达到定时效果。2:每消费一条真实数据,就触发判断是否达到生成一个新的数据块条件,该条件由当前待生成数据块的数据总的大小以及记录数决定),并创建新的数据块(CreateNextBlock),创建成功则将数据块写入ledger(WriteBlock)Deliver过程分析:

    Peer通过GRPC与orderer建立通信,连接成功以后,通过deliver接口发起获取数据请求。Orderer通过recv接口接收到数据获取请求,分析请求参数(SeekInfo_Start:1、SeekPosition_Oldest:从第一条数据块开始获取。2、SeekPosition_Newest:从最新一个数据块开始获取 3、SeekPosition_Specified:从指定数据块数获取)。Orderer从ledger中获取数据块迭代器入口,循环迭代器获取所有的数据块,每获取一个数据块同时就获取到的数据块返回给peer,知道所有数据块获取完,最后向peer返回获取成功状态。

参考内容:https://zhuanlan.zhihu.com/p/25358777

区块链基础知识系列 第二课 区块链共识算法相关推荐

  1. 区块链基础知识系列 第一课 区块链网络简介

    区块链是一种分布式分类帐技术 (DLT),通过建立新一代事务性应用程序的新信任度.可计帐性和透明度,来简化业务流程.区块链网络首次引入到了比特币兑换市场,但其实际使用范围远远超出了加密数字货币事务处理 ...

  2. 区块链 - 区块链基础知识:交易哈希链

    区块链 - 区块链基础知识:深入了解交易哈希链 本文的主题是执行有关交易哈希链. 交易池的角色以及 一个最长的区块链如何永远占据主导. 讨论的细节包括以下内容: 事务哈希链的实现细节 交易池的角色 为 ...

  3. 【问链财经-区块链基础知识系列】 第二十七课 区块链与分布式账本的异同

    编者按:在加密货币和区块链领域,有一个业内人士常挂在嘴边的新术语:分布式账本技术(简称DLT).但具有讽刺意味的是,恰恰是比特币和各种区块链试图颠覆的实体们,例如银行,政府和大公司,对分布式账本技术情 ...

  4. 【问链财经-区块链基础知识系列】 第二十二课 贸易金融区块链平台的技术机理与现实意义

    简介:贸易金融区块链平台的技术机理.模式.优势与现实意义都有哪些?对湾区贸易金融区块链平台的未来建设有何展望?本文将进行详述. 小微企业贡献了我国60%以上的GDP.50%以上的税收以及80%的城镇就 ...

  5. 【问链财经-区块链基础知识系列】 第二十九课 区块链的世界:中国向左 美国向右

    世界有两大互联网生态,一个是美国构筑的,当中的互联网公司有苹果.谷歌.亚马逊.脸书.雅虎等:另一个是中国构筑的,当中互联网公司有阿里.腾讯.百度.京东.今日头条等.这两大生态占据了全球互联网十强. 其 ...

  6. 【问链财经-区块链基础知识系列】 第四十七课 蚂蚁区块链的布局和打法

    近日,一年一度的云栖大会在杭州云栖小镇举行,"区块链"再度成为热词. 在9月24日的蚂蚁金服投资者日上,蚂蚁区块链已经成为蚂蚁金服董事长兼CEO井贤栋口中的"后天&quo ...

  7. 【问链财经-区块链基础知识系列】 第三十课 区块链金融面临的四大挑战

    编者按:越来越多的人意识到区块链带来的价值和好处.其中他们最关心的问题是,如何将区块链不可篡改的特性与自己所在企业或行业的应用场景结合起来.就像区块链在金融领域的应用,探索的触角已伸出,效果又如何呢? ...

  8. 【问链-区块链基础知识系列】 第十二课 区块链产业落地现状分析

    摘要:结合鲸准研究院发布的2018区块链商业落地情况分析报告,然后加入了我参与和了解的区块链落地情况进行整理书写. 我们知道"2018年将是区块链真正与实体经济结合并爆发的一年." ...

  9. 【问链-区块链基础知识系列】 第十课 首席架构师谈区块链技术演进

    一.区块链和比特币,都有"币-链-网"三层含义 1.第一层含义是"币".这个"币"并不是刚才王行长所说的真正意义上的"货币&quo ...

最新文章

  1. python程序的控制结构
  2. Java中String和byte[]间的转换浅析
  3. 成为优秀程序员应该具备的8个特质
  4. Amazon Elastic Map Reduce使用Apache Mahout计算建议
  5. 使用TensorFlow概率预测航空乘客人数
  6. TF卡里删掉文件后内存没变大_内存卡损坏怎么修复?数据恢复方法教程
  7. 清理vs工程文件(python2.7)
  8. IOS中扩展机制Category和associative
  9. ASP.net MVC Mock Context(上下文)
  10. Qt4_读取和写入二进制数据
  11. 手机都可以直接敲R了,还要电脑干嘛
  12. 判断 失效_复合材料渐进失效Hashin模型及参数详解
  13. 给机器人罗宾写一封英语回信_人教版5年级英语unit1知识
  14. 云计算未来 — 云原生
  15. {“error“:{“root_cause“:[{“type“:“script_exception“,“reason“:“compile error“,“script_stack“:[“... par
  16. 记录一些Mac OS X技巧
  17. java浪漫代码_程序员表白代码,用过的人都找到了对象...
  18. 用 CSS 画一个带阴影的三角形
  19. pde与波长 sipm 关系_基于SiPM和TCMPC的时间分辨拉曼散射测量技术研究
  20. 希尔排序(动图+详解)

热门文章

  1. self.view = nil 和[self.view release]的区别
  2. 准时制 jit 减少库存
  3. 求两个数集的并集C++代码实现
  4. AD18-画PCB步骤-总结
  5. MATLAB中的wavedec、wrcoef函数简析
  6. Arraylist gossip
  7. 机器学习导论(张志华):多元高斯分布
  8. 转载:逻辑思维提升表达
  9. 写在中国雅虎关闭之后
  10. C++中的NULL与DELPHI中的nil作用相同