在区块链中有一个著名的问题,就是拜占庭将军问题,对于拜占庭将军问题,网上的文章已经多得不要不要了,今天和大家分享的是其相关的实用拜占庭容错算法,一起来看看吧。

  实用拜占庭容错算法(Practical Byzantine Fault Tolerance)刚开始是在MIT的Miguel 和 Barbara Liskov在1999年的学术论文中提出的,他们的本意是为设计一个低延迟存储系统设计系统,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行,主要是为了应用于不需要大交易量但需要处理许多事件的数字资产平台,每个节点都可以发布公钥,这是被允许的。节点将签名所有通过节点的消息,以验证其准确性。当得到一定数量的签名想用,此交易就被认定为有效。

  PBFT算法的运作步骤为:

  (1)取一个副本作为主节点,其他的副本作为备份;

  (2)用户端向主节点发送使用服务操作的请求;

  (3)主节点通过广播将请求发送给其他副本;

  (4)所有副本执行请求并将结果发回用户端;

  (5)用户端需要等待F+1个不同副本节点发回相同的结果,作为整个操作的最终结果。

  PBFT对每个副本节点提出了两个限定条件:

  (1)所有节点必须是确定性的。也就是说,在给定状态和参数相同的情况下,操作执行的结果必须相同;

  (2)所有节点必须从相同的状态开始执行。

  PBFT算法包含三个重要阶段,分别是预准备(pre-prepare)、准备(prepare)和确认(commit),pre-prepare阶段和prepare阶段用来把在同一个view里发送的请求给确定下序列,就是排好序,让各个replicas节点都认可这个序列,照序执行。prepare阶段和commit阶段用来确保那些已经达到commit状态的请求即使在发生view change后在新的view里依然保持原有的序列不变

  PBFT算法存在的问题:

  · 计算效率依赖于参与协议的节点数量,不适用于节点数量过大的区块链系统,扩展性差。

  · 系统节点是固定的,无法应对公有链的开放环境,只适用于联盟链或私有链环境。

  · PBFT算法要求总节点数n>=3f+1(其中,f代表作恶节点数)。系统的失效节点数量不得超过全网节点的1/3,容错率相对较低。

  另外PBFT算法有一个弱点,其不能很好的存贮记录其交易信息,黑客能够截取一些失效的副本,这会让信息外漏。

  本质上来说,拜占庭容错方案就是少数服从多数。目前有一些机构正在关注实用拜占庭容错算法,比如中国ChinaLedger 联盟和HyperLedger联盟就在研究探讨其的实际应用。迅雷发布的迅雷链也是使用的这一共识算法。

原文链接:https://www.kg.com/article/495651121931620352

最新文章

  1. 编写NPAPI plugin的命名问题
  2. jquery获取url参数
  3. C中的预编译宏定义
  4. 新浪云php与java连接MySQL数据库
  5. Centos与win8.1的双系统
  6. 准备开一个地图SDK的开源项目
  7. protel或Altium Designer中各种栅格(grid)的意义
  8. Maven deploy时报Fatal error compiling: tools.jar not found错误的问题处理
  9. 基于keepalived搭建MySQL高可用集群
  10. 命令行以及Python交互模式下python程序的编写
  11. 【JavaScript】标准日期、中国标准时间、时间戳、毫秒数互转
  12. HTML元素被定义为块级元素或内联元素。那么什么是块级元素,什么是内联元素呢
  13. 034 Maven中的dependencyManagement和dependencies区别
  14. bzoj 1005
  15. Yii2事件驱动的运行机制
  16. 收藏:FLASH中键检测与右键屏蔽
  17. Spatial Transformer Networks
  18. UPUPW本地环境配置thinkphp5的问题
  19. win10系统把文件夹固定到任务栏
  20. ue4 多相机分屏与小地图效果实现教程

热门文章

  1. 深入理解 JavaScript Function
  2. CSS 布局整理(************************************************)
  3. Move resources allocated using unmanaged interface to managed devm interface
  4. Android常用URI收藏
  5. java.sql.Timestamp类型
  6. 如何从底层调试docker
  7. Node.js自动化技术实现(Java)
  8. poj 3307 Smart Sister 打表解因子生成数问题
  9. java编译命令工具javac
  10. UDP通信接收端,接收二维数组,内容为0与1