“真正的问题是,你的“智能合约”真的有必要去中心化吗?还是它只要能够完成它的使命就足够了?其实,以中心化的方式实现合约更为高效,因为将来的“智能合约”大多数都将与现实中的东西交互。
比如,一个无人驾驶汽车接你然后送你到目的地。在你和这辆无人驾驶汽车之间的“智能合约”,为何需要去中心化这个属性?它为何需要抵抗审查,为何需要被储存在全球成千上万台电脑上,并且从今往后永远持续不间断的纳入运算?这根本用不到。同样的,当你走向一个汽水贩卖机买一瓶可乐的智能合约,也用不到去中心化。
若你归根结底总结起来,在底端最简单的智能合约,其实根本就不需要去中心化的属性。我知道哪里肯定又出来个ICO给你宣传,说你和那台汽水贩卖机的智能合约需要去中心化,需要在往后的时间里不断被重复验证。他们在说谎。相反,真正需要高级别抗审查属性和去中心化的智能合约,正是最近在新闻中被传遍的暗杀市场——这才是真正需要去中心化和抗审查属性的智能合约。而另一端就是类似汽水贩卖机这类的智能合约。
这两端间那条界线在哪?那条为了达到抗审查的隐私性,去中心化科技带来的低效率是值得被妥协的界线在哪儿?我认为那条界线就在Augur(暗杀市场)下面一点点。”
——Tone Vays
近来,“智能合约”这个词,就跟“区块链”、“人工智能”、“云”这些词一样,被人大肆炒作。
毕竟,人们都想要确定将来的情况,但目前最可依赖的手段还是司法体系。如果除了司法体系,还有之外的其他手段,那真是再好也不过了。 智能合约就给人们提供了一系列承诺,包括:
承诺1:以自动、去信任、公正的方式强制履行合约。
承诺2:在合约制订、履行、强制执行方面,去掉了中间商。
承诺3:(暗示我们可以)不要律师!
我对于这种炒作很有同感。毕竟,原来我们跟别人合作都必须要信任另一方才能做事。如果把这种信任的必要去除了,那该有多方便啊?
智能合约到底是神马玩意?是不是以太坊将大显身手的领域?是不是未来的必经之路?为什么有人要妨碍时代进步?
本文就要看一看智能合约究竟是什么;围绕智能合约的工程界的现实又是什么样的。剧透:智能合约实现不容易,保持稳定又很难。
01 智能合约是什么?
一般情况下,合约或者合同就是双方或者多方达成的一个协议,约束他们在未来做些什么事。比如,刘英可能会付给永强一笔钱,住永强的房子(也就是租金);玉田可能会承诺,小萌的汽车只要将来出了毛病,玉田都会负责修理,好处是每月都能收一笔钱(也就是汽车保险)。
图片里的狗:2015年嚷嚷“区块链”,2017年嚷嚷“智能合约”
智能合约跟传统合约的区别就在于,各种条件都由计算机代码评估然后执行,代码让合约变成了“去信任”的状态。所以刘英要是同意付给永强五百块,让永强三个月以后寄给她一个沙发(也就是期货沙发),就有一套计算机代码决定,这些条件是否为真。比如:刘英给永强付钱了吗?时间到三个月了吗?然后,代码就会执行,也就是通过第三方保管人发出沙发;双方都不能退出合约。
智能合约的主要特征就是“去信任化的执行”。也就是说,我们不需要依赖第三方执行各种条件。智能合约不依赖另外一方兑现承诺。更糟的状态,如果万一出现异常,也不依赖律师和司法系统解决问题。智能合约只是会执行那些按照代码应该及时而客观出现的结果。
02 智能合约相当傻
“智能”两个字,似乎表示这些合约有一种内在的智慧;但合约实际上并没有。所谓“智能”,意思就是不需要另一方的合作也能履行协议。假如租房的房客不交房租了,智能合约并不会把房客扫地出门,而是会把房门锁上,使得房客进不来。智能合约有效的地方,在于严格执行事先约定好的结果,而不是合约本身有智慧。
叫嚷:把一切都编成智能合约!!!
真正的智能合约,会考虑到一切“情有可原”的场合,审视合约的基本精神。即使在最混乱的情况下,也能让裁定尽可能公平。换句话说,真正的智能合约,就好比一位十分优秀的法官。然而,我们现在说的“智能合约”其实一点也不智能。智能合约的基础是规则,遵守规则一丝不苟,不考虑任何次要因素或者“法律的精神”。
再换句话说,让合约“去信任”,意味着我们决不能容忍一丁点歧义空间,于是引发了下一个问题。
03 智能合约相当难
因为以太坊进行了很多中心化的推广,所以人们就产生了一个误解,以为只有以太坊才有智能合约。实际情况不是这样。从2009年比特币推出开始,就有了一套扩展性很强的智能合约语言,名叫Script语言。再追溯远一点,早在1995年,比特币推出之前,智能合约就已经存在了。比特币的智能合约语言,跟以太坊的智能合约不同在于以太坊合约具有“图灵完备”(Turing-complete)这一特性。以太坊的合约语言名叫Solidity.这种语言能够实现更加复杂的合约,坏处是合约更复杂就会更难分析。
准确说来,智能合约早在比特币之前就存在了。我爱死这幅漫画了!
复杂性会产生一些重要的结果。复杂合约能够适应更加复杂的情况,但要保证稳定却十分困难。即使传统合约也是越复杂就越难以强制执行,因为各种复杂因素会带来更多不确定性,带来更大的解读空间。智能合约的“稳定”意味着管理合约所能执行的一切方式,确保合约做事符合制定者的预期。
漫画内容:
眼镜男:出于安全考虑,我们说,打算招个人负责……
黑发男:等一下,这事儿不着急。咱们先把项目做起来,这个咱们以后再说。
眼镜男:哎,项目差不多弄完啦!咱们得做个安全审计,好让……
黑发男:不行啊!没时间了!也没钱搞!
眼镜男:网站都上线十天了,还没做安全测试呢,我放心不下……
黑发男:不用担心,咱们回头再说。
后来……
黑发男:崩了!咱们网站崩了!有人把咱们黑了!你干什么吃的?
在“图灵完备”环境下,执行变得非常困难,也难以分析。让“图灵完备”的智能合约保持稳定,就相当于证实某计算机程序没有bug。我们都知道,这一点实在太难了,因为现实中的所有程序都有bug。
考虑一下:写出智能合约,需要多年的学习,还需要通过非常严苛的考试,才能有效制作合约。这是智能合约的基本要求。而目前写合约的人却有很多菜鸟,完全不知道智能合约需要多么稳定才算合格。
比特币对这个问题的解决方案,是干脆把“图灵完备”的条件取消了。这就让合约更容易分析了一些,让程序可能出现的各种状态,更容易列举、检验了。
以太坊的解决方案,则是让智能合约的作者承担责任。作者必须确保合约的执行一定符合预期。
04 智能合约其实不是合约(至少以太坊的智能合约不是)
以太坊把确保智能合约稳定的责任留给了作者。这办法在理论上不错,而在实践中却会产生某些非常严重的结果,导致中心化。
以太坊建立的基本理念是“代码即规则”(code is law)。也就是,以太坊的某个合约代表最高权限,谁也不能超越合约本身。这个理念是为了明确告知一切智能合约开发者,责任必须自负。一旦开发自己的智能合约搞砸了,某种方面可以说是自作自受。然而,“DAO攻击事件”一出,这一制度就突然完结了。
DAO英文全称是Decentralized Autonomous Organization,意为“去中心化自治组织”,是一个在以太坊内部创造的基金会,目的在于向人们显示这个平台可以做出什么成就。用户可以在DAO中存钱,因DAO作出的投资而得到回报。决定以“众包”形式作出(碳链价值注:一个公司或机构把过去由员工执行的工作任务,以自由自愿的形式外包给非特定的(而且通常是大型的)大众网络的做法。),是去中心化的。DAO用以太币的形式筹集了1.5亿美元,当时以太币的交易价格大约是20美元。这一切在理论上听起来都很不错,但现实中有一个问题:代码的稳定性并不好,于是有人就发现了一个漏洞,能把DAO资金全部提光。
这个提光DAO资金的人,很多人叫他“黑客”。的确,“黑客”发现了漏洞,从合约里拿钱,DAO的创始人没有料到这种情况。从这个意义上说,叫他黑客是可以的。但是从更加广泛的意义来说,他也并不是黑客,只是利用了智能合约原有的怪异之处为自己谋利而已,跟一个聪明的注册会计师发现了税收政策漏洞而为客户省钱没有什么区别。
接着,以太坊决定,代码不再是规则了,并且归还了注入DAO的所有资金。换句话说,合约作者和投资者干了蠢事,以太坊开发者决定为他们兜底了。
“我年轻的时候都把时间虚度过去了,现在我想申请政府救助。”
这一事件的影响,已经有许多文章记载。出现了一个叫“以太坊经典”(Ethereum Classic)的新区块链系统,用书面形式保存了DAO,也保留了“代码即规则”制度。另外,开发者开始放弃使用以太坊的“图灵完备”特征,因为现实证明这个特征太难以稳定了。目前,以太坊中最常用的智能合约模板是ERC20和 ERC721,而且很重要的一点是,两种模板都可以完全不符合“图灵完备”就写出合约。
05 智能合约仅仅适用于“数字凭证资产”
即使没有了“图灵完备”,智能合约似乎也是个极好的主意。要是简简单单就能用“去信任”的方式拿到某种理应属于自己的资产,又何必专门上法庭争夺资产呢?用智能合约不是比用传统合约容易多了吗?
比如,房地产应该从智能合约受益吧?刘英可以证明自己是房主,永强可以花钱买房。不必有所有权的争议,可以让机器用“去信任”的方式快速执行,也用不着法官了,也用不着官僚机构了,也用不着“产权保险”了。这该有多棒啊!
现实中有两个问题。第一个问题:智能合约只要由一个中心化的机构执行,就不是真正“去信任”的。我们依然必须信任这个中心化机构,才能执行。“去信任”是关键特征,所以中心化的执行其实是没意义的。必须有一个真正去中心化的平台,才能让智能合约真正做到“去信任”。
这就带来了第二个问题:在去中心化的情况下,智能合约要发挥作用,还必须在数字版本和现实版本之间存在某种确定的联系。也就是说,房屋的数字版本一旦发生所有权变更,房屋的现实版本就必须同样发生所有权变更。数字世界必须“了解”现实世界,这就称作“预言机问题”(Oracle problem)。(碳链价值注:预言机为数字世界里的智能合约提供关于物理世界中相对应问题的真实信息。)
刘英把房子过户给永强的时候,智能合约需要知道刘英真正把房子转让给了永强。完成这个步骤有几个不同的方法,但全都有同样的基本漏洞:必须存在一个受人信任的第三方,去验证现实世界发生的事件。
漫画内容:
黑人:松鼠宣布投资以后,市场上一直有不少动作……
黑人:好多小公司一直都在用松果币收购我们的股票。我们现在拥有的自己的股票连50%都不到了!
黑人:等一下!!这些小公司的所有人都是松鼠,就是说……
黑人与白人:我们让松鼠买下了!
松鼠:我这间新办公室里应该有好多好多木镶板!
例如,以太坊中可以用一种“非同质代币”代表这栋房子。刘英可以使用“原子化交易”(atomic swap)(碳链价值注:又译原子交换、原子互换等,一种正在开发中的去中心化、无需第三方的新技术,允许在不同类型的数字资产之间实现无需信任的点对点交易。 )把房子过户给永强,拿到一定金额的以太币。这就是问题所在!永强需要信任代币,认为代币确实可以代表房子;这就要求存在某种预言机,确保房子代币一旦给了永强,永强就在现实中合法拥有了房子。
而且,就算有一个政府权威出来保证说“这代币确实代表房子”,那如果代币让人偷了该怎么办呢?是不是说明这房子就归小偷了?代币丢了又该怎么办?是不是说明这房子不能在市场上出售了?还能再发一份代币吗?能发的话,由谁来发呢?
只要在一个去中心化的环境下,就存在非常棘手的问题——怎样才能把一种数字资产跟一种现实资产(水果、汽车、房子等等)联系起来呢?现实资产由我们所在地区的司法机构管辖,这意味着,资产除了信任我们创建的智能合约,还必须信任某些别的东西。所以,智能合约之下的所有权,并不一定意味着现实世界中的所有权,而且智能合约跟现实合约一样面临同样的信任问题。智能合约只要信任一个第三方,“去信任”这一主要优势就没了。
哪怕数字资产(电子书、医疗档案、电影)也面临同样的问题。某人拥有这些数字资产的“权利”,最终还要让某种其他的权威和预言机来决定,而人们必须信任这种权威和预言机。
从这个角度看,预言机也就是“傻子版的法官”了。我们本来想让计算机执行合约,让强制执行的过程变得简易,可是反而平添了更多的麻烦——必须考虑到主观性和人类判断的风险,把一切可能结果全都变成代码。于是,让合约“智能化”的结果,是让合约的写作更加复杂,与此同时还不得不依然信任别人。何苦呢?
如果不用预言机,唯一能够做出的成就也就是“数字承载设备”(digital bearer instruments)了。交易双方不光必须是数字化的,而且必须是承载设备。就是说,代币的所有权,绝对不能依赖智能合约平台以外的什么东西。智能合约只有具备了数字承载设备,才能真正做到“去信任”。
06 结论
我希望智能合约可以发挥比目前更大的作用。不幸的是,我们人类的传统合约总是存在大量不言自明的隐含内容和先前的判例法(case law,按照以前司法审判的例子而形成的法律),不需要明确表达;智能合约却必须明确表达一切内容,所以二者是不通用的。
而且我们还发现,应用“图灵完备”原则很容易产生严重后果,导致各种各样意料之外的行为。我们应该把现有的各个智能合约平台贴上一个标签“图灵脆弱”而不是“图灵完备”。DAO攻击事件也证明,合约存在一种“核心精神”,是大家都遵守的不成文的规矩,能够帮助解决争端,而且力量比我们意识到的还要大。
智能合约太容易出事故,太难以保持稳定,太不容易做到“去信任”,而且还必须依赖很多外在因素才能发挥作用。智能合约唯一增加“去信任”程度的地方,是那些具有数字承载设备的去中心化的平台,例如比特币。
(作者:Jimmy Song;编译:Morpho Hawkes、Diana)