进入 2019 年,加密货币市场依然低迷,「公链」危机却接踵而至,「去中心化应用」(Decentralized Applications, DApps)一时间成为熊市寒冬里的希望,不断有各种自称去中心化应用的博彩类游戏日创千万交易流水的消息传出。 那么,究竟什么是 DApps 呢?

非常不幸的是,DApps 也许是继「区块链」之后又一个定义不明、令人费解的词汇。随便 Google 搜索「DApps」,第一页几篇阅读量不菲的文章所罗列的什么是 DApps 的观点都是充满了各种误解。而自称 DApps 的各种赌博、资金盘类应用让很多人失望,难道被行业吹捧为未来的应用就是这些东西?

顾名思义,「去中心化应用」的最大特点应该就是「去中心化」,但是什么是「去中心化」本身就让人迷惑。如果连什么是「去中心化」的概念都模糊不清的话,讨论去中心化有什么好处,为什么要去中心化,以及怎么开发「去中心化应用」就非常困难。

我们一直生活在「去中心化」的世界里

其实,我们一直生活在「去中心化」的世界里,每个人都是独立的个体,我们的大脑并没有像科幻电影《黑客帝国》(Matrix)描绘的那样连接着「母体」被其统一控制,但是我们却可以成功地交流、分工和协作。

个体在去中心化的世界里能够协作,关键在于个体之间能够互相「通信」 和产生「共识」。人和人之间可以通过听觉、视觉、触觉等感觉进行「通信」,我们的语言文字就是一种「通信协议」,我们通信产生的认知中有一部分形成了「共识」。人类共识中的「时间」是不以任何人意志为转移、对所有个体同步并不断前进的尺度,一旦过去就不可改变。区块链,则是迄今以来计算机系统结构里最接近人类社会的一种设计。按照这一思路理解,你会发现两者有惊人的类似之处,最大的区别是现实世界没有一个可以查阅的公共「账本」,「有据可查」的都是时间长河中一些人为记录的片段。

从现实世界去中心化运转方式,我们毫无疑问能够建立「去中心化」可行的信心,也更容易认识和理解「去中心化」的确能解决相当多的问题。无论系统如何设计,最终到达用户那里的时候,任何信息还是不可避免地回到人类「去中心」的大脑之中。

通过观察人类社会、语言、文化、城市、国家的形成和变迁,可以帮助我们思考和决策。在 ArcBlock 产品设计过程中,我们始终这样分析问题和辅助设计,例如设计经济模型时,我们研究城市经济学来汲取灵感和参考。

「中心化」和「去中心化」是相对的

「中心化」和「去中心化」是相对的, 而且存在从不同角度观测引出不同结论的可能性。就以比特币为例,「比特币是去中心化的」、「比特币是一种去中心化的加密货币应用」,这可能是业内高度一致的共识。

从比特币的网络拓扑结构来看,比特币的节点非常多而分散,PoW 的「挖矿」机制导致攻击比特币需要有超过全网 50% 的算力,少数节点的被攻击、崩溃、或被关闭,都不会影响整个比特币网络的安全和正常运行——这说明比特币网络是去中心化的。

然而从比特币的软件开发和发行角度而言,只有 Bitcoin Core 团队发布的比特币新版本代码被公众认可接受,虽然他们团队最近公布了他们如何采用系列措施确保代码发布的流程安全可靠,并且采用开源的方式让人人可以参与贡献、人人可以分叉后修改,但是从软件发行升级角度来看,这是比较中心化的。

从比特币作为一个应用来看,它被设计为一个「点对点电子现金」,比特币的钱包地址由用户自主产生,不需要任何人发放和批准,没有私钥任何人和组织都无法夺取用户的比特币。比特币的转账不需要任何第三方的介入,其他任何人和组织无法禁止或篡改交易。比特币的交易记录在比特币的区块链上永久保存,没有人能够篡改、删除和隐藏。这说明比特币本身是一个真正的去中心化应用。

耐人寻味的是,正是因为大众认可比特币的网络高度去中心化,作为一个应用高度去中心化,导致大家都认可比特币这个网络服务——全世界只有一个比特币。从这个角度来看,比特币又是高度中心化的。这就非常有趣,当一个系统从某个角度高度去中心化后,从另一个角度看可能正是其他角度的去中心化使得这个角度又中心化了。因此任何「中心化」和「去中心化」的划分和定义都不是绝对的,而是相对的,甚至是不断演变的。从不同维度去审视,去中心化和中心化其实是错综交织的。用这个角度来观察我们人类社会的语言文字,就会发现它们整体上非常「去中心化」,但另一个角度却非常「中心化」。

「去中心化应用」的前世今生

