中本聪如何解决拜占庭将军们的难题

公元395年1月17日,罗马皇帝狄奥多西一世挂了。死前把帝国一分为二,交给两个儿子掌管。其中西罗马帝国在476年被日耳曼蛮族灭掉。千年后的1453年,东罗马帝国都城君士坦丁堡(今土耳其伊斯坦布尔)被奥斯曼帝国攻陷。

相传伊斯坦布尔城建于古希腊时期,由墨伽拉城的王-拜占斯修建,所以最早的名字叫拜占庭。

17世纪,史学家为了区分古罗马帝国和中世纪罗马帝国,把东罗马帝国改称为拜占庭帝国。

拜占庭将军们的难题

在一次战争中,拜占庭帝国出动四名将军去进攻敌国。他们带领各自的军队,分别从不同的方向包围了强大的对手。但要想击败敌人,只有一半以上的将军同时进攻才能成功,否则会被消灭。分散包围的将军们离得很远,需要通过通讯兵协商进攻方向和时间。这时候,他们碰到一个难题:四个将军中间可能存在一个叛徒,假设将军A是叛徒,他派出3个通讯兵分别告诉B、C、D上午9点、10点、11点发起进攻,那这三个将军无疑会全军覆没。所以,四个将军之间都不敢信任对方,他们需要确认信息的正确性。

他们想出一个办法并达成了共识,按照这个共识协议来执行:每个收到信息的将军,再派出通讯兵去告诉其他将军自己收到的信息,已收到的最多的信息为准,发起进攻。

再来看刚才的问题,B、C、D收到叛徒A的消息后,B将军派出通讯兵告诉C、D将军,他收到的信息是上午9点进攻,C、D也同样派出通讯兵这么做。于是,B得到3条信息:A告诉B上午9点进攻;A告诉C上午10点进攻;A告诉D上午11点进攻。B依此判断A是他们中的叛徒,协商无效。

另一种情况,A将军不是叛徒,他派出了3个通讯兵,分别告诉B、C、D将军,上午9点发起进攻。B、C、D三位将军收到信息后,互相确认信息。如果B是叛徒,B告诉D说收到的信息是上午10点发起进攻,C和D也分别告诉另外两个将军,A的信息是上午9点发起进攻。于是,C和D将军收到的信息都是两个上午9点,一个上午10点。他们只要执行收到的多的那个命令就可以了。因为,B如果确实是叛徒,A、B、C将军会上午9点发起进攻。如果B不是叛徒,那B收到的信息是两个9点一个10点,B会执行收到多的信息,B、C、D三个将军会一起发起进攻。所以,按照这个共识执行,结果都没有问题。

这就是拜占庭将军问题(Byzantine failures)。在比特币和区块链中,几乎每篇介绍的文章中,都会讲到拜占庭将军问题。

其实将军的故事并没有真正发生过。它是由莱斯利·兰伯特(Leslie Lamport)在论文中,用来为描述分布式系统一致性问题的一个著名的例子,是在点对点通信中的一个基本问题。

莱斯利.兰伯特在论文中证明了,上面例子中的将军总数大于3M ,背叛者为M 或者更少时,忠诚的将军可以达成命令上的一致。(就是说一共有四个将军其中叛徒有一个的情况下,通过例子中的共识算法可以保证命令执行的正确性)

当中本聪设计比特币系统时,也面临和拜占庭将军类似且复杂得多的问题。

让我们回到 数字世界中的现金交易系统--比特币 文中那个村子里。村民们每个人都有一本账,当有交易的时候,就大声广播到全村所有村民,收到广播的村民们在自己的账本上记录交易内容,完成账本的同步统一。每个村民就像相于一个拜占庭将军,但村民数远远多于将军的数量。假如,村里有100个村民,按照前面拜占庭将军问题中的方法,一笔交易每个村民需要通信99次,所有村民需要通信(100-1)^2次(这还是不考虑一个村民可以同时发起多个交易的情况)。如果村子发展成地球村,那通信数量将是天文数字。很明显,当村民达到一定数量,前面的方法就已经无法解决问题了。

我们再来分析一下更复杂的问题:我们知道通信距离的远近或通道的拥疏,会造成延迟时间的不同。如果账本上A村民未花费的余额有10元,但他同时广播支付给B、C各10元,由于延迟问题,有的村民先收到A支付给B的交易信息,有的村民先收到A支付给C的交易信息,那村民是记录哪一笔交易呢?全村共同维护的账本怎么统一呢?

中本聪在比特币中的解决方案

假设地球村的村民都来到了2009年,每个人都用上了电脑和互联网。中本聪说,我制定一些协议规则,我已经写在了点对点电子现金系统程序里,你们只要在电脑上运行,就可以安全的在网络中使用电子现金来交易。

这种网上的电子现金叫比特币(bitcoin),记录比特币交易数据的电子帐页叫区块(block),把帐页按时间顺序像链条一样连起来就成了区块链(blockchain),每一个运行比特币电子现金软件的电脑称为一个节点(node)。

1.谁来发行

