在前面两期中,主要对区块链的基本概念和基本设计原则进行说明,现在有了这些背景知识后,再去学习更深层的知识将会更加容易。本期我们一起研究一下拜占庭将军问题,这是区块链解决的一个核心难题,通过理解这个问题的来龙去脉,相信大家会对区块链的底层知识会有一个更深入的思考。

一、先讲个故事

从前有个帝国叫做拜占庭,这个国家派出5位将军去共同围攻一座城市,他们5支军队分开驻扎在这个敌城周围,这5个将军之间只能通过信使联系,只有5个将军一起进攻敌城才会胜利。

于是在他们5个人出发之前一起商量了进攻的策略,少数服从多数,当超过3个及以上的人都同意进攻,则5个人一起进攻,否则就一起撤退。

但是,如果他们5个人之前出现了一个叛徒,就可能导致最终的行动不一致。如下图:

将军1234都按照服从多数人的规则来执行,图中的将军01和02跑了,将军03和04去攻打了,违背了开始他们一起进退的约定。最终导致进攻失败,打了败仗。

其中,坏蛋将军05就可以理解为一个作恶的节点,他向不同的节点传递不同的消息,让系统内部的信息出现了不一致。

从这个故事可以看出:几个相互协同的人,如果其中有个人作恶的话,可能不同的成员得出的最终结论不一致,从而破坏了系统的一致性。这就是拜占庭将军问题,这个问题一直是协同合作中难以解决的问题。

二、现代版拜占庭将军

大家都知道了区块链是一套去中心化的分布式系统,既然是分布式系统就意味着要全网多台服务器节点进行协同合作。

那拜占庭将军问题就出来了:每个网络节点相当于一个拜占庭将军,这些节点最终要共同维护一套数据,这个过程中可能出现两个问题。

1.无法保证节点诚实

一个节点可能同时向不同的服务器发送不一致的消息,导致节点之间存储的信息不一致。这个可以把它理解为单点一致性问题。

2.无法保证系统内部信息统一

分布式系统中存在一部分节点收到的信息和另一部分节点的收到的信息是不同的,那最终所有的节点应该以哪一条信息为标准呢?

假设分布式网络遵从少数服从多数的情况,那如果全网超过一半的节点同时作恶,去篡改了已经存在的某条信息,那系统也只能接受这条不正确信息,导致系统的前后不一致。

这两种问题可以统称为系统一致性问题。

三、神奇的比特币网络

中本聪大神为了解决分布式系统中的拜占庭将军问题,开创性的提出了工作量证明机制(POW),一举解决了单点一致性和系统一致性问题。

先简单理解一下工作量证明机制是什么(我会在后面一期中进行更详细讲解):工作量,顾名思义就是要干活,在比特币网络中要做的就是全网节点要共同算一道数学题,谁先算对,谁就能获得发出一条消息的权利,并且系统还会给算对的节点额外的奖励;然后全网节点在这条信息之后开始计算新的数学题。

1.如何解决的单点一致性问题

通过工作量证明机制,每个节点不再能随便发送信息了,只有正确算出那道数学题才能发送一条消息。

这就降低了节点发送消息的速率,保证一段时间内,大部分节点收到的是一条一样的消息。

2.如何解决系统一致性问题

为了解决系统的一致性问题,比特币网络提出了最长链概念和6次确认概念。

(1)最长链是什么?

可以理解为:节点发送一个消息就是一个区块,一个节点接收上个节点发出的消息之后,在这个消息的基础之上开始进行新的数学题计算来获取发送消息的权利,并产生新的消息区块,这些区块组成一条首尾相连的链条。

在系统内信息传输的过程中,难免会出现节点A和节点B几乎同时算出数学题的情况,这个时候它们向外发送消息,可能离节点A近的节点先听到A的消息,离节点B近的节点先听到B的消息。

节点都以最先收到的消息为准,分别开始在其后进行数学题计算。

出现这种情况,在系统内就会出现两条消息链条,出现了系统不一致性,如何解决呢?这里就采取了最长链为标准。

全网节点约定:只在消息最多的那条数据链条之后进行数学计算和消息连接,节点时刻监听全网状态,确定自己是不是在最长链条上;如果不是,则立即切换到最长链去进行数学题计算。这就保证了系统内只有一套合法的消息链条。

C在收到A的消息之后优先算出了数学题,那这个时候A和C所在的就是最长链,B所在的链条将会被舍弃,然后F,G,H节点会开始在C之后进行数学题计算。

(2)6次确认是什么

为了防止在比特币网络中出现信息篡改情况的发生,需要每条消息经过6次确认没有更改之后才认为有效。

通过6确认可以大大提高系统的不可篡改性,因为如果想更改一条已经确认的消息,需要正确算出6个数学难题,然后还需要保证自己的更改之后的消息链条为最长链。

这会消耗大量的成本,导致篡改数据的成本高到无法承受,最大程度的保证了系统不会出现确认过的消息前后不一致的问题。

四、总结

比特币虽然通过采用工作量证明的机制解决了拜占庭问题,但是也造成了一些新的问题:因为在比特币网络中节点需要通过计算数学题的方式来获取发消息的权利,这就需要CPU之间竞争谁的计算力强,会造成巨大的能源浪费——这也是比特币网络经常被人诟病的一个原因。

为了解决比特币网络存在的能源浪费,促使人们去探索更多办法去解决拜占庭将军问题,这就出现了后来的权益证明(POS)、股权委托证明(DPOS)等等。这些机制我将会在后面的期刊中进行详细的介绍。