计算机软件应用的发展过程就是这样一个「中心化 - 去中心化 - 再中心化 - 再去中心化」的演变过程,一如辩证法所描述的事物经历「肯定 - 否定 - 否定之否定」、螺旋曲折上升的发展变迁过程。

最早的计算机软件毫无疑问是「单机」软件。字符终端和分时系统的出现,让一台处理能力较强的计算机可以带着好多台字符终端让多人同时操作。那时的软件应用的方式相当「中心化」,那些字符终端被称为「哑终端」,它们离开主机什么也不能干,软件完全运行在中心计算机上。

个人计算机(PC)时代的降临迎来了第一批真正意义的「去中心化应用」。是的,不必惊讶,我们曾经熟悉的各种 PC「单机版」 软件某种意义而言全部是去中心化应用。在那个时代最重要的协议是「文件」,这一最古老的计算机「协议」直到今天仍然深深植根于计算机文化之中。我们无法考证最初设计发明计算机「文件」的人是如何思考的,但是可以感觉到他们一定也参考类比现实世界来设计。计算机的「文件」和「文件系统」相当大程度上来自对现实世界的模仿。有了「文件」这样的协议,分散在无数个人计算机上的应用有了共同的沟通「语言」,通过「文件」可以安装新的应用,而应用产生的结果也必须通过「文件」来传播给其他的应用。

Internet 的诞生,源自美国国防部的研究项目 ARPANET,其设计目的就是实现一个足够健壮、容错抵御甚至经受住核打击这样的灾难性后果。为达此目的,Internet 将去中心化思想根植于设计理念之中,很多早期的互联网协议,包括 TCP/IP 都是以去中心化思想为基础来设计的。互联网的早期应用也体现出强烈的去中心化,不仅仅因为互联网设计的去中心理念,而是在于当时大量的 PC 软件本来就是「单机」的,其网络化的第一步,最现实不过的就是用网络可以更好地交换「文件」,这比通过磁盘、磁带要效率更高。

最早一批使用网络的应用,有相当大比例建立在「网络文件交换」的基础之上,流行至今的 HTTP 协议也不例外。当用文件交换这种方式越来越不能满足需求的时候,一种称为「客户机-服务器架构(C/S 架构)」 的网络应用模式开始流行,这出现在前互联网时代,以企业应用为主,而且这种架构至今仍然没有过时。C/S 是从「去中心」变得「中心化」一些的演进,但是每个 C/S 架构的系统,客户机和服务器之间基本都「讲」着不同的「语言」(协议)。浏览器诞生之后,人们开始意识到浏览器就是一种能理解更普遍标准的「语言」(HTML)的通用客户机,这使得应用可以更加中心化,从而更容易开发部署维护,于是「浏览器 / 服务器架构(B/S 架构)」这样一个更为中心化倾向的模式开始流行。形成这一趋势的一个重要原因是网络带宽和计算机的处理能力不断增加,价格却在不断下降。

互联网应用的中心化演变之路

「协议」是去中心化应用的关键。在 PC 时代,让如此多的个人计算机软件能够去中心化的最重要协议就是「文件」,而「文件」这种协议直到今天和未来都还将长期延续下去。互联网时代的最重要的协议是 TCP/IP 协议族以及构建在其上的更多应用协议,这些开放的协议使得全世界的开发者一起构建了今天的互联网。

顺便说一下,有不少人认为「去中心化应用」必须「开源」,我认为这是个误解。正确的理解是,去中心化应用的「协议」必须是开放的,而这些协议的实现,以及协议以外的事情,开源与否其实并不重要——一些场合可能适合开源, 而另外一些场合也许不开源更恰当。TCP/IP 协议发展起来的时候,「开源运动」还没有诞生,但是各方非常注重协议和标准的设计(早期的软件设计由于资源有限比今天往往更为严谨和准备充分),那个时代的以 RFC (Request for Comments,征求意见)形式的协议制定,是民主、去中心化设计软件的优良传统。 直到今天,这些 RFC 定义的很多规范和协议还影响着我们的日常每一天。

是什么导致了互联网应用的逐渐中心化?

封闭的用户体系

「互联网思维」的发展模式使得各家公司都试图大量获得「用户」,收集各种用户的资料信息,再从利用这些用户数据进行广告推广来获益。这使得各家公司都排他性地抢夺占有用户,都试图把用户尽可能长久地锁定在自己的系统平台之中。

重复造「轮子」形成竞争壁垒

大量重复造「轮子」,并用这些互不兼容的轮子来形成用所谓的「竞争壁垒」,这其实严重违背 Internet (互联网)和 Web (万维网)最初的精神,但如今却成为了互联网公司最常见的竞争手段。结果导致我们手机上有 10 个不同的消息应用、10 个不同的银行应用、10 个不同的电影应用 … 而它们的作用其实几乎是一样的,只是服务商不同。

