拜占庭将军与区块链有啥关系?

每一本讲区块链技术的书籍,几乎都会讲到拜占庭将军问题,看到这个词语时,我曾经一度认为有一位名叫拜占庭的将军带领着一支庞大的军队打仗时遇到了难题,但查阅了一些资料后,发现实际上并没有拜占庭将军,也没有这场战争,完全是计算机专家假想出的问题。

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),即一个节点必须经过大量尝试性计算才能得出一个结果,而其它节点只需极少的时间就能证明其真伪,这样能够减少垃圾消息、假消息在节点间传播的状况。

挖矿节点把一段时间内的交易信息打包成一个区块,盖上时间戳,与上一个区块衔接在一起,每个区块都包含了上一个区块的索引(哈希值),然后再写入新的信息,从而形成新的区块,首尾相连,最终形成了区块链。

用工作量证明、公钥加密等技术,使比特币网络从一个去中心化的不可信网络变为可信网络,使所有参与者可以在某些事情上达成一致,使价值传递成为了可能。

参考文献:

区块链生存训练的文章选读:

币圈有风险,入圈需谨慎。

币圈有风险,入圈需谨慎。

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2017-07-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

为什么程序员都是夜猫子

一种很流行的说法是,程序员是把咖啡因转化成程序代码的机器。 说的是实情,随便问一个程序员,问他什么时候工作最有状态,估计他很有可能说是深夜。有人...

3207
来自专栏华章科技

送书 | 别泡枸杞,别晒步数!7招搞懂健康数据,有型有颜等TA来撩

导读:你的日常活动正在产生大量数据!但其中很多数据也正在被你浪费。你以为数据与健康的关系,就是在朋友圈里晒晒步数?其实,并不需要复杂的技术,这些数据就可以帮你完...

362
来自专栏编程

我给所有新手程序员的建议

欢迎来到编程的世界! 1. 编程真的很难 无论你多擅长编程,唯一能降低开发速度的,就是学习和解决问题的能力。而当你越是擅长编程的时候,这种情况就可能越明显。这是...

1719
来自专栏ThoughtWorks

技术雷达是如何建立的?

ThoughtWorks一年发布两次技术雷达,在每次雷达的准备期,TAB(ThoughtWorks技术顾问委员会)成员都会全力以赴的投入其中,以至连睡觉都会变成...

2667
来自专栏互联网数据官iCDO

选对归因模型,突破竞价广告增长瓶颈不是梦!

引言:本文深度剖析为什么默认的归因模型对于那些想要增长的电商店铺来说是一个噩梦,展示了各种归因模型的区别。如果你希望看到你的广告效果激增的话,文末处告诉你应该选...

682
来自专栏大数据文摘

技术再好,能阻止暴力视频的疯传吗?

1958
来自专栏nimomeng的自我进阶

《设计原本》读书笔记

两人互动产生的思想是原来的两倍,原创性思想也是原来的两倍,同时也增加了快乐,导致试验对象去尝试更困难的任务。

781
来自专栏CDA数据分析师

“大数据”时代,什么是数据分析做不了的?

不久之前我曾与一位大型银行的首席执行官一同用餐。他正在考虑是否要退出意大利市场,因为经济形势不景气,而且未来很可能出现一场欧元危机。 这位CEO手下的经济学家描...

1886
来自专栏大数据文摘

大数据做不到什么?

23212
来自专栏机器学习算法与Python学习

机器学习提供数据防护能力

机器学习提供大数据分析欠缺的防护功能。大数据搞定数据泄露发生的原因,机器学习则是在泄露发生时就识别出来。 网络安全专家看到大数据兴奋得双眼放光,因为这就是数据科...

2658

扫码关注云+社区