首页 资讯 正文

请关注「应用治理」 这是 DApp 的阿喀琉斯之踵

链闻ChainNews 2019年05月29日 07:23

在每个人都在谈论「DeFi」和「Staking Economy」的时候,链闻希望带领中国的加密货币社区考虑另外一个值得讨论的话题:「治理」。治理是一个社会学话题,也是一个技术话题。

最近,链闻已经连续发表文章,通过「公地悲剧」为切入口,讨论关于开放社区的治理原则治理框架。

今天,我们通过技术的视角审视关于去中心化应用的治理问题。这篇文章有些烧脑,它提出了一个崭新的视角,即从应用治理的角度来看应用该选择什么样的公链做开发。

受访者:刘毅,Random Capital 合伙人

采访 & 撰文:李画

让我们先从区块链的存在意义说起。区块链能带来的最大好处之一,是降低交易成本,重要原因在于它能够最小化信任。但如果在对去中心化应用进行升级和修改时,不是以去中心化治理的方式来完成的,显然就会破坏掉这种信任。

不同的公链对应用的治理有不同支持程度。比如以太坊不支持应用的去中心化治理,Polkadot 则支持应用的链上去中心化治理。

激进一点来讲就是,智能合约方式的应用都不支持去中心化治理,这类应用更应该被定义为可验证应用;应用链方式的应用支持去中心化治理,它们才是真正的去中心化应用

不过需要注意的是,本文只是提出了一个可供讨论的观点,并不是做出某种结论,其目的是为了探索「链上治理」这个领域的各种可能性。

就这个话题,我们邀请了 Random Capital 合伙人刘毅详细讲述他的看法

刘毅是区块链和大数据技术专家,有 20 年多种资本市场投资经验,自 2013 年初便开始投资比特币,并长期从事区块链天使投资。除了是区块链和大数据技术专家之外,刘毅还有着生物学的研究背景,这或许正是他能从「进化」角度出发对区块链进行思考的重要原因。

刘毅,Random Capital 合伙人,

清华大学硕士,区块链和大数据技术专家。

20 年多种资本市场投资经验,比特币早期投资者

区块链通过「信任最小化」降低交易成本

问:在你看来,目前去中心化应用(DApp)的发展遇到了什么瓶颈?

刘毅:为什么这么多年智能和约平台上没出现真正的去中心化应用,很重要的原因是这些应用不能被修改。应用本身不能修改、不能演进的话,就无法被「进化」驱动,也就不会带来什么革命性的东西。我们做互联网应用或者手机应用,几周就要对应用做一次升级,去增强功能或者适应新的需求。

此外,所有的程序都会有 bug,bug 不能修复就会带来一系列严重的问题,甚至会导致整个应用的失败。

问:不过我们看到也存在一些修改应用的方法?

刘毅:是的,但在区块链上,我们必须以去中心化治理的方式对应用进行修改。

区块链创造的是一个高效的市场,一个交易协议,用这个协议去参与交易的话,能够降低交易成本。交易成本是最核心的一个概念,人类的经济活动,包括互联网、比特币、区块链,它们带来的革命都可以用降低交易成本来解释。

去中心化应用是用加密技术实现的交易协议,它够降低交易成本中最大的一部分——信任成本。或者我们叫「信任最小化」,交易的参与者只需要信任整个加密协议网络,不需要信任交易对手。

而「治理」就是修改、完善加密协议的过程。治理是必须的,否则加密协议就只能是僵死的。但如果治理是中心化的,加密协议就会跟中心化互联网巨头的业务没有区别;只有治理是去中心化的,才能最小化信任。

问:怎么理解「交易成本」?

刘毅:交易成本有很多种,从找到交易对手,到跟他讨价还价,到决定完成交易,到签署合同,到执行交易,到发生争议后的解决方法等等。为了完成这笔交易,会发生多种类型的交易成本。

货币的每一次更新换代都是因为新的替代品能够降低交易成本,这里最主要的是支付成本。支付成本本身也很复杂,它包括把货币带到交易现场交给你,你来鉴别这个货币的真伪,然后再把这个货币带离交易现场。

纸币代替铸币是降低支付成本,铸币代替贵金属货币也是,因为铸币的一个银锭就是一两,你不用称也不用剪,这就降低了支付成本。从纸币到数字货币,从数字货币到密码货币,也都是在降低支付成本。

问:密码货币是如何降低交易成本的?

刘毅:比特币早期用例一个是跨国转账、跨国支付,一个是暗网交易。在这两类交易里,它都有非常明显的支付成本的优势。在后一种交易里,比特币还能降低交易成本中的隐私暴露的成本。

所以,比特币发展起来并不是因为它是一个投机品,而是它在特定的交易场景里就是一个更好的货币。它代表的是第一代的密码货币。

问:区块链是怎么降低交易成本的?

刘毅:拿以太坊来说,以太坊提供一个图灵完备的虚拟机,你可以通过它实现可编程的密码货币,这是第二代的密码货币。

这种密码货币不仅具备比特币的优点,还能够通过可编程和自动执行这些特性,降低信任成本,而信任成本一直是交易成本里特别大的一部分。

比如你参加某个募资,打了以太到智能合约后,并不会担心得不到代币,因为智能合约里写定了,你只需要相信以太坊和这个合约就可以。

除了那种一手交钱一手交货、而且你能鉴定货币质量的简单交易以外,你都要在交易中一定程度的信任对方,或者说你要承担交易对手风险。

这个风险本身就是成本。如今在有效市场里所有的风险都可以被定价,风险大其实就相当于你投入的成本高。如何降低这个风险?只能找成名已久的大的公司交易,相信这个运营实体。

这带来的问题就是中心化。比如你要去纳斯达克上市,你就只能找高盛、摩根士丹利这几大投行,它们已经把这个业务给垄断了,其他的小玩家进不来,小玩家提供不了信任。

这时候它们作为中介就会不断地去挤压两边的利润,把自己的利润最大化,但你没有办法去把它给干掉,因为在它垄断的情况下,你没有其他方式去产生信任、创造信任。

这其实就是区块链要解决的最大的一个问题,就是去中心化、信任的最小化。从经济学角度来说,信任最小化才是区块链存在的最重要的意义

问:区块链是如何做到信任最小化的?

刘毅:智能合约就是一个协议,它是由以太坊保证执行的,只要你相信以太坊,信任这个协议,你就可以相信这件事,而不需要去相信交易对手方,这就做到了信任的最小化。

为什么相信以太坊?因为以太坊是去中心化的运作方式,你相信任何一个个体或组织都不可能去控制以太坊。比如某个智能合约募集到了 20 亿美元,它能拿出 10 亿美元去贿赂以太坊,把这个合约给改掉吗?是不可能的,这就是我们信任以太坊的基础。

那你为什么相信智能合约?因为它是可验证的

不过这种可验证性带来了矛盾:要想可验证,就不能修改、不能升级应用;不能修改应用限制了应用自身的创新和发展;可一旦修改应用,又会破坏其可验证,没法最小化信任。这就是去中心化应用的阿喀琉斯之踵。

智能合约平台上的应用修改方法

问:那么现在大家是如何解决去中心化应用的修改问题?

刘毅:其实有程序员提出了用 delegatecall() 这种模式绕开智能合约不能被修改的限制,实现应用的可修改、可升级。我在后边介绍这种方法。

因为智能合约不能被修改,目前比较多的做法就是去做一个新的智能合约,让大家迁移到这个智能合约里来

比如 Augur 的版本 2 跟版本 1 就是相互独立的两套智能合约。版本 1 市场会在 2019 年 9 月 15 号被关闭,用户如果在版本 1 上创建延续到 9 月 15 号之后的预测市场,就要受影响。

这会给直接或间接使用 Augur 的用户带来不便,还有可能造成部分用户的财产损失,以及丧失一部分网络效应。

你还会发现 Augur 版本 1 到版本 2 的升级间隔了将近 1 年时间,但其实有很多早已发现的 bug 要解决,以及新增的功能要上线。但因为升级就会伤筋动骨,所以不可能频繁升级,不可能快速迭代。

这种升级方式还有一个很大的问题就是依赖于用户对项目方的信任。Augur 是知名项目,融资规模大,用户对项目方会比较信任,不会太过担心新的智能合约的信任问题。

但是有些应用是小团队开发的,甚至是由匿名开发者开发,类似 Augur 这样的升级几乎不可信,新版本的合约无法继承老版合约的网络效应,一切需要从零开始。

问:delegatecall() 模式是如何实现对应用的修改的?

刘毅:delegatecall() 是一个函数,我们可以用一张图来说明。图中方框都是智能合约,用户对该应用的交易请求是发给代理合约 Proxy 的,Proxy 没有业务处理逻辑,它的作用是把这个请求转发给实际的处理合约 V1,数据则存到专门的存储合约 Key-value store 上。

代理合约保存着指向处理合约的指针,升级应用就是写一个新的处理合约 V2,把代理合约的指针从指向 V1 变为指向 V2,那么 V1 就被废掉了。这个变动的过程应用的使用者是感受不到的,因为数据并没有动。

