去中心化应用的难题 | 共享账本 02
基于区块链共享账本的、去中心化的应用,在像互联网应用一样被广泛采用之前,需要克服几个难题。
什么是去中心化的应用?
我们在之前一篇名为“区块链的意义”的文章中讲到,区块链可以成为人们合作问题的新解,降低交易费用,促成许多之前不能实现的经济交换和协作。
用户在使用去中心化应用(Decentralized Application,下文将用 DApp 来指代)时,通常涉及某种形式的价值转移。这种价值转移的契约,使用区块链来强制实施,不需要专门的第三方(中心化)机构。
这是 DApp 的核心特征。如果不具备这种特征,或者没有这个需求,那么:对它来说,中心化是更好的选择,更有效率,也更便宜。
比特币本身就是 DApp,它是一个去中心化的支付系统,它有自己的去中心化账本 - 自己的区块链;我们发起的 GeneBook - 基于区块链的基因数据分享平台 - 也是一个 DApp。
它们都面临同样的难题。
难题 1:激励相容的机制
去中心化意味着 DApp 在原则上由所有用户共同拥有,不属于某一个或者某一类特定的用户。
但 DApp 的运作,往往仍然需要某些用户投入外部资源。而这些资源的使用者,可能是其他用户。为避免公地悲剧,DApp 需要恰当的规则来防止用户对资源的滥用,同时激励用户的投入。
例如,比特币作为一个支付系统,它的去中心化账本的维护依赖于所谓的“矿工”。矿工投入计算资源参与共同记账。
根据所投入资源的比例,新产生的比特币会奖励给这些矿工。这种规则能激励矿工投入资源,同时有利于整个系统的价值最大化。因为投入的计算资源越多,账本的安全性就越高,比特币的价值也就越大。
因此,从这个角度上说,这是一种激励相容的机制。理性参与者根据自身利益行动,他们的行为恰好和整体利益最大化的方向一致。
看起来似乎简单,但比特币在这方面的设计也并非没缺点。
根据比特币的机制,为了降低投资回报的不确定性,理性矿工都会通过参与矿池来挖矿。而矿池实际上是把参与者的计算资源整合成单个记账者。
也就是说,如果完全从理性最大化出发,整个比特币网络最后应只剩一个以矿池身份存在的记账者。这与比特币的去中心化价值是相违背的。
现实中虽然没有出现这种极端情形,但事实上也的确只剩下少数几个有影响力的矿池。比特币的发明人中本聪,当年应该没有预料到这种结果。
有些 DApp,包括我们的 GeneBook,由于参与者类型更多,交易方式也更多种,情况就更复杂。
GeneBook 中,基因数据的单次有偿使用,可以通过市场交易解决,这一点很直接。
但 GeneBook 依赖的去中心化账本的记账需要成本,基因数据长期闲置的存储也需要成本,这部分资源谁来投入、如何激励,是一个问题。简单的方案是让基因数据的所有者平均负担。但数据积累有规模效应,越早进入的数据,对系统整体价值的贡献就越大。为了激励早期用户,似乎应设计一种非线性的分配方式,让后期进入者,共同补贴早期基因数据的存储。
在 DApp 中设计出激励相容的机制,是个很大的挑战,这也是所谓的通证经济(tokenomics)的核心。
难题 2: 治理制度
正如我们之前的文章里讲到,当规则、契约被编写进区块链后,我们可以依赖它来不偏不倚地实施规则和契约。
但是,规则和契约都是人设计的,不可能完美。
首先,规则有可能要修改。
无论人们投入多少心力和时间在事先的设计上,一旦开始使用,难免需要修改。正如一句军事名言,“枪响后,任何战斗计划都会变成历史”(No plan survives first contact with the enemy)。
比特币就遇到了这样的问题。
在比特币协议中,有两个重要参数:区块的大小,区块产生的间隔。它们跟比特币网络的安全性有关。当一个区块产生之后,它需要尽快被扩散到网络中的所有节点。如果区块太大,或者区块产生的间隔太小,都有可能会使区块链产生不一致(用行话来说,分叉)的概率增大,影响比特币账本的安全性。
但如果区块太小,或者区块产生的间隔太大,又限制了比特币网络每秒能够处理的交易数量(吞吐量)。
对比特币规则(协议)进行适当迭代和修改,是合情合理的。
但比特币并没有一个正式的治理制度。
比特币社区的权力(power)掌握在不同的群体手中,如软件的核心开发者,矿池,挖矿设备的制造商,持有大量比特币的个人或者公司,等等。
对规则的修改或者补充,很难能平衡所有人的偏好。因此,比特币的主要改动都伴随着长久在社交媒体或论坛上的论战,而且并不一定会有结果。甚至,由于关于区块大小的意见分歧,比特币网络分裂成了维持原样的比特币(BTC)以及主张加大区块的比特现金(BCH)。
如果没有良好的治理机制,DApp 便很难自我迭代。然而,我们都知道,一开始就被完美设计的事物不会出现在真实世界里。
其次,契约都不是完备的。
如果被治理的是一个去中心化的智能合约平台,如以太坊,就要考虑的当用户之间的契约的设计或实现出现重大缺陷时该如何处理争端。
2016 年基于以太坊的 DAO 项目募集了当时价值一亿五千多万美元的以太币,但因为智能合约在代码层面的缺陷,导致这些以太币被“窃取”。
由于影响太大,以太坊社区决定修复这个问题,也就是说,把账本退回到之前的状态。这个决定,也导致了以太坊网络被分成了两个,其中一个修复了账本(ETH),另一个是原来的版本(ETC)。
虽然导致失窃的原因是代码缺陷,但 DAO 智能合约在设计上也存在很多问题。如果我们承认在大部分情况下,完美的契约是不能被制定出来的,我们就要考虑这种类型的治理问题。
以上两类问题,都意味着无论是作为底层基础的区块链账本也好,基于区块链上的 DApp 也好,虽然无人值守,但也需要有人定期维护。
维护者做决定的程序以及做出来的决定,是否被所有用户认可,有无损害 DApp 的去中心化、去第三方的性质,则依赖于良好的治理机制。
这并非区块链或者技术所能解决。
难题 3:底层账本的扩容问题
众所周知,比特币网络每秒只能处理不到 10 笔交易,而 VISA 每秒可以处理超过两万笔。
基于去中心化账本实现互联网级别的应用,目前看来,似乎是天方夜谭。
去中心化账本扩容遇到的困难主要来源于两方面。
首先,账本的去中心化共识很难快起来。
因为去中心化网络中的节点需要对账本的状态达成共识,这就要求账本新增的记录要在网络中扩散,让所有参与记账的节点都收到并确认之后,才能继续记账。由于网络传输速度的限制,在这方面的性能优化有无法突破的瓶颈。
我们这个专题的下一篇文章会进一步讨论到这方面的细节。
其次,太大的账本,普通节点处理不了。
假设通过优化共识机制能大大提升每秒处理的交易数(吞吐量),如果账本中历史交易量太大,会让节点在处理时遇到困难。因为节点验证交易的可靠性时,通常需要依赖账本的历史记录。
如果验证账本的节点,需要依赖于专业的硬件设施才能工作的话,那么这个共享账本可能就会弱化成分布式部署的云服务了。
因此,对于我们现在看到的那种区块链,扩容问题似乎没有解。
业界对此有相近思路:与其用统一的全局账本,不如分成很多个账本。也就是说,要验证任何其中某一类交易,节点并不需要整个账本,只需要其中的一部分。不同账本之间的交易互不影响。
分片,分层,以及统一共识机制的多链架构,基本上都遵循这种思路。这一类方案,也同时解决了吞吐量的问题,因为网络不再对一个账本进行共识,而是并行地对多个账本进行共识。
这些方案也有它们自身的困难和对性能提升的限度,这一点我们会在这个专题的其他文章中探讨。
难题 4:软件开发
跟上面提到的那些问题相比,这好像不应该是一个难题。
但事实上,开发基于去中心化共识的软件所要付出的成本,远远大于同样功能的普通软件,而且随着复杂度的上升,成本增加的速度更快。这可能会是一个阻挠去中心化应用的创新和进步的一个关键问题。
当我们开发基于去中心化共识的软件时,互联网产品开发中的“快速行动,小步迭代”(如 Facebook 的那句著名的 “Move fast and break things”)就不再适用了。
软件要被部署到所有参与共识的节点上。一旦出现缺陷导致数据错误,修复时必须协调共识节点来完成。我们上面讨论治理制度时知道,实施这种协调,要么需要付出很大的成本,要么是不可能完成(也就是成本无限大)。
因此,这类软件的开发过程,不能依赖快速迭代。
众所周知,当我们所指的是有一定规模(比如十万行代码以上)的软件时,要保证零缺陷(bug-free),在真实世界里几乎是不可能的。越是逼近零缺陷,成本的增加越快。
也许在未来我们能够出现开发零缺陷软件的办法。但在目前,我们在构建 DApp 时,需要同时考虑软件的复杂程度、可容忍的缺陷率、造成数据损害时的修复成本。
这个现实可能是阻碍 DApp 的创新的一个重要因素。
难题 5:用户体验设计
用户体验受到的关注要小很多。因为现在区块链领域的主导者都是密码学、分布式计算的研究者、工程师。
但我认为,DApp 是否能被广泛接受,这也是一个关键问题。
首先,人们并不擅长使用密码学工具。
在当下的区块链应用中,用户对某个资产或者身份的掌握,都依赖于密码学中的非对称密钥。如果他丢失了私钥,也就不再拥有该资产或者身份。
工程师们发明了很多工具,来帮助用户管理私钥。但这些方法,要么用起来仍然很麻烦,要么在安全性上面进行了妥协。
无论如何,单单使用私钥来对应用户的身份,跟大部分人的习惯是相悖的,特别是在互联网已经让我们熟悉了“忘记密码”这个功能的情况下。
关于这一点我不知道有什么好的解决方案。
其次,我们要让用户感知他所用的 DApp 的可信,这一点并不容易做到。
在前文已经讨论过,相对于普通的互联网应用, DApp 会在各个方面带来额外的成本。付出这些成本是为了建立一个可信的、不通过中心化第三方的契约实施方案。
用户在使用 DApp 的过程中,如果不能清楚地感知到这一点的好处,或者说,不能理解这些可信度,那么 DApp 的说服力就降低许多。
比如,在比特币交易中,当我进行了一次交易后,我会希望知道这个交易是否已经被确认,是否已经“成为账本中的事实”。如果还不是的话,有多大概率会成为事实,还要多久会成为事实。
在使用一个 DApp 中,作为一个非常谨慎的用户,我会希望知道它依赖的网络有多去中心化(有无被少数几个参与者控制),网络账本最近的运行状况怎么样,有没有异常。
这些信息能否有效融入用户体验中,是这类产品被人们广泛接受的关键。
以上这五个难题,是我们设计和实现 DApp 时无法避免的。
由于这些难题的存在,至少目前来看,DApp 适用的解决场景是有限的。去中心化不是目的,只有当通过区块链取代中心化的第三方能降低成本或者实现本来不可能的协作方式时,去中心化才是值得的。
接下来,针对本文所述的每一个难题,我们都会通过一系列专题文章来展开讨论。
这个专题关注的是账本的共同记账问题,也就是难题 3。
参考资料:
1)Vili Lehdonvirta, The blockchain Paradox
2)Jimmy Song, Why Blockchain is Hard
3)Fred Ehrsam, Blockchain Governance: Programming Our Future
4)UK Government Office of Science, Beyond Blockchain: Distributed Ledger Technology
5)Sarah Baker Mills, Blockchain Design Principles
6)Antonio Madeira, The DAO, The Hack, The Soft Fork and The Hard Fork
7)Bitcoin Wiki, Block size limit controversy