2016年6月23日,英国经过全民公投决定脱离欧盟,简称“脱欧”。脱欧一事对整个世界格局影响巨大。相对于这样一个新出现的中文缩写词汇,在英 文体系里,也有一个专用词汇——Brexit。它是British(英国)和exit(离开)两个词的合成。脱欧的决定基于英国的全民公投。
显然,全民公投是一种达成共识的方式。所有共识的基础是语言文字,不管是人类的中文或英文语言,还是计算机世界里的Java或C++编程语言。在脱 欧结果公布6小时后,谷歌发布数据显示,英国人搜索的第二大热门问题是“欧盟是什么”,搜索量暴涨24.5倍。这说明很多人在并不知道欧盟是什么的时候, 就草率地进行了投票。当英国人通过搜索,重新理解“欧盟是什么”以后,他们发现当初所做出的投票并不能真正反映自己的本来意愿,于是,第二天,超过百万英 国人联名希望二次公投。
作为最新的区块链创业项目,The DAO(中文发音“得 道”)在2016年5月创下了人类历史上最大的众筹记录。该项目仅凭着项目白皮书,就募集到约10亿元人民币,说明大家对该区块链项目有着超级乐观的前景 预期。2016年6月17日,黑客发动攻击,利用The DAO中的漏洞,鲸吞超过300万个以太币,市值3.9亿元人民币。The DAO被盗对全球区块链产业影响巨大。在第一轮攻击之后,黑客与白帽(正面的黑客)之间发生的数轮你来我往的文字辩论和代码攻击行动,引起了广泛关注 [1,2,3]。The DAO项目能否“化茧成蝶,顺利升仙”,我们不知道。但这次攻击事件的确让以太坊的创始人Vitalik在软分叉与硬分叉的技术讨论和建议中忙了好几天, 以避免黑客把所盗取的以太币成功转移,引发了大量的质疑[4-11]。事实上,在The DAO项目众筹前、中、后不断地有相关文章指出其中的设计漏洞[14],呼吁暂时停止项目众筹。然而,由于各种原因,这些警告都没有引起The DAO项目团队的足够重视。所以,也有观点认为,The DAO事件折射出的是人性的贪婪[15],是一场本可以避免的盗窃。
作为人类社会取得共识的脱欧事件在持续发酵,区块链世界里The DAO攻击事件也在继续进行[4,5,6],中间剧情跌宕起伏,大家可以拭目以待。从这两个看似无关的事件过程中,可以发现,区块链领域里在“共识与分 叉、中心化与去中心化”的讨论变得尤为激烈[7-11]。道不辩不明,“洗洗才会更健康”。本文希冀借助脱欧与The DAO,把这几者之间的区别与联系加以阐述。
人类共识需要付出代价
共识是一个看似简单,实则特别复杂而又频繁发生的事情。人不是单独的存在,具有强烈的社会特质,相互间产生着各种联系。而且,大部分交易和交换都需要人和人之间的交流和沟通,目的很多时候就是为了达成共识。
如何才能达成共识?第一个层面是语言上的共识。人们所说的语言应该是一致的,可以是中文,也可以是英文,或者是其他任何一种语言。第二个层面是语义 上的共识。当人们说了相同的语言后,对于相同语言这种形式符号上的理解和认识,应该是完全一致的。否则,就会出现一种分歧,即语义上的分叉,导致人们对同 一个词语、同一句话的含义理解不同,类似于“鸡同鸭讲”。第三个层面是执行上的共识。当取得了一致的理解后,人们需要按照这一理解去真正执行所达成的结 论。我们往往会发现,在执行过程中往往容易出现偏差。例如,出现了之前没有考虑到的情况,为此,需要重新形成新的共识。
在脱欧公投结果公布后,有很多人希望进行二次公投,理由是,他们并不是特别了解脱欧对于英国人到底意味着什么。也就是,脱欧这个词除了字面上所代表 的意思外,对于它背后的意义和影响,人们都需要有一定程度上的认识,才有可能做出真正代表自己意愿的操作,以及最后取得符合大家意愿的共识。所以,共识是 很难达到的,分歧是常常产生的。
在形成共识的过程中,人们需要付出巨大的代价。例如,脱欧的全民公投就是件非常费时、费力的事情。首先,要全民动员起来,让人们都能够知道此事,并 对此事情有合理的认识;然后,需要组织人们进行投票操作,其次,要对相关的投票信息进行收集、整理、分类和计算,最后,得出投票数和是否脱欧的结论。看似 简单的全民公投,或者说这样一个取得共识的过程,其本身所需要付出的代价可能远远超出我们的想象。
区块链共识是人类共识的简化
区块链世界里,达成基本共识非常简单:最长的那条链代表了真理,所有的人都接受;其它分支都是分叉,都会被遗忘,就好像从来没有出现过一样。事实 上,在区块链的链条形成过程中不断有新的分叉产生的。分叉与分叉之间是一种竞争关系,因为只有最长的那支才能最终存活下来,被所有人认可,这就是区块链世 界里的优胜劣汰,也构成了区块链世界里的共识。
与共识相反的一个词叫做“分歧”。“分歧是一切问题、一切争端、一切战争的根源”。所以,葛优在《非诚勿扰》里发明并成功卖出了分歧终端机的专利。 为什么会产生分歧?其一是因为在达成共识的过程中,人们并没有形成的共识,不管是文字上还是文字所代表的内涵和外延层面上的共识;第二是形成共识之后,人 们并不按照共识机制所产生的结论真正去执行。某种角度来说没有被执行的共识决定,并不是真正意义上的共识。
在区块链网络里的各个节点,所运行的程序是一致或兼容的,即语言文字是一致的。一旦某一个最新的区块生成以后,它会被实时同步到所有或者绝大多数的节点里,也就是一旦形成共识之后,人们需要保证被严格地真正执行下去。只有这样,才能保证所有的区块链网络永远保持共识。
伴随着The DAO事件的发酵,让大家越来越多地听到分叉这个词。从技术的角度来讲,分叉又可以分为软分叉和硬分叉。使用“硬分叉”意味着将会回滚所有的交易到被盗之 前的某个时间点。使用“软分叉”就等于封闭所有来自攻击者地址的交易。简单来说,我们通过主动的分叉技术,让好人和攻击者产生分歧,让攻击者产生的恶意交 易的那个分支,不被大多数(好)人所认可。
拜占庭将军:中心化与去中心化孰优孰劣
研究计算机分布式系统或区块链的人都会讲到“拜占庭将军问题”。它是假设拜占庭将军中好人占大多数的一个经典问题。拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:
(1)欺骗某些将军采取进攻行动;
(2)促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;
(3)或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的任何之一,则攻击行动的结果都是注定要失败的,只有完全达成一致的共识才能获得胜利。
“拜占庭将军问题”是人们在取得共识过程中经常会遇到的一个现实问题。由此,人们会谈及到中心化和去中心化。如果是中心化的解决方案,无非是人们共 同选出一些人作为将军,然后这些将军来讨论、投票,直到最高统帅综合各方面因素做出最后决定。而所谓去中心化的解决方案,则是把所有的人都作为将军,每个 人都直接参与最终决策。
值得注意的是,人们常常容易混淆分布式与去中心化,甚至片面地认为分布式就等同于去中心化。事实上,分布式可能是中心化的,而集中式也可能是去中心化的。例如,要求所有选民到同一个地方进行全民公投。
有趣的是,选出代表进行决策和全体人员来直接做决策,这两种方式最终得出的决策哪种更优?在不同的领域,从不同的角度来看,答案是值得商榷的。
中心化与去中心化下的脱欧结果
把以上问题映射到数据挖掘和机器学习领域。“全体人员”对应的是“全样本数据”。“选出代表”对应的是经过筛选的“样本数据”。“得出的决策”对应 的是“生成的模型”。出乎一般常识所预料的是,我们会发现,那些基于全样本数据所生成的数据模型,其质量可能并不见得是最高的。反而是那些基于筛选样本学 习出来的模型更为有效。原因很简单,当采用全样本时难免会引入一些额外的噪音,或者说全样本有时并不利于算法生成符合现实数据分布的模型。把一些噪音去除 之后,学习出来的模型反而更加准确。这就是人们为什么在数据建模前经常需要做数据清洗操作的统计学原理。
这种差异性在最近的脱欧事件中表现得尤为明显。我们可以看到,在英国北部和南部的分歧非常明显。北部的苏格兰和爱尔兰大部分地区非常支持留欧(黄 色),而在南部地区的大多数人选择脱欧(蓝色)。从全体英国人(全样本)来说,选择脱欧的人占据了大多数。然而,在这个过程中,局部特征和全局统计之间的 矛盾非常明显。那么,这个最终的决定应该是怎样的呢?如果用中心化或者去中心化的方法,得出来的结论可能完全不一样。
当然,我们不能据此就否定去中心化。在区块链领域,去中心化的主要优势体现在支持“点对点”的直接交易,以众多弱信任节点构建强信任关系。而在中心 化的解决方案,中心往往成为整个系统的“瓶颈”,并成为系统最容易遭受攻击,牵一发而动全身的薄弱环节。为了让中心具备足够的处理能力、吞吐量、安全和可 靠,人们往往需要购买非常昂贵的设备。
软硬分叉与去中心化并不矛盾
那么,分歧或者分叉与去中心化是一种什么样的关系呢?二者之间的确没有必然的联系。从The DAO事件上来看,由于分叉的建议是Vitalik为代表的以太坊基金会呼吁的。所以,人们可能会认为“这不是形成了新中心吗?”但是,需要注意的是,这 种呼吁和倡导和真正意义上的中心化是有区别的。毕竟不是以太坊基金会做了这个呼吁之后,整个以太坊系统就需要或者必须按照这种方式来运行。事实上,人们是 否真的进行软分叉或硬分叉,取决于在所有参与建设和运营以太坊网络中的每一个人[12]。正如Vitalik在公开回应中所表达的,“我不会阻止也不会反 对另一方在公开场合宣传他们的观点,甚至是游说矿工来抵制这个软分叉。在这件事情上,我会坚决的不与任何站在相对的另一方的人进行争辩。”
还有另外一个人们并不太理解的讨论,在The DAO事件的过程中,有非常多的关于“以太坊区块链是不是它所标榜的去中心化的网络”,甚至有“以太坊区块链停止”的传闻。因为,比特币矿机和矿池的出 现,让原本去中心化的比特币设计,出现了算力中心。这些算力中心对于比特币网络的影响巨大。所以,以太坊希望进行一种新设计,考虑更多去中心化的手段,降 低未来有人专门设计、制造以太坊矿机的可能性。它采用的原理非常简单,就是让基于以太坊区块链的区块计算必须基于比较大的内存。现有的,可直接在比特币系 统上进行Hash计算的矿机都没有办法进行这样的大内存计算。从而,让制造以太坊矿机的成本变得非常高,尽量避免中心化的挖矿方式。
当然我们必须得客观地看到比特币和以太坊的生态体系对比,目前来说比特币还是占据了压倒性优势。从Hash算力角度,比特币当前网络的平均算力约为 1,500,000TH/S,以太坊算力为4TH/S,有4百万倍的差距。对于比特币来说有矿池过于集中的问题,有国内专家很乐观地看待这件事情。一个事 实是,绝大多数的比特币矿池是建设在中国的。这对于中国提高在比特币虚拟世界的影响力是有帮助的。当然这是另外一个话题。
个人认为,绝对的中心化和绝对的去中心化都是不可取的,需要根据具体的场景找到一个适当的平衡。尤其是,现在火热的区块链,更多的都不是基于比特币现有的区块链设计。比特币的价格回归,某种角度来说是由于人们对区块链技术的前景看好。
The DAO的安全警示在中间层和应用层
另外一个在The DAO事件中人们所热烈讨论的话题就是安全性问题。所有的安全性都是需要分层次的。从下图可以看出,在以太坊生态体系中,最底层是以太坊虚拟机EVM。中 间层是支持应用编程所需要的编程语言或脚本,像Solidity、Python、Go,等等。最上层就是由Solidity等语言所编写的各种应用程序。 例如,The DAO就是属于一个以太坊的应用程序。这个架构类比到我们现在所熟悉的IT生态体系,最底层是人们所熟悉的各种操作系统Windows、Linux、 UNIX,等等。例如,如果是手机生态系统,其对应的是苹果的IOS和安卓的Android系统。中间层是各种各样的编程语言,比如Java、C++、 Python,等等。最上层是各种应用程序,比如,像淘宝、微信等。
有了这个层次划分之后,就很容易看出来问题到底出现在哪里。事实上,The DAO被盗和以太坊EVM之间没有必然的联系。这就好比,在使用淘宝或者微信时出了一个安全性问题,例如莫名其妙地死机了,我们并不一定能够直接怪罪到 Windows或者IOS上。当然,由于底层系统自身的漏洞,也会造成上层应用程序的安全性问题。所幸的是,在The DAO事件里,安全漏洞并没有出现在底层的EVM,而是基于Solidity编程语言的一个递归调用漏洞。这好比是Java语言上出了一个bug,而导致 淘宝或者微信程序的死机,这个安全性问题与Windows或者IOS并没有关系。
结语
众所周知,我们不能由于汽车在马路上行驶,偶尔撞伤了几匹马,而中止汽车工业的发展。人类社会进步如此,区块链虚拟世界也一样。因为,我们在探讨未来。
后记
无独有偶,把脱欧与The DAO这件事情放在一起讨论的并不只我一个。大家都不谋而合了讲到了这样的问题。这篇文章并没有讲太多的技术细节,希望从宏观层面上对“共识、分叉、去中心化与安全”给大家一个解读。难免对一些细节进行了简化,以便于理解,敬请批评指正。
参考文献:
1. [全纪录] 震惊全球的The DAO黑客事件全程回顾
2. [ChinaLedger发布] TheDAO被攻击事件考察报告
3. The DAO 合约攻击信息汇总
4. The DAO,可盗;等侠到?”白帽攻击”后的感想
5. To Be Or Not To Be —— 记在TheDAO事件之后
6. DAO可盗,非常道-惊天魔盗团和以太坊激战史上最大众筹
7. The DAO攻击不仅危及以太坊,同样还有R3区块链联盟
8. 区块链峰会现场报道——以太坊开发者:DAO自身有问题 以太坊无法杜绝这类BUG
9. 法治是拯救DAO的根本
10. Circle:TheDAO事件证明了以太坊还处于‘产品测试阶段’
11. [数字货币]The DAO 事件,区块链征途上的一场暴风雨
12. DAO战争:矿工请选择
13. Cryptape | 2.共识算法,区块链的引擎
14. 暂时停止DAO的呼吁书(中英文)
15. 专访Bloq首席执行官Jeff Garzik:贪婪是造成The DAO悲剧的原因
声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。