用户锁定、数据锁定

无偿或极其廉价地占有本来就属于用户自己的数据,不允许用户迁移数据或者制造各种障碍让用户迁移不便,用这种方法来「锁定」用户。用免费来作为获得用户的手段,出卖用户的数据,尽可能占用用户尽可能多的时间、注意力、带宽等来获得利益不得不成为互联网通行的商业套路。

「协议」锁定

不遵守协议、不开放协议、或只部分提供协议来制造「开放」的假象。利用「开放」的假象来获取用户, 用「不开放」的实现来增加用户迁移难度和成本,把用户锁定在自家。

2005 年涌现的「Web 2.0」运动是桌面互联网时代离「去中心化」最接近的一次。Blog 是去中心化的出版和媒体,采用的是 RSS 这样一个简单而开放的协议。当时以个人为节点的社交网络蓬勃兴起,FOAF 协议、Microformat、OpenID、OAuth 等这些都是在那个时代兴起的开发标准。

不幸的是,当时和后来的行业巨头 Google 与 Facebook 策略性地扑灭了这场去中心化运动,反而把互联网的中心化推向了极致。而中国的巨头们更是乐得建立起一个个垄断封闭的平台。如果说,微软在当年的浏览器大战中利用垄断地位击垮了网景是天下皆知、昭然若揭的阳谋,那么后来以 Google 和 Facebook 带头的这场绞杀则是被完美阳光掩盖的阴谋,开发标准、去中心化,皆死于他们之手,大家却一直觉得他们创新、开放、贡献。

当然,Google、Facebook 也贡献了不少开源的产品,有很多到了区块链时代又成了可以反击他们的利器。比如 Bitcoin 用的 Level DB 是 Google 的作品, 以太坊和 ArcBlock 采用的 RockDB 是 Facebook 的作品。

区块链带来的「去中心化」演变之路

互联网的发展步步走向中心化,既有技术进步的原因, 也有商业发展、用户习惯演变等带来的结果。而区块链技术,也是在计算机和互联网技术不断发展成熟之后才进化而成的,如果没有互联网带宽的飞速成长、计算机性能的飞速提升, 区块链不会出现,也没有实现的基础和能力。

天下大势「分久必合,合久必分」,区块链带来的演变是应用再一次重新向去中心化的趋势走去。除了技术的发展,还有其他的因素和事件:一次次的用户隐私数据泄密带来的巨大损失,Facebook 等大公司对隐私问题的漠视,欧洲 GPDR 法案的执行等等,让越来越多的人再次意识到「去中心化」的价值。

区块链和 DApps 能真正成功,恰恰要根治互联网中心化垄断的四大痛点:

1、统一的、自主的、去中心化的 ID;
2、数据完全属于用户, 用户拥有自主权;
3、大量地重用轮子,而不是不断再造;
4、完整和全面的开放协议、尽可能保持向前兼容(不产生无谓的分叉)。

「去中心化应用」和区块链、通证之间有没有必然关系?

如果认可我之前的论述, 你一定也会同意 DApps 和区块链、通证其实没有必然的联系。但是真正让 DApps 这个名字耳熟能详的,恰恰是区块链和通证。

讽刺的是,今天大多数宣称自己是 DApps 的应用根本没有任何去中心化的属性,大部分应用只是使用了区块链的中心化应用,它们大多只是利用了区块链智能合约的一些属性。

比如 CryptoKitties 这样的游戏类应用,它只是使用了以太坊 ERC 721 的特性,而整个游戏的前端、设计都和一个传统 Web 游戏并无太大区别。其最大特色是用以太坊的智能合约来保证这些加密猫的唯一性和独特性。那些赌博、博彩、资金盘游戏,也是利用的智能合约让用户误以为游戏「公开透明,无人能幕后操纵」而参与其中,殊不知相当多的这类游戏由于代码设计的问题,或者区块链技术不成熟的问题等,更易遭受攻击被骗取窃取加密资产,这些游戏其实比传统游戏更不合理、公平,甚至更不安全。我相信未来一定会出现非常成功、可玩性非常强、且充分利用区块链的去中心化游戏,但绝不是今天这些公平、安全和使用体验都差得可怜的家伙们。

「去中心应用」为什么还没有引爆?

任何新生事物的「引爆」都少不了漫长而黑暗的前夜,很多人只看到了爆炸增长的阶段,往往忽视了爆炸所需势能的缓慢积蓄过程。

iPhone 问世之前,智能电话的概念已经出现了超过 10 年的时间。2018 年引爆全世界的比特币的理念诞生于 2008 年,而在此之前至少还有 10 年以上不同的设计尝试没有取得成功。

