译 | 智能合约的真相
本文翻译自:https://medium.com/@jimmysong/the-truth-about-smart-contracts-ae825271811f
作者:Jimmy Song
译者:平兄 [译文有对原文进行删改]
导读:近几年,随着以太坊的崛起,智能合约的这个概念已经深入币圈人的脑海中,大家都卖力宣传并认可智能合约的优势,但作者对智能合约进行了深度思考,结合事实,阐述了智能合约某些愿景的局限性,并提出了智能合约目前能真正发挥作用的场景。
不同的观点可以警示我们从不同的角度思考问题,我们不定论作者的观点是否正确。未来智能合约到底会如何发展,你怎么看,欢迎留言交流!
就像 “区块链”,“人工智能” 和 “云计算” 一样,“智能合约” 这个概念也得到了大量的宣传普及。
毕竟,相信将要发生的事而不是依靠司法系统,还有什么比这个更好的事的呢?智能合约的功能如下:
- 自动化、去信任、公平地执行合约
- 在合约的构建、执行甚至强制执行中去除中间人的存在
- (暗示)去除律师
我也认同智能合约。毕竟,如果我们可以去除第三方信任的需要,很多事做起来都会很高效。
那到底什么是一份智能合约呢?它是专属于以太坊的吗?它是未来的方向吗?为什么你需要关注它?
这篇文章中,我将解释什么是智能合约以及现实中可与之相关的一些应用(剧透:其实没有那么简单,而且也很难保证)
什么是智能合约?
一份普通合约是两个或者更多的当事人权益之间的一种协议,当个别当事人不履行合同的义务时,得通过第三方机构(如司法部门)进行维权。
那智能合约有什么不同呢?智能合约的评估和执行都是通过程序代码进行的,进而实现去信任。
智能合约的关键功能就是去信任执行。也就是说,你不需要依赖第三方去执行各种情况。依赖第三方以及依赖律师和法律制度维权有时候难免出错,而智能合约会更及时客观地执行应该发生的事。
其实,智能合约很愚蠢
“智能” 这个词暗示着这些合约具有一些先天的智能。其实并不是,它的智能是体现在自动执行条件触发的预定义结果,而不是真正意义的智能。
真正的智能合约应该会顾及所有情有可原的情况,即使是在最黑暗的情况下,也可以遵循合约精神并且制定公平的规则。也就是说,一个真正的智能合约应该表现得想一个公正的好法官。因此,在这种理想的愿景中,我们目前的智能合约其实就一点也不智能了。
同时,去信任地执行合约也就是意味着我们没有了模棱两可的余地,这也就带来了下一个问题。
其实,智能合约很难实现
因为以太坊已经成为了智能合约平台的代名词,所以可能会有些人误以为智能合约只存在于以太坊上。其实,早在2009年,比特币就拥有了一门十分广泛的智能合约语言,叫 Script 。事实上,早在1995年,智能合约就存在了。比特币智能合约和以太坊智能合约的区别是以太坊的是图灵完备的。也就是说,Solidity(以太坊的智能合约语言)支持更复杂的合约,即使代价是使代码更难分析。
其实,智能合约的复杂性会带来很多重大的后果。复杂性越大,合约就越难以保证,也会引入越多的不确定性和增加代码解释的空间。对于智能合约来说,安全性就意味着处理在执行过程中所有可能遇到的问题以及确保合约按照作者的意愿执行。
在图灵完备的条件下执行智能合约是极其棘手以及难以分析的。保证一个图灵完备的智能合约就相当于保证一个程序没有bug。我们知道这是不可能的,几乎所有程序都会有bug.
考虑到写普通的合同需要多年的学习,再加上一个非常严格的律师资格考试才能胜任。智能合约应该也至少需要这种能力水平,但目前,许多智能合约都是由新手编写,他们都不知道这些合约需要怎样的安全水平。从已经证明有缺陷的各种智能合约中,可以清楚地看出这一点。
针对这一问题,比特币的解决方案是不具备图灵完备,这使得合约很容易进行分析,因为程序上可能的状态很容易进行枚举和检查。
以太坊的解决方案是将这个负担交给智能合约编写者,智能合约的编写者需要确保合约按照他们的意愿执行。
其实,智能合约不是真正的合约(至少在以太坊上是这样的)
虽然理论上将保障合约的责任交给编写者听不来不错,但实际上,这已经造成了一些严重的中心化后果。
以太坊推出了 “代码即法律” 的思想。也就是说,以太坊上的智能合约是最高权威,没有人可以推翻这个合约。这个想法是为了让智能合约开发者明白他们是独立的 。如果你搞砸了自己的智能合约,在某种意义上,你得自食其果。但当DAO事件发生的时候,这个原则就被打破了。
DAO,一个去中心化自治组织基金会,以智能合约的形式运行在以太坊上。 (译者注:是一种通过智能合约将个体与个体、个人与组织、或组织与组织联系在一起的新型组织形式)。用户可以把钱存到DAO那里并根据DAO所做的投资收益获得回报。这些投资决定本身也是众包和去中心化的。DAO筹集了价值1.5亿美元的ETH,当时的ETH为20美元/个。理论上这听起来很好,但存在一个问题。DAO智能合约的代码不够安全,导致有人想出了方法将DAO的钱取走。
后来, 以太坊决定代码不再是法律并且回滚所有钱到DAO中。也就是说,DAO智能合约的编写者和投资者做了傻事,然后以太坊开发者决定救助他们。
这件事的后果就是硬分叉出了以太经典,他们认为DAO智能合约得遵守 “代码就是法律” 的原则。因此,开发者们开始回避选择以太坊的图灵完备的特性,因为事实已经证明难以保证安全性。ERC20和ERC721标准是以太坊中最被频繁使用的智能合约模板,需要指出的是,这两种类型的合约的编写都支持无需图灵完备。
智能合约只适用于不记名数字票据
即使不具有图灵完备,智能合约听起来还是很不错的。毕竟,谁会喜欢去法庭争取原本就属于他们的东西呢?但是,使用智能合约真的就比普通合约要简单吗?
例如,房地产可能不能从智能合约中收益?丰兄能证明他有一栋房子,平兄跟他买房汇钱给他。没有所有权的问题,由机器去信任快速地执行,不需要法官,官僚或者产权保险。听起来很不错,对吧?
这里存在两个问题。第一,由中心化的组织执行智能合约并不是真正的去信任,你还是得信任这个中心化组织。为了让智能合约真正做到去信任,你需要一个真正的去中心化平台。
但这也导致了第二个问题。在去中心化的情况下,智能合约只适用于数字化版本和物理版本之间具有明确关联的情况。也就是说,无论什么时候房子的数字化版本所有权改变了,物理版本也需要改变其所有权。这就需要数字世界能够了解物理世界。这就是著名的 “预言机问题”。
当丰兄把房子转让给平兄的时候,智能合约需要知道这件事真实发生了。有许多方法都可以做到,但是它们都有一个相同的本质问题。在现实中,必须信任第三方来证实事件。
例如,房子可以代表以太坊上的一个非同质token(non-fungible token).丰兄可以把它转让给平兄,以换取一定数量的ETH。这里有个问题,平兄需要相信这个token确实是代表着房子的所有权。这时候必须有一些预言机确保平兄得到的这个房子的token意味着从法律上,这房子是我的。
再深入点,即使政府权威机构认可这个token代表着房子的所有权,那如果token被偷了怎么办?房子是不是就属于小偷的了?如果token丢失了,房子是不是就无效了无法再出售了?可以再发行这个房子的token吗?如果可以,应该由谁来发行?
至少在去中心化的情况下,将数字资产和实物资产关联起来是十分棘手的问题,无论实物资产是水果、汽车或者房子。实物资产是由你所处的管辖范围来管理的,这也意味着除了智能合约之外你还得信任其他东西。这也意味着在智能合约中的财产并不代表着现实世界中的财产,面临与普通合约一样的信任问题。一个需要信任第三方的智能合约便失去了去信任这个最具有杀伤力的功能。
甚至像电子书、健康档案或者电影这样的数字资产都面临同样的问题。这些数字资产的 ”权利“ 最终还是得由其他权威机构决定并且需要信任一个预言机(Oracle)。
在这种情况下,预言机就相当于愚蠢版的法官。你真正得到的,不是机器运行与简化执行,而是必须用人类判断的主观性和风险来编码所有可能的结果的复杂性 。也就是说,智能合约不仅还是得让我们信任第三方,还增加了编写的复杂度。
在无需预言机的情况下智能合约唯一能胜任的就是用于不记名数字票据。从本质上讲,交易易双方不仅需要数字化,还需要是不记名票据。也就是说, token的所有权不能依赖于本身之外的其他智能合约平台。只有当一份智能合约用于不记名数字票据时,它才能做到真正的去信任。
总结
我希望智能合约能比实际上更有用,可惜的是,我们所认为的合约中有很多都带来了一系列的假设并且没有建立明确的判定体系。
此外,事实证明利用图灵完备很容易搞砸并且造成各种意外的行为。我们应该给智能合约平台贴上易受攻击的标签,而不是图灵完备的标签。DAO事件已经证明了合约的这个隐形信任的 ”精神“,可以帮助我们解决比我们预期更多的争议。(译者注:这里作者其实是在讽刺DAO事件的回滚操作了)
智能合约很容易搞砸,很难得到保障,很难实现去信任并且如果要实现更多功能就得依赖许多第三方。唯一智能合约可以真正实现去信任的领域就是去中心化平台上面的不记名数字票据,例如比特币。
在 6月12号,Kyle Samani 转推了Jimmy Song 的这篇文章,并提出了反对的意见,论据如下(译者注:以下为译者对 kyle 推特上论据的一个翻译整理):
在Jimmy的这篇帖子中,他阐述了这几点:
- 比特币的受攻击面远小于以太坊
- 智能合约没不了任何大事
- 不能依赖以太坊执行智能合约
让我们来探讨一些这些观点!
对于第一点,他说的没错。但这是为什么呢?首先,以太坊上的开发者至少要是比特币的10倍甚至100倍,为什么比特币的开发者人数这么少呢?答案很明显,基于比特币网络进行开发十分不友好(哈哈,原句是fucking sucks !)。比特币的开发语言 Script 自描述性太差,就像是二三十年前的编程语言。此外,目前已经有很多人着手于从各个方面完善以太坊:标准库、形式验证、更好的编码实践、端到端的客户端以及开发环境、强健的测试框架等。因此,很明显,第一点不成立。
对于第二点,这无疑是个荒谬的定论。首先,如结算衍生合约(settling derivatives contracts ),按Augur的实现方式,需要信任预言机和数据源吗?要的。使用TEEs(译者注:Trusted Execution Envirnment),, oraclizeit 预言机今天向区块链提供了“今天”的数据证明他们可以证明自己没有修改过 (译者注:这句有点绕,其实就是说可以证明预言机能实现去信任)。对于数据源的话,如果你不相信NBA官网提供的赛果,那你能相信什么?
Jimmy表示智能合约没办法做其他新东西。这是很可笑的:在线公平博彩、在线公平投票选举、社交媒体的一些新颖的方式很多很多。jimmy认为为了将智能合约与现实世界联系起来,我们需要信任执行机构或者政府等。这陷入了二元选择(译者注:即不是选A就是选B ,忘记了其他可能还有第三个选择),没有考虑中间的灰色地带,智能合约并不需要100%的去信任。
首先,如果有一方违背了智能合约,但没有100%清晰可审计的记录,这应该(最终)使政府能够更快地行动起来 (特别是那些著名的公共智能合约)。第二,如果政府也依赖于这个智能合约呢?(译者注:kyle的意思是政府可能会针对智能合约无法处理的违约进行调查)
当然,链上治理目前的确存在很多挑战,但未来肯定会得以完善。目前如EOS的超级节点作恶惩罚,Dfinity的神经网络治理。
最后,Jimmy举了DAO事件,并认为不能依赖于以太坊执行智能合约。汽车飞机出事,那你以后就不再坐车乘飞机了吗?
本文译者简介
马祝平 程序员,区块链技术爱好者,欢迎加微信号: qwer82261615P
你也许感兴趣的:
- 【外评】电脑从哪里获取时间?
- 【外评】为什么 Stack Overflow 正在消失?
- Android 全力押注 Rust,Linux 却在原地踏步?谷歌:用 Rust 重写固件太简单了!
- 【外评】哪些开源项目被广泛使用,但仅由少数人维护?
- 【外评】好的重构与不好的重构
- C 语言老将从中作梗,Rust for Linux 项目内讧升级!核心维护者愤然离职:不受尊重、热情被消耗光
- 【外评】代码审查反模式
- 我受够了维护 AI 生成的代码
- 【外评】Linux 桌面市场份额升至 4.45
- 【外评】作为全栈开发人员如何跟上 AI/ML 的发展?
你对本文的反应是: