区块链设计核心难题:拜占庭将军问题

7 评论 12283 浏览 33 收藏 9 分钟

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

一、先讲个故事

从前有个帝国叫做拜占庭,这个国家派出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)等等。这些机制我将会在后面的期刊中进行详细的介绍。

版权声明:

数字签名:Press.one

 

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

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

题图来自作者

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 提出一个疑惑!如果这样的话那么A能不能够在最长链上岂不是取决于他广播的节点C接到消息的间隔以及C的计算能力了?这样不公平啊

    来自吉林 回复
  2. 终于有一篇通俗易懂的讲清楚区块链原理的文章了 😉

    来自广东 回复
  3. 牛皮

    来自重庆 回复
  4. 学习了,可以转发朋友圈吗

    回复
    1. 可以的,注明出处就行

      来自浙江 回复
    2. 好的,谢谢

      来自北京 回复
  5. 深圳

    回复