彼得·蒂尔在其著作《从 0 到 1》里指出一个新产品要能获得高速增长,必须比现有的方案好 10 倍以上。现在的 DApps 所依赖的区块链环境,还非常原始。EOS 的确是比以太坊更「快」了,但是不是更「好」的还是更「坏」的方案,还没有公论,而其他复制模仿以太坊的公链更需要时间和结果来证明它们究竟能否奏效。

诚然今天的区块链技术还处于婴幼儿期,尚未产生成熟的技术,尤其是应用平台,有能力来承载成功的去中心化应用。 但是,ArcBlock 以及其他技术团队正在日以继夜地努力,尽快让这种困境变成历史。

「去中心化应用」必须因打破规则而获得不对称的竞争优势

对于普罗大众来说,他们不会因为「去中心化」而爱上一个应用,只会因为这个应用解决了他们的问题而使用它。

因此应用绝对不能为了「去中心化」而「去中心化」,「去中心化应用」的关键是找到一个需要解决的问题,这个问题用「去中心化」的方法来解决比其他方案好 N 倍,或者因此而获得了不对称、类似「碾压」的竞争优势, 或者因此而打破了现有的规则。如果能够回答上面的问题, 那么恭喜你, 这个「去中心化应用」不火也很难。

例如,比特币作为一个点对点的加密货币,打破了无数条规则,也解决了一些切实的痛点,因此比特币和 Paypal 等传统的数字货币或支付相比,具有不对称的竞争优势。虽然比特币很慢,用起来很麻烦,但在过去的 10 年里还是得到了飞速的发展。

今天的计算机应用、互联网应用,其实离完美还有很远的距离,如果我们能用「打破一切规则」的角度来思考,可以发现非常多切实可行的场景可以用去中心化的方法更完美地解决。有些问题,其实一直是人们的梦想,但在区块链诞生之前这些梦想在技术上还没法实现,因此我们为了实现设计了各种妥协方案,有些妥协如此成功,以至于大家忘记了这其实是妥协的结果。然而,如今技术可行,正是去解决这些问题的时机。

「去中心化」与否,不是大众用户关心的问题

「去中心化」更多是产品经理、开发者所关心的问题, 而不是用户关心的问题。很多大众不明白也不关心什么是去中心化,以及是不是去中心化,而只关心能否解决他们的问题以及会不会使用。

「用户体验」是否重要? 当然重要,然而,这并不是根本,用户不会只是因为「用户体验好」才爱上一个应用, 但是如果一个能解决用户痛点的应用还同时具有好的用户体验, 那么这才能称为爆款应用。

因此作为「去中心化应用」的开发者和产品经理, 应该把注意力的焦点首先聚焦在发现问题,解决问题上,然后才是用户体验,尤其是如何才能让大众用户方便地进入这个世界,使用新的产品解决他们的问题。

未来所有的应用都是「去中心化应用」

未来可能并不存在 DApps,因为所有的 App 都会是 DApps。

DApps 的核心基础并不是区块链,虽然区块链技术对未来 DApps 的实现非常重要。 并不是用了区块链的 app 就是 DApps,今天大多声称 DApps 的其实只是用了区块链,并不去中心化。

为什么需要去中心化应用? 因为它能带来一些中心化应用无法企及的能力和场景。 去中心化应用不应该为去中心而去中心, 有些应用天生需要中心化,其中心化解决方案无害而且性能更好,因此去中心化应用是针对那些真正有去中心需求的场景下天然的选择。

为什么今天没有什么去中心化应用?是因为你没有意识到我们其实生活在一个去中心化的世界里,我们用的无数东西本来就是去中心的。人类社会就是去中心化的存在,正如我们呼吸的空气很长时间人们并不知道他的存在。

另外一个原因就是技术过去不够成熟,10 年之前,计算机科学家和工程师没有办法给出一个成熟的方案。这就是无数计算机科学家、工程师、创业者对区块链技术如此兴奋的原因,他们并不是因为加密货币可以炒作赚钱而兴奋,而是因为发现了新的处女地,可以披荆斩棘重构世界而兴奋 … 上一次有这种机会还是在互联网早期的时候。

去中心化应用的核心基础并不是区块链。那么,到底是什么?首先是自主个人身份,你的身份、关系、数据、资产 … 都是被你自己控制而不是被任何其他人控制;其次是点对点的数字资产流动(加密货币以及其他通证),不需要中间人,不需要别人批准; 然后还需要数据可迁移,你的数据你做主,想让谁用其他人才能用。这几个重要基础,只有今天计算机技术发展到区块链阶段才有实现的可能,而这在区块链出现前实际上是无解的。