版权声明:

作者:liheng,区块链探索者、互联网产品经理,超级个体修炼中,只创作对用户有价值的内容。

本文由 @liheng 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自作者

给作者打赏,鼓励TA抓紧创作!赞赏

4人打赏

区块链技术用解决拜占庭将军问题_区块链设计核心难题:拜占庭将军问题相关推荐

  1. 区块链技术用解决拜占庭将军问题_什么是拜占庭将军问题

    接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢? 接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某 ...

  2. 区块链技术能解决贫富差距两极分化问题吗?

    我们现在的生活水平越来越高,生活质量越来越好,越来越多的老百姓进入了小康社会,大家还以为贫富差距在不断缩小,其实,事实却是,贫富差距在一天天的拉大,并且这不只是我国存在的现象,而是全球性的问题.不管是 ...

  3. BC:带你温习并解读《中国区块链技术和应用发展白皮书》—国内外区块链发展现状

    BC:带你温习并解读<中国区块链技术和应用发展白皮书>-国内外区块链发展现状 目录 区块链发展演进路径 2.1.1 技术来源 2.1.2 区块链1.0--数字货币 2.1.3 区块链2.0 ...

  4. 区块链技术用解决拜占庭将军问题_区块链是如何解决拜占庭将军问题的?

    原标题:区块链是如何解决拜占庭将军问题的? 区块链火爆后不少人认为它是继蒸汽机.电力.互联网之后第四代具有颠覆性的技术.但凡了解它,或者对比特币有一定见解的人,都多多少少听过拜占庭将军问题.现阶段区块 ...

  5. 区块链技术用解决拜占庭将军问题_区块链技术6:拜占庭将军问题

    本篇主要结合Lamport((2013年的图灵奖得主) 1982年的论文<Byzantine Generals Problem>讲一讲拜占庭将军问题(Byzantine Generals ...

  6. 区块链技术用解决拜占庭将军问题_区块链中的拜占庭将军问题解析

    今天我们要讲的内容是:"什么是拜占庭将军问题"? 我们在之前讲过,分布式账本可以说是区块链的框架,每一个人都可以自由地参与进来,共同处理区块链中的数据,基于这一点,区块链实际上就是 ...

  7. 区块链技术用解决拜占庭将军问题_两军问题_拜占庭将军问题详解图解算法

    两军问题 我们来看一下好处理器的情况,但通信线路有问题.这就是所谓的两军问题,可以概括如下: A,B 两军师协同攻击敌军C, A和B在物理上是分开的,并使用信使进行通信. A向B发送一个消息" ...

  8. 区块链技术用解决拜占庭将军问题_区块链技术如何解决拜占庭将军问题?

    如果10个将军中的几个同时发起消息,势必会造成系统的混乱,造成各说各的攻击时间方案,行动难以一致. 谁都可以发起进攻的信息,但由谁来发出呢?中本聪巧妙地在个系统加入了发送信息的成本,即:一段时间内只有 ...

  9. 如何使用区块链币收款地址找合约地址?_区块链技术学习指引

    本文原文链接 本文为博客文章索引,小白必看.有新文章时会更新本文,建议大家加入收藏夹中,如果你觉得本站不错,欢迎你转发给朋友. 引言 给迷失在如何学习区块链技术的同学一个指引,区块链技术是随比特币诞生 ...

最新文章

  1. 机房重构——报表问题总结
  2. SpringBoot项目redis的消息队列
  3. Linux下Bluez的编程实现
  4. 分析connection reset by peer, socket write error错误原因
  5. 【开源】C#跨平台物联网通讯框架ServerSuperIO(SSIO)
  6. 解决Eclipse 64位启动时,报jvm.dll错
  7. Java基础知识总结(绝对经典)
  8. [ARM-assembly]-ARMV8-A64指令编码介绍
  9. 在Web网页里面实现像Excel/WPS条件格式那样根据数据大小自动改变背景颜色(网页数据热力图实现方法)
  10. TRY HACK ME |RELEVANT「渗透测试挑战」
  11. python 实时打印控制台输出信息
  12. 突破蓝牙壁垒:aptX技术完美解决无线音频的延时问题
  13. 电脑自动捆绑软件,怎么办?
  14. 解决CPU风扇转速为“0”的问题
  15. 踩坑记录:关于低版本firefox43.0.1在控件中定义onclick=remove(),点击按钮,按钮会消失。
  16. 云服务器win10系统搭建ftp,win10系统搭建ftp服务器
  17. 热播剧《延禧攻略》进入台湾2019年学测语文试题
  18. Python量化教程:量化风险
  19. Android单击图标的过程
  20. 聚观早报 | iPhone 14正式官宣;支付宝、微信新增信用卡取现

热门文章

  1. 网卡接口绑定驱动及其使用的 bind、unbind、new_id 等 sys 文件
  2. return 的用法
  3. 与运算、或运算以及异或运算
  4. php中mvc代表什么意思,thinkphp中的mvc代表什么
  5. css3直线运动_用纯CSS3制作的效果非常炫酷的元素边框线条动画特效
  6. 泛微京桥通集成SAP,让采购流程闭环、业务管理一体化
  7. Uniapp商城项目【详细笔记文档】
  8. storcli64和smartctl定位硬盘的故障信息 定位硬盘盘位和盘符的方法
  9. 在Linux执行的10个最危险的命令
  10. 推荐几种方法把两个pdf合并成一个pdf