Finn

Finn

👨🏻‍💻工作:Web3 产品经理 🏙️城市:香港 🧩性格:INFP 最近在做 GameFi,能赚钱的游戏
jike
email

「Web3 笔记」拜占庭将军问题

拜占庭将军问题#

如果你第一次看到这个名字,可能会觉得这是一个历史人物遇到的一个打仗的问题。但其实完全不是,而是一个计算机学家提出来为了解决分布式网络的问题。

拜占庭将军问题 (Byzantine Generals Problem),是由莱斯利・兰波特在其同名论文中提出的分布式对等网络通信容错问题。

简单介绍一下问题提出者:

莱斯利・兰波特Leslie Lamport),美国计算机科学家。也是排版系统 LaTeX 的开发者。2013 年,获得图灵奖。

开开脑洞#

在探寻拜占庭将军问题这个复杂问题前,我想先给一个小问题来开开脑洞(适应下思维方式)。

有两个守门童 A 和 B,有两扇门 a 和 b,我们的目标是找到 a 和 b 中正确的门,已知:

  1. 我们可以各询问 A 和 B 一个问题
  2. A 和 B 一个人说真话,一个人说假话

请问,如何问才能找到正确的门?

可以思考一下,还挺有意思的,其实只用问一个问题就可以得到答案。

答案:询问 A:你认为 B 会说哪个门是正确的门?(正确答案就是 A 回答的另一扇门)

达成共识#

这个拜占庭将军问题举的例子比较复杂,希望能用一个简单的例子来让你理解:

一群好朋友(将军)想要讨论明天早上十点是否一起去公园,但是现在无法群聊,只能一对一的私聊,可以确定的是朋友内有想捣乱或破坏大家的关系(故意乱说),如何达成大家统一行动的目标(一起去或不去)?

比如,一共 9 个人,大家采用多数服从少数的原则,当四人同意去,四人不同意去,坏蛋跟同意的四人说同意去,跟不同意的四人说不同意去,双方都以为自己胜利,会导致出现目标失败。

上述的故事映射到计算机系统里,将军便成了计算机,而私聊就是通信系统。虽然上述的问题涉及了电子化的决策支持与信息安全,却没办法单纯的用密码学与数字签名来解决。因为电路错误仍可能影响整个加密过程,这不是密码学与数字签名算法在解决的问题。因此计算机就有可能将错误的结果提交去,亦可能导致错误的决策。

而在区块链中,若出现了无法达成共识会出现分叉、宕机等问题。当一条链共识出现问题,将会对这条链造成信任危机也是致命打击,所以在区块链中共识算法是生态发展的底层基础。

口头协议#

其实共识算法在不断进步,也有非常聪明的人在不断提出新颖的解题思路。在本问题被提出的论文中,莱斯利・兰波特已经提出了两种解法,今天就分享口头协议这个解法。

以下内容并不是原版解法,是根据个人理解的表达,若有错误希望理解

定义:

  1. 分为两类,好人(希望统一),坏人(希望不统一)
  2. 提出提案的人自动作为领头(将军)

目标:

  1. 若领头是好人,保证所有好人都执行领头的提议
  2. 保证所有好人保持一致执行

失败案例#

继续按上面的去公园为基础,这次是 a、b、c 3 人商讨是否明天去公园,其中一人坏人。

b 提出去公园的想法,作为领队。

(下方有图解)

可能 1#

b 领队不是坏人,c 是坏人

a 收到 b 去公园的想法,但是不知道 b 是否是好人,所以问 c:b 提议是去还是不去,c 反馈不去,所以 a 收到 1 个去,1 个不去。a 知道 b 和 c 中有一个坏人,但不知道是谁。

所以无法达成共识:失败

可能 2#

b 领队是坏人,a c 都是好人

a 收到 b 去提议,c 收到 b 不去的提议,此时 a 和 c 交换信息,都得到 1 个去,1 个不去。

所以无法达成共识

img

成功案例#

这次是 a、b、c、d 4 人商讨是否明天去公园,其中一人坏人。

可能 1:#

领队 c 是好人,提出明天不去公园,d 是坏人。

a 收到不去公园的意见后,询问 b、d 领队的意见是什么,得到的是不去(b)和去(d)。

a 得到的是(不去、不去、去),选择多数不去就行,b 同理结论是不去。

最后 a、b、c 都不去,达成目标 2,并且符合领队的命令,达成目标 1.

可能 2:#

领队 c 是坏人,对 a、b 说去,对 d 说不去。

a 收到去的提议后,询问 b、d 领队的意见是什么,得到的是去(b)和不去(d)。

a 得到的是(去、去、不去),选择多数去就行,b 同理结论是去。

d 收到不去的提议后,询问 a、b 领队的意见是什么,得到的是去(a)和去(b)。

d 得到的是(不去、去、去),选择多数去就行。

最后 a、b、d 都统一去了,达成目标 2,由于领队是坏人,无需考虑目标 1。

img

其实,当时莱斯利・兰波特提出口头协议时就给出了结论,若有 n 人参与,m 人是坏人,那么只有当 n > 3m 时才能达成共识。也就是说当有 2 人坏人时,需要一共 7 人才能达成共识,具体的推演过程可以看李永乐老师的视频,很有意思。

当然区块链中比特币和以太坊都采用的 PoW(工作量证明)也非常出色的解决了共识问题,并且经过十几年的稳定运行也证明了这种方法的可行性。但是 PoW 也有非常多被人诟病的问题,有机会再详细研究一下 PoW 的底层逻辑。

参考链接:#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。