作者:历史文章 / 来源:白话区块链
区块链
每一本讲技术的书籍,几乎都会讲到,看到这个词语时,我曾经一度认为有一位名叫拜占庭的将军带领着一支庞大的军队打仗时遇到了难题,但查阅了一些资料后,发现实际上并没有拜占庭将军,也没有这场战争,完全是计算机专家假想出的问题。
1
拜占庭帝国
拜占庭这个专有名词取自于,又叫东罗马帝国,其军事力量很强大,地处现今欧洲的土耳其国家。
(取自百度百科)
在《区块链----从数字货币到信用社会》中关于拜占庭将军问题的描述有点小错误,书中把问题描述成10个邻国去攻打拜占庭国家,但查到这个问题的提出者Leslie Lamport的论文原稿时,实际上这是一个假想的问题。
莱斯利·兰伯特(Leslie Lamport),是微软研究院的首席研究员,曾获得2013年图灵奖——计算机界的诺贝尔奖。这家伙觉得故事让问题变得受欢迎,因此他在提出观点和问题时常用故事背景吸引眼球,拜占庭将军的故事就是兰伯特在研究分布式系统容错性的时候编出的一个故事。
外国研究人员引用欧洲历史来举例说明一个算法问题,中国人容易误解,拜占庭幅员辽阔、军事力量强大,派出多支部队去攻打敌军,并不是挨打。
2
问题描述
论文中的原文:
We imagine that several divisions of the Byzantine army are camped outside an enemy city, each division commanded by its own general. The generals can communicate with one another only by messenger. After observing the enemy, they must decide upon a common plan of action. However, some of the generals may be traitors, trying to prevent the loyal generals from reaching agreement.
假设拜占庭帝国的几支军队在敌人的城池外扎营,每支军队听命于自己的将军,这些将军之间只能通过信使传递消息。在对敌军进行侦察后,将军们必须制订一份共同行动计划。但是,有些将军可能是叛徒,这些叛徒会阻碍那些忠诚的将军达成共识。
这个问题的简洁描述:在已知有间谍的分布式军队中,将军们如何达成共识,执行共同的作战计划,来取得战争的胜利。
3
问题的难点
这个问题困扰了程序员们很多年,直到比特币的出现。通常会遇到的问题有:
这些将军离得很远,不能每遇到一个问题,就聚到一起开会商量对策
这些将军中可能有少量叛徒,叛徒会乱发消息
信使在传递消息时可能会把信弄丢
信息可能会被敌国截获
无法确认消息是否真的来自某位将军
将军们在商量过程中可能会浪费很多天时间,贻误战机
4
区块链的解决方案
把军队想像成计算机节点,把信使想像成计算机间的网络通讯,攻占敌军就是写入一个大家公认的区块记录。
区块链技术在发送信息中加入了成本,降低了信息传递的速率,并采用了工作量证明(PoW),即一个节点必须经过大量尝试性计算才能得出一个结果,而其它节点只需极少的时间就能证明其真伪,这样能够减少垃圾消息、假消息在节点间传播的状况。
挖矿节点把一段时间内的交易信息打包成一个区块,盖上时间戳,与上一个区块衔接在一起,每个区块都包含了上一个区块的索引(哈希值),然后再写入新的信息,从而形成新的区块,首尾相连,最终形成了区块链。
用工作量证明、公钥加密等技术,使比特币网络从一个去中心化的不可信网络变为可信网络,使所有参与者可以在某些事情上达成一致,使价值传递成为了可能。
文
| 申龙斌
公众号
| 申龙斌的程序人生
整编
| WangMe