未来世界的运转方式?智能合约的真相

“智能合约”跟“区块链”、“AI”和“云”一样,也是最近炒得比较厉害的概念。

毕竟,如果能让司法系统变得可以信赖,那岂不是天大的好事?智能合约承诺:

强制合约自动执行,无需信任,公平公正

无需中间人参与合约的构造、执行和实施

(言下之意)不需要律师

我能理解那些炒作者的心情。想象一下,如果我们在执行合约时不再需要信任其他各方,办事效率会有多大的提升啊!

那么,智能合约到底是个什么东西呢?那不是以太坊上的东西吗?这是不是未来世界的运转方式?你为什么不顺应历史的潮流?

在这篇文章里,我准备检查一下智能合约,看看它到底是什么,以及在工程上随之而来的事实(提示:它没那么简单,并且很难保证其安全性)。

什么是智能合约?

普通合约,是双方或多方在某件事情上达成一致,为约束各方遵守对未来的约定而形成的。Alice用了Bob的房子,作为回报,要付钱给Bob(即租房)。只要Denise按月付一笔钱给Chalie,那不管将来Denise的车出现什么样的损伤,Chalie都会负责修复(即车险)。

“智能”合约的不同之处在于,条件的评估和执行都是由计算机代码完成的,无需信任关系。所以,如果Alice同意支付给Bob 500美元,让他三个月后发给自己一套沙发(即预订沙发),则代码可以判断这些条件是否为真(Alice把钱付给Bob了吗?到三个月了吗?),然后执行(把托管方那里的沙发送到Alice家),任何一方都不能违约。

去信任化的执行是智能合约的关键特性。也就是说这种合约执行各种条件时不需要依赖第三方。普通合约的执行要靠对方言行一致,如果出了问题,则要靠律师和法律系统出面调解;而智能合约则会在期望的条件出现时及时公正地执行。

智能合约并不智能

“智能”这个词容易让人误会,以为这些合约智商有多高似的。实际上并非如此。这里的智能是指合约无需其他各方的协作即可执行。如果房客没付租金,“智能”合约不是想办法把房客赶出去,而是把他们锁在公寓外面。智能合约的强大之处在于对认同结果的执行,而不是说它有多聪明。

真正聪明的合约会考虑到所有可能的情况,盯着合约的精神,即便在最不明朗的情况下,也能做出公平的裁决。换句话说,真正的智能合约就像一位优秀的法官一样。然而我们这里所说的“智能合约”并没有那么聪明。实际上它非常呆板,只能分毫不差地按照规则执行,不能考虑任何次要因素,也不讲法律“精神”。

也就是说,一份无需信任的合约意味着不能有一点儿模棱两可的地方,因此这就引出了下一个问题。

智能合约真的很难

因为以太坊做了大量的营销工作,所以很多人误以为只有以太坊才有智能合约。真实情况并非如此。早在2009年,比特币就已经有一种名为Script的智能合约语言了,只是这种语言相当粗放。实际上,智能合约1995年就已经出现了,也就是说还要早于比特币。比特币的智能合约语言跟以太坊的不同,它不是图灵完备的。Solidity(以太坊的智能合约语言)可以写出非常复杂的合约,但付出的代价是分析这些合约更加困难。

复杂性产生了一些严重的后果。尽管复杂的合约可以应对更加复杂的情况,但因为复杂,保证合约的安全变得非常困难。其实普通的合约也会面临同样的问题,越是复杂的合约,其约束力越弱,因为复杂会增加不确定性,解释的余地也越大。对于智能合约而言,安全性的含义是指能够处理合约每一种可能的执行方式,并且确保合约总是能够按照创作者的意图执行。

在图灵完备的上下文中,执行非常多变,难以分析。要证明一个图灵完备的合约是安全的,相当于要证明一个计算机程序没有bug。我想大家都知道,从来没人敢说自己写的程序没有bug,可想而知这有多难。

现在编写普通合约的那些人,都是经过了数年的学习,还要通过难度很大的任职资格考试才行。从道理上来讲,智能合约对任职资格的要求也一样,但目前很多智能合约都是新手写的,这些人甚至都不懂需要怎样的安全。从各种各样的合约暴露出来的漏洞来看,这一点毋庸置疑。

对于这个问题,比特币的解决办法就是不做图灵完备的合约。因为更容易枚举和检查程序可能的状态,所以分析起来也更加容易。

以太坊的解决办法是把担子压在智能合约的编写者肩上。确保合约符合编写者的意图是他们自己的责任。

智能合约并不是真正的合约

最起码在以太坊上不是。

尽管把保证安全的责任交给编写者听起来很合理,但实际上这样会产生一些严重的中心化后果。

按照以太坊的思想,“代码就是法律”。也就是说,在以太坊上,合约是终极权威,没有人能否决合约。这个思想清晰地给智能合约的开发者们传达了一个信息,他们只能靠自己。如果你在制作智能合约时搞砸了,从某种意义上来说,你是自作自受。在DAO事件发生后,引发了那次崩溃性的停滞。