比特币总量2100万枚。
平均每十分钟记一次帐,也就是增加一个区块。
每记一次账也就是增加一个区块,程序系统自动发行50个比特币奖励给记账节点。
每增加21万个区块(大约四年),奖励给记账节点的比特币减少一半。直到2140年,2100万枚比特币发行完毕。

这些规则都已经写进了程序里,运行在了每一个使用比特币软件的人电脑里,在不能达成95%共识的情况下,任何人无权修改。

比特币不存在超发货币的情况,这有点像黄金。黄金是非再生资源,总量固定。每年的产量除去工业用量,增长幅度低于生产力增长幅度,有通缩性质。

自2009年至今,比特币系统分别在2012年和2016年区块高度在21万和42万块时,进行了两次奖励减半。目前,记账奖励为12.5个比特币,2020年将迎来第三次减半,届时奖励将为6.25个比特币。

2.谁来记账

只有答对问题的节点才有记账的权利。
记账节点只承认最长的那条区块链。
所有想记账拿奖励的节点需要同时解一个题,谁先解出答案,谁就能把最近收集到的交易内容写入区块放到区块链上,并且广播给其他节点。其他收到广播的节点验证你的答案正确后会停止解题,并且把自己的区块链同步更新,然后继续解答下一题。
每增加2016个区块(大约二周),根据解题的快慢,调整一次题的难度,以保证平均解题时间稳定在10分钟(也就是平均10分钟增加一个区块)。

解出答案取得记账权的节点,称为“矿工”,大家争着解题的过程就叫做“挖矿”,把这些节点设备集中起来一起挖矿的地方就是“矿场”。需要解的题也不是想象中的数学难题,其实有点像买彩票,就是一种碰撞。

矿场

我们来看看是怎么解题的:现在比特币软件给出的解题难度是碰撞出一个前18位是0的64位数字(000.....)。节点验证完一个收到的广播交易数据后,会放在一个待打包的池子里,把它们生成一个准备放到链上的区块,比如这个区块的内容是“张三给了李四5个比特币”。在这个内容的后面加上一个不断变化的数字,用一种SHA256的算法对它进行哈希运算(SHA256(张三给了李四5个比特币+100101)),将运算结果和当前的难度值(前18位是0的64位数字)比较,如果小于难度值,则解题成功。

这到底有多难呢?当前比特币的算力是5279.13P/秒,相当于每秒运算多少次?每秒哈希碰撞次数=1000的5次方*5279.13,按这种运算速度,平均10分钟解出一个题。

2009年以来,比比特币价格更疯狂的是全网算力,比特币价格有多次下跌90%以上,但算力却从来没有消失过,一路增长了几十亿倍。这背后有对比特币、区块链的信仰,但更多的是对利益的追逐,是人性。

即便这种碰撞几率,也会有两个节点几乎同时得到答案的可能。这时候,它们会同时打包自己的区块,并广播出去,这就使区块链有了一个分叉。

中本聪给出的规则是“记账节点只承认最长的那条区块链”。有了分叉后先不管,下一个得到记账权的节点(连续两次同时取得记账权的可能进一步减小),如果先收到其中一个分叉节点A的广播,就会把新区快加到这个分叉链上,这样就会有一条分叉链长,一条分叉链短。以后再得到记账权的节点,都会按照“最长的链是正确链”的规则来维护这条长链,而短的分叉链中的区块会被废弃掉,那些被废弃的交易会重新打包到正确的链上。理论上认为,经过六个区块的确认,交易就不会有被废弃的可能了。

中本聪这套通过提供算力进行大量哈希运算,争夺记账权,使所有节点取得共识的机制,就是工作量证明(Proof Of Work,简称POW)共识机制。

3.工作量证明(POW)的优缺点

  • 简洁,自然,中立。

  • 安全性较高,破坏系统需要极大的成本
    只有破坏者拥有全网算力的51%以上才有可能发起攻击,算力是矿工们投入大量 设备、电力等成本得到的。攻击者需要付出全网51%上的挖矿成本才行,这基本 上等于一个中等国家全年的国防预算了,但攻击者得到利益却可能很少。

  • 区块确认时间长,不利于商业应用。
  • 每个区块大小只有1M,不利于大量交易。
  • 电力能源消耗大。

运行中本聪设计的共识机制的比特币系统,已经安全运行了9年,并带动了区块链技术的发展应用。

结束语

比特币的能源消耗问题一直被人诟病。但我们也应该看到,比特币巨大的全网算力是保证比特币系统稳健运行的重要保障,算力的增长对应的就是设备的投入和电力消耗的增加。

在一个开放的环境中,要使内部变得有序,必然带来外部无序的增加。这就像你家里的卫生,你不打扫它是不会自己变的整洁的,但是你如果打扫,必然会把垃圾扔到外面,而造成外部的无序。

工业革命以来,人类每一次大的变革,都会带来对外部环境的破坏。机器、电力的发明消耗了大量煤炭,汽车的发明消耗了大量石油,计算机和网络的发明消耗了电力,各种材料的生产过程排放了大量污染。大型商业公司、银行的服务器集群也同样消耗了巨大的电力能源。AlphaGo与人类下一盘棋都要消耗3000美金的电力。

这是仁者见仁,智者见智的问题,只有当人们从未来回望现在时,才知道这一切有没有价值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容