现在以太坊上复杂的智能合约几乎全都采用这种模式开发,他们管这叫应用的「可升级性」,一些标准库已经实现了这种模式。

问:delegatecall() 模式会破坏信任最小化吗?

刘毅:会。delegatecall() 模式的缺点就在于它破坏了可验证性。我看了某个智能合约代码,认为可以信任它,然后我就用了,但是用着用着你把里边的一些东西给改掉了,而且改的时候是不需要通知我的。

用户要不要信任这样的应用?有两种情况。第一种是用户通读了智能合约,知道合约中哪些逻辑是可以被改变的,哪些逻辑是不可以被改变的。如果用户认为可以被改变的部分不影响对智能合约的信任,也就是说不管可变的东西怎么变,都没有破坏我们之间的约定,那信任还是可以延续的。

这个信任门槛其实很高,因为即使用户能读懂智能合约代码,也不太可能说把里面所有的逻辑分支都给理解清楚了。

这是我不喜欢这种可升级模式的原因,它把智能合约原本的可验证性给破坏了,但又没有带来新的东西。

它最后其实又回到了中心化互联网的老路上,就是相信智能合约后面的这个人或这个组织,这是用户可以信任应用的第二种情况。

比如说 TUSD 这个合约,它是一个稳定币,但它百分之百法币储备是受美国纽约金融局监管的,还定期由老牌审计所 Cohen & Co. 出审计报告。这样的话你就可以相信它,而不用去关注它的智能合约是怎么写、怎么升级的,它们的合约也确实是可升级的。

在 delegatecall() 模式下,要么就是产生高的信任门槛,使用者要能看懂合约;要么就是回到中心化信任的老路上,通过区块链实现信任最小化的方式被破坏了

以去中心化治理的方式修改去中心应用

问:如何才能在不破坏信任最小化的情况下,实现对应用的修改?

刘毅:其实已经有人在探索这条路了,比如说 MakerDAOAragon 等等,它们都是可升级的应用,但决定是否升级应用的不是某个公司或某个人,而是一个去中心化组织「DAO」。

我认为只有采用 DAO 做治理的应用才是真正的 DApp,去中心化的应用;其他的都是「VApp」,可验证的应用

问:以太坊上的应用可以用 DAO 升级,为什么说以太坊不支持应用的去中心化治理?

刘毅:在智能合约平台上以 DAO 的方式修改、治理应用会很费劲。

第一个问题是它是要先确定合约的什么地方可以修改,什么地方不可以修改的。如果 bug 出在不能修改的地方,或者需要修改原先认为不需要修改的地方,那么即使 DAO 中所有的利益相关人都同意修改,一样改不了。这是智能合约本身的限制。

第二个问题是智能合约平台本身是为了开发可验证应用的,它没有提供跟 DAO、跟应用治理相关的基础设施,也就是说,它无法实现应用的可编程的治理。

智能合约平台开发的应用都存在着上述这两个问题,但通过应用链开发的应用可以解决这些问题。

比如 MakerDAO它通过 DAO 合约进行过多次投票来调整稳定费率,已经是以太坊上去中心化治理模式的典范

但今年四月底当代码审计发现投票合约存在漏洞,可能使用户投票的 MKR 被永久锁定时,只能是部署了一个新的投票合约,并需要呼吁用户转移老版本合约中的 MKR;而且投票合约是对治理规则的定义,但其本身的升级仍然是由项目方来决定的。

所以,因为智能合约平台的限制,这些 DAO 并不能做到真正的彻底的去中心化治理。它只能是在事先定义好的治理范畴中通过 DAO 有限治理,在该范畴之外的治理依然是回到了老路子上,是以中心化的方式来做的,并不能交由社区管理。

问:在 Polkadot 上是如何对应用进行修改的?

刘毅:Polkadot 上应用的处理逻辑是用 rust 语言写的,它是编译成一个 wasm 的可执行的二进制的文件,通过链上分发给节点。

我们现在约定了一个协议或应用,用 wasm 实现了,但如果有人做了一个提案,认为应该改变某一个处理逻辑,或增加一个功能,或修改一个参数,那开发者们就可以按照这个提案去实现一个新的协议,用 rust 再写一遍,然后大家在链上进行投票,决定要不要用这个协议换掉原来的。

只要大家投票通过,这个新的可执行文件 wasm 就会下载到所有的节点上,节点发现有新的版本,就会执行从链上过来的新版本。

应用更新的整个过程都是在链上自动完成的,而且不会产生分叉。所以我们说 Polkadot 实现的是可编程的全流程链上治理

