用三国演义解释拜占庭将军问题、挖矿原理

Babylon

04-23

背景介绍

 

拜占庭将军问题是一位名叫莱斯利·兰伯特(Leslie Lamport)的高手(曾获得图灵奖)在1982年提出的,关于点对点信息传输、系统容错等问题。这个拜占庭将军问题一提出来,大家觉得“嗯,以故事来讲技术理论”很有意思。

几乎每本关于比特币的书都会讲这个问题,只是这个问题翻译到中国之后呢,讲得有点诡异难懂。每个研究比特币的人,都会看到拜占庭将军问题。看看好像懂了,又好像没懂。那么,到底懂没懂呢?答案是,没懂。

拜占庭将军问题本身我认为是一个好的引子,但并不算是一个好的故事,咱中国人不熟悉呀。一双臭脚万人捧,时间长了,似懂非懂也就这样了。咱没有人家莱斯利的水平,这个故事讲给有计算机密码学功底的人听,是个好类比,对我们未必是。

  

军师联盟

 


今天我们从新解构这个问题,用大家熟知的三国故事更加细致地讲解所谓的拜占庭将军问题。

把时间轴拉回到三国时代,咱们设定一个前提,当时的时代背景下,只要一个书信文件是你写下来的信息,有你的签名和的盖章就要认账,信誉很重要。再设定一个背景,当时的老大是曹操,他软禁了正牌儿的皇帝汉献帝。曹操的都城周边有十个将军或者军师,有诸葛亮、荀彧、郭嘉、孙策、徐庶等等军师联盟。这十个人呢,分居各地(如同分布式的节点),半数以上的人联合的话就可以打败曹操,商量着要不要打曹操。

当时传输信息主要用的是信鸽飞来飞去,十个军师之间飞鸽传书,就是模拟点对点的信息传输。 

这里面有两个问题:

第一,如果出现了奸细,其实,都不用出现奸细,诸葛亮的信鸽飞到了郭嘉那里,郭嘉一看要打主公呀,我给你改成不打,再发出去。行不行?如何保证每一个节点不会篡改另一个节点发出的信息(所谓的恶意节点冒充正常节点)?


第二,怎么样保证每一个节点(军师或将军)信息的记录是一致的?

第一个问题怎么解决呢?用非对称加密技术。

比如,诸葛亮说要打曹操,对发出的信件盖章签名,这个过程是用自己的私钥进行加密;加完密之后,信鸽飞呀飞到郭嘉那里,郭嘉一看,要打主公呀,想改成不打曹操,但是看得见改不了呀。

 

第二个问题呢,怎么保证每个节点(军师或者将军)记录的信息是一样的呢?

现在的问题已经不是打不打曹操的问题,关键是大家记录的军令信息是一样的。

比如,

诸葛亮的信息:下个月三号早上八点从岐山发兵进攻曹操;

郭嘉:我不打曹操;

荀彧:曹丞相还不错,先不要打;

鲁肃:我走水路去打曹操;

司马懿:我过三十年再打,兄弟们先上……

打不打都可以,但是大家记录的这些信息需要一致。

 

每个军师都有资格记录军令信息,那谁记录的为准呢?设置一个数学题,然后谁先算出来这个数学题呢谁就来记录信息。交给一个人来记录然后发布给大家。谁智商高,谁算力大,谁先算出数学题的概率就比较大。让他来记这个信息,然后张贴告示英雄榜,让大家都知道,谁打谁不打这些信息(类比比特币的交易信息)。然后大家一看数学题都算出来了,这次的算数题就算了,开始争取下张英雄榜算下一个题。

  

激励机制

各位想想,我去发英雄榜(记账、广播)这是个劳动呀,为什么还要我累死累活得去算数学题?这时候加入一个激励机制。以比特币原理为例,算出一个数学题挖出一个区块,奖励50个BTC(四年奖励减半的事儿今天不讲,简化模型)。三国时代,一位军师每次先算出来数学题,记录好信息并贴出告示发出英雄榜,就送你50锭金子或者50个美女或者50座城池——这其实类似比特币发明人中本聪设计的激励机制。


这个时候呢,大家就有积极性了,都去抢着算这个数学题,算出来后就记好信息,张贴英雄榜。这就是PoW工作量证明机制,用PoW工作量证明机制保证记录的信息是一致的。

完美地解决了拜占庭将军问题。

  

招三千门客挖矿

 

故事进行到这里,打不打曹操就更不重要了。这十个军师呢,每个人都想就想去算数学题,然后记录好信息,张贴这个告示发英雄榜(发布到全网),可以得到奖励,50锭金子或50座城池(50个比特币)的诱惑力太大了。

这个时候,有人就鸡贼了,比如诸葛亮,一个人不好算嘛。我的脑子变聪明了,我的智商升高了,比如从CUP到GPU到ASIC芯片级别了。但是,发现郭嘉、荀彧的智商也升高了,从100变成200了。好吧,我有钱,我招门客,你招300门客,我招3000门客,3000个门客3000个人给我一起算这个数学题!智商基数更高,算力更高,我先算出来的概率就大了。我先算出来题了,一公布出来,别的军师(节点、矿工)就不用再算这个题了,去算下一个题。

这3000门客就相当于3000台矿机,这就是比特币的挖矿原理

当然,大家还可以继续开脑洞,诸葛亮养门客的食宿费用就像矿机的电费、维护费用;3000门客在一起就组成了矿场;还有矿池、接入算力平台等等。朋友们可以自行脑补,在此不再赘述。

 

总结:比特币解决了拜占庭将军问题。第一个解决的问题是保证我(一个诚实节点)发出的信息不会被人(另一个节点)修改,方法是非对称的加密技术;第二个解决的问题保证是每个人发出的信息被人记录下来的数据是一致的。方法是PoW工作量证明机制。



申明:文章来源(巴比特:村头二旧)相关链接



推荐阅读

加载更多