美文网首页
中本聪如何解决拜占庭将军们的难题

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

作者: 乱弹琴给 | 来源:发表于2018-04-05 21:04 被阅读0次

    公元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美金的电力。

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ocidhftx.html