问:智能合约开发的应用和应用链的应用,在修改问题上的很大的一个区别似乎是后者是通过节点来完成修改和升级的,这有点像公链自身的升级方式?

刘毅:是的。不同的地方在于这种升级是通过 DAO 以链上治理的方式来执行的,但大多数公链自身的升级不是以链上治理的方式来完成的。

比如以太坊升级,是链下治理的方式,大家决定包含哪几个 EIP,然后确定一个时间点,大家都把新的软件换上。

如果我们做一个分类的话,就是以太坊不支持公链的链上治理,EOS 支持公链的链上治理,但它们都不支持应用的去中心化治理;Polkadot 支持应用的链上去中心化治理,Cosmos 目前只支持应用的链下去中心化治理

问:为什么说 Polkadot 提供的是可编程的治理,是链上治理?

刘毅:Polkadot 链上的处理逻辑都是可执行程序

你可以在 Polkadot 链上发起一个提案,比如调整一个关键参数,你把程序编译好后放到链上,那么首先,提案本身是可以编程的。

其次,投票治理的规则,包括谁有资格投票、投票时票数怎么记、提案通过要满足的条件等等,这些也都是程序定义的,是清晰确定的、自动执行的,大家跟随流程去投票就可以。

如果投票结果满足了通过提案的条件,这个提案的可执行程序就会通过链上自动地分发到各节点,节点发现有新的程序,就会调用 set_code 函数,在运行时覆盖原程序,执行新程序。整个的过程都是自动执行的。

据我所知,Polkadot 是目前唯一能做到在运行中无分叉升级的区块链。Cosmos 应该也会支持链上去中心化治理,但是目前没有看到它的链上升级技术。

问:能不能理解成,第一,Polkadot 上的应用修改是想改什么地方就可以改什么地方,没有限制;第二,Polkadot 平台支持去中心化治理的可编程和自动化执行。这就解决了智能合约平台上以 DAO 的方式治理应用时碰到的那两个问题。

刘毅:是的。

问:应用在被黑客攻击后,如果该应用是支持链上去中心化治理的,是不是也能更好的解决问题?

刘毅:是的。比如黑客把钱拿走了,这笔交易是不能改了,但可以通过升级应用的方式把这笔钱冻结,甚至把钱从黑客的地址里拿走。

这些都可以通过应用的链上治理达成,你只要写成程序就可以实现。所以我们称它为可编程治理,这个空间是无限大的。

但到底什么才是最优的治理结构?这是我们面临的问题,比如是否需要设置一个委员会,能够做紧急处理,能够快速地把黑客帐户冻结。

如果能够设计合理的治理机制,就能让应用始终适应市场变化、自身进化的需求,应用就会变得越来越好,市场规模也才有可能越做越大。

问:所以你觉得很多应用可能更适合基于应用链开发,而不是基于智能和约开发?

刘毅:对。区块链上的应用有两种信任最小化的方式。一种是基于合约的可验证性,即智能合约不可修改产生的信任最小化;一种是基于合约的去中心化治理产生的信任最小化

智能和约方式的应用要么不去进化,这就阻碍了 DApp 创新潜能的释放,但它如果进化,就会破坏信任最小化。不过这并不代表所有的应用都不适合用智能合约开发,治理是有代价的,对于有些应用而言,最好的选择仍然是智能合约。

应用链方式的应用能够实现可编程的、去中心化的治理,它通过 DAO 以链上治理的方式修改加密协议,同时不会破坏区块链最重要的意义——信任最小化。

一些随想

和刘毅老师的对谈足够让人重新思考「治理」这个既热门,但对大部分人来说又显得有些生疏的话题。

一方面,区块链是一种提供信任的机制,它能够做到信任的最小化;另一方面,区块链提供给用户的最终信任似乎遵循的是短板理论,它取决于木桶中最短的那一块。

在区块链技术经过了这些年的发展之后,目前阶段显现在我们面前的信任的短板也许是「治理」。提供去中心化的分布式系统是一件事情,以去中心化的方式去治理这个系统是另一件事。

就像凯文·凯利在刚刚在中国的一次公开演讲所说的一样,他认为区块链的数学基础是很容易被信任的,但是那些进行区块链服务的企业还有组织也需要被信任,这种信任就是另外一种层面。

治理不仅包含对公链本身的治理,也包含对去中心化应用的治理,因为后者也是信任链条上重要的一环。前者的重要性已经被大多数行业内人士注意到,但后者的重要性、以及如何用技术来支持这种治理似乎鲜少被讨论,这可能是本文的意义所在。

这篇文章并不短,也不算好读,谢谢你能看完。