DAO是“去中心化自治组织(Decentralized Autonomous Organization)”的缩写,以太坊为了演示平台能做什么,专门创建了一份基金。用户可以把钱存进DAO,然后分享DAO所做投资的回报。他们的决策是众包的,去中心化的。DAO募集到了$150M的以太币,当时以太币跟美元的兑换比例是1:20左右。这在理论上完全没问题,但在现实世界中却出了问题。因为代码不是太安全,所以有人发现了从DAO里榨钱的办法。

很过人管从DAO里榨钱的人叫“黑客”。如果说“黑客”的含义是指找到一种办法,按照创建者意想不到的方式从合约里捞钱,这么叫也没错。但往深里想一想,他们根本不算黑客,因为他们是利用智能合约的弱点牟利。这跟有创意的CPA利用税法中的漏洞帮客户省钱没什么两样。

那件事发生后,以太坊决定不再把代码当作法律,还把DAO里的钱都退了回去。这就相当于,合约编写者和投资人做了傻事,而以太坊的开发者决定改写历史,拉他们一把。

这一事件的影响已被充分证实。以太经典由此诞生,DAO原样保留,仍然坚持“代码就是法律”的原则。除此之外,因为事实证明难以保证其安全性,开发人员开始避开以太坊的图灵完备性。在以太坊中,最常用的智能合约模板是ERC20和ERC721标准,值得注意的是,写这两种合约都不需要图灵完备性。

智能合约只能用于数字无记名票据

即便没有图灵完备性,智能合约听起来也绝对是个好东西。谁也不愿意为了拿回明显属于自己的东西去法院。有了智能合约,岂不是比用普通的合约更容易?

比如说,智能合约对不动产会有好处吧?Alice可以证明房子属于自己。Bob可以用钱跟Alice交换房子的所有权。所有权毋庸置疑,机器无需信任关系,也不需要法官、政府官员或产权保险,可以迅速执行交易。看上去很美,是不是?

不过有两个问题。首先,由某个中心执行的智能合约并不是真的去信任化的。你必须相信那个负责执行的中心。去信任化是关键,所以中心式执行实际上没有意义。所以要想做出真正去信任化的智能合约,你需要一个真正去中心化的平台。

由此可以引出第二个问题。在去中心化的上下文中,只有在数字版和实物版之间有明确的联系时,智能合约才能发挥作用。比如说房子,在房子的数字版所有权发生变化时,房子实物版的所有权也必须跟着改变。我们需要让数字世界“了解”实物世界。这被称为“神谕问题(Oracle problem)”。

在Alice把房子交给Bob时,智能合约需要知道她是真的把房子交给Bob了。实现方式很多,但本质上都是一样的,都需要在实物世界中找一个可信的第三方验证这些事件。

比如说,这个房子在以太坊中被表示成了一个不可替代的代币(token)。Alice可以在一个原子交换中用房子跟Bob换一些以太币。问题来了。Bob需要相信那个代币真的代表那个房子。这需要靠某种神谕来保证,将代表房子的代币交给他后,真的可以表示那个房子在法律上是属于他的。

进一步说,即便政府机构承认那个代币真的可以代表那个房子,如果这个代币被偷了怎么办?房子属于那个偷代币的贼吗?如果代币丢了怎么办?房子就没法再卖了吗?还能再重新发一个代币给这个房子吗?如果可以,由谁来发呢?

不管是水果、汽车还是房子,要将数字资产与实物资产连接起来都是个难题,至少在去中心化的上下文中特别不好实现。实物资产是由你所在的司法系统监管的,除了你创建的智能合约之外,他们还相信别的一些东西。也就是说智能合约中的所有权不一定能代表实物世界中的所有权,它跟普通合约一样存在信任问题。需要信任第三方的智能合约失去了自己最大的优势,不再是去信任化的合约。

即便是电子书、医疗记录或电影这样的数字资产,也会遇到同样的问题。对这些数字资产的“权益”最终都是由某个权威机构决定的,而我们需要信任他们的神谕。

就此而言,神谕只是简化版的法官。所以实际上你得到并不是只有机器执行的合约和简化的约束,而是掺杂了主观认识和人为判断风险的代码,而且这些代码要实现所有可能的情况,很复杂。换句话说,为了让合约变得“智能”,编写代码的复杂性急剧升高,但你还是没办法摆脱对某个人的信任。

能摆脱神谕的只有数字无记名票据。从本质上讲,交易双方需要的不仅仅是数字,而是无记名票据。标记的所有权不能是在智能合约平台之外决定的。只有在有数字无记名票据的时候,智能合约才能真正实现去信任化。

结论

我希望智能合约能发挥更大的作用。但很可惜,我们人类的大部分想法都会在合约中引入大量的假设,并且既有的案例法也不需要明确说明。

另外,事实证明使用图灵完备性很容易出问题,会引起各种意想不到的行为。与其说智能合约平台是图灵完备的,还不如说它是图灵脆弱的。DAO事件证明了我们隐含着对契约“精神”的信任,这也解决了很多我们都没有意识到的争端。

智能合约只是太容易出状况了,也太难保证其安全,太难实现去信任化,并且对于很多事情来说,根本没办法摆脱外部依赖。只有在比特币这样的去中心化平台上,只有数字无记名票据,才能让智能合约的去信任化真正发挥作用。

网站模版

发表评论

相关文章