**原文链接**:https://medium.com/@jimmysong/the-truth-about-smart-contracts-ae825271811f
**文章翻译自**:虫洞社区·独家签约翻译团队 梧桐
**本文原作者**:Jimmy song
正如“区块链”、“人工智能”和“云”一样,“智能合约”也是那些被大肆宣传的词语之一。
毕竟,有什么能比相信将会发生的事情而不是使用司法系统更好呢?智能合约的承诺包括:
> 1.自动地、诚信地、公平的执行合同
> 2.在合同建立、合同执行和合同施行中,去除中间人
>3.(暗示)去除律师
对于以上宣传我表示支持。
毕竟,如果我们去除信任另一方将会执行的需要,那么做事情的效率究竟会提高多少呢?
究竟什么是智能合约呢?这难道不是以太坊的范畴吗?这难道不是未来要走的道路吗?你为什么要阻挠进步呢?
在本文中,我将阐述什么是智能合约以及与之相关的工程实践(**提示**:*这不那么简单,很难保证*)。
##什么是智能合约呢?
一个常规的合同是双方或多方建立的未来对各方有一定约束的协议。Alice 将付给 Bob 一些钱作为使用 Bob 的房子的回报(也就是租金)。
Charlie 同意在未来修理Denise的车的任何损坏作为 Denise 每月支付钱给 Charlie 的回报(也即汽车保险)。
![](https://user-gold-cdn.xitu.io/2018/9/23/16605adeac3af77d?w=800&h=388&f=png&s=162363)
“智能”合约的不同之处在于合约的条件是通过计算机代码来进行评估和执行,使其去信任化。
所以如果 Alice 同意支付 Bob 500美元购买沙发,沙发三个月交货(即沙发期货),一些代码可以确定条件是否正确(Alice是否已经支付给Bob?已经过去3个月了吗?)并执行合约(从第三方托管处交付沙发),而不让任何一方违约。
**智能合约的关键特性是去信任化执行**,也就是说,你将不在需要依赖第三方执行各种各样的条件。
智能合约将不再依赖对方履行诺言或者更糟的依赖律师和司法系统来解决问题,而是及时、客观的执行约定的事宜。
##智能合约是相当愚蠢的
“智能”一词的使用意味着这些合约有一些与生俱来的智慧,但实际他们没有。
合约的智能部分是通过不需要对方合作执行协议来体现的。智能合约不再将不按时支付房租的租客赶出房子,而是会将他们锁在门外。已经同意的因果关系的执行,使得智能合约强大,而不是合约与生俱来的智慧。
![](https://user-gold-cdn.xitu.io/2018/9/23/16605ade5f49b2bc?w=500&h=375&f=jpeg&s=41800)
>一个真正的智能合约会考虑所有情有可原的情况,依照合约精神,即使在非常阴暗的情况下,也会做出公平的裁决
>**换句话说,一个真正的智能合约将扮演真正好法官的角色**。
反而在这种环境下“智能合约”一点也不智能。这是真正的以规则为基础,遵循规则到底,并且不能考虑任何次要的原因或者法律的“精神”。
换言之,使合约去信任化是指我们真正没有任何可能造成问题的模棱两可的地方。
##智能合约是真的很难
因为智能合约很多来自以太坊这个中心化市场,所有这里有一个误解,以为智能合约只存在于以太坊,这是不对的。在2009年初,比特币就已经有了一个相当广泛的智能合约语言叫做脚本(Script)。
实际上,智能合约的存在可以追溯到1995年。比特币智能合约与以太坊的不同在于以太坊是图灵完备。也就是说,Solidity(以太坊智能合约语言)允许更复杂的合约,但代价是让这些合约更难分析。
为了将智能合约的存在甚至早于比特币表述的更清楚,我喜欢用卡通来进行描述。 这有一些复杂性的重要的结果。
![](https://user-gold-cdn.xitu.io/2018/9/23/16605ade81948153?w=800&h=282&f=png&s=84516)
>虽然复杂合约允许更复杂的情况,但是一个复杂合约也很难安全。
即便在常规的合约中,合约越复杂,就越难执行,因为复杂的合约会增加更多的不确定性和解释的空间。而智能合约,安全就意味着合约可以按照每一个可能的方式执行,并确保符合合约作者的意图。
![](https://user-gold-cdn.xitu.io/2018/9/23/16605ade77b8b8cd?w=650&h=610&f=jpeg&s=130300)
在图灵完备环境中的执行是极其棘手和难以分析。确保一个图灵完备智能合约安全就像证明计算机程序没有漏洞。我们知道这非常困难,因为现今存在的所有计算机程序都有漏洞。
考虑到写常规的合约需要多年的学习并经过严格的律师资格考试才能胜任。
>智能合约要求至少要与常规合同相当的能力,但是目前不是,很多智能合约都是新手编写的,他们不明白它需要非常安全。
从各种有缺陷的合约中可以清楚的看到这一点。
比特币对于这一问题的解决方法很简单,不具备图灵完备性。这使得合约更容易分析,因为程序的各种可能的状态更容易列举和检测。
以太坊的解决方法是将这个责任赋予了给智能合约的编写者。合约的编写者要确保合约执行的是他们的意图。
##智能合约并不是真正的合约(至少在以太坊不是)
虽然将合约安全性的责任让作者承担听起来是很不错的理论,但在实践中,这将会导致中心化的结果。
以太坊以“代码就是法律”理念发行,即以太坊合约是最高权威,任何人都不能推翻合约。这个理念是为了让智能合约的开发者清楚他们是独立的。
如果你搞砸了自己的智能合约,从某种意义上说,你是值得的。当DAO事件发生,这种情况就会戛然而止。(DAO:去中心化自治组织)
DAO 全称 Decentralized Autonomous Organization(去中心化自治组织),在以太坊创立了一个基金,以展示平台可以做什么。用户可以将钱存入 DAO,根据 DAO 所做的投资获得回报。
这些决定本身将是众筹和去中心化的。当以太坊交易价为20美元的时候,DAO 筹集到1.5亿美元。这些听起来都是不错的理论,但有一个问题。代码没有得到很好的安全保证,导致有人计算出一种方式可以把钱从 DAO 抽走。
许多人把“抽钱的人”称为“黑客”。
>从某种意义上说,“黑客”找到了一种非创建者意愿的从合约中获取资金的方式,这是真的。
但从更广泛的意义上来说,这根本不是一个黑客,只是一个利用了智能合同的特点转化为他们的优势。
这和一个富有创造力的注册会计师并没有什么不同,他们想要找到一个税收漏洞来节省他们的客户的钱。
接下来发生了什么呢?以太坊决定代码不再是法律,并将进入DAO所有的资金进行了恢复,也就是说,合约作者和投资者做了一些愚蠢的事情,开发人员决定帮他们摆脱困境。
![](https://user-gold-cdn.xitu.io/2018/9/23/16605ade7153c7c6?w=800&h=649&f=jpeg&s=68977)
这一事件的附带后果被真实记录。以太坊经典诞生时,保留了DAO作为书写,保存了“代码就是法律”的原则。而且,开发者开始规避使用以太坊的图灵完备特性,因为它被证实很难保证安全。
**ERC20和ERC721标准是以太坊中使用最频繁的智能合约模板,必须指出的是两种类型的合约都可以在没有任何图灵完备性的情况下编写。**
##智能合约只适用于数字承载仪器
**即使没有图灵完整性,智能合约听起来也不错。**
毕竟谁也不喜欢不得不上法庭才能合理的获得属于他们自己的东西?难道使用智能合约不比常规合同简单的多?
例如,智能合约不会使房地产受益吗?Alice 可以证明她拥有这套房子。Bob可以支付款项来换取房子。没有所有权、去信任的问题,无需法官、官僚或者产权保险。听起来很棒,对吗?
这里有两个问题。第一,集中进行智能合约的执行并不是真正的信任化。你仍然需要向信任集中的执行方。去信任化是关键特性,因此集中执行并没有真正的意义。为了使智能合约真正的去信任化,你需要一个真正却中心化的平台。
这引出了我们第二个问题。在去中心化的环境中,只有在数字信息和实物存在某种明确关系时,智能合约才会有效。也就是说,每当房子的数字信息改变所有权时,实物也必须改变所有权。
>数字世界需要“了解”物理世界。这被称为“预言家问题”。
当 Alice 将房子转交给 Bob 时,智能合约需要知道她实际确实将房子交给了 Bob。
有好几种方法可以做到这一点,但是他们都有同样的关键问题,必须有一定信任程度的第三方来验证核实现实世界的物质。
![](https://user-gold-cdn.xitu.io/2018/9/23/16605adf06314ba1?w=800&h=774&f=png&s=728466)
举个例子,房子可以被以太坊上的不可替代的代币代表。Alice 可以将房子转交给 Bod 同时获得一定数量的以太坊,这就是问题所在。Bob 需要相信这代币实际上真的代表了房子。必须有一些圣人(预言家)保证房子代币转移给他实际就意味着他合法的获得了房子。
此外,即使政府表示代币实际就代表房子,但当代币被盗后悔发生什么呢?房子现在就属于小偷的了吗?如果代币丢失了怎么办?房子就不能再出售了吗?房子的代币可以重新签发吗?如果可以,由谁签发呢?
将数字资产和物质资产联系起来是一个很棘手的问题,至少在去中心化的环境中国是这样,无论这物质是水果、汽车还是房子。
物质资产是受你所在区域的司法管辖,这意味着除了你创建的智能合约外,他们在某种程度上相信这些事物。
这意味着智能合约中的占有并不一定意味着现实世界中的占有,同样面临和常规合约一样的信任问题。需要信任第三方的智能合约就不在具备去信任化杀手的特征。
即使是电子书、健康记录或者电影等数字资产,也面临同样的问题。这些数字资产的“权利”最终需要其他权威机构决定,预言需要被信任。
从这角度来讲,预言家只是法官版本的降低。你实际得到的不是机器执行和简化实施,而是不得不编码带有人类主观判断风险的所有可能的结果。
>换句话说,通过是合约变得“智能”,你将合约的编写变得更加复杂,而且仍旧需要信任一些人。
可以无预言进行的唯一事情就是数字承载设备。从本质上讲,交易双方不仅需要数字化,也需要数字承载的设备。也就是说,代币的所有权不能有在智能合约平台之外的依赖性。只有当智能合约具有数字承载设备时,智能合约才能真正的去信任化。
##结论
我希望智能合约能比实际更有用。不幸的是,我们人类所认为的合约增加了一大堆的不需要明确阐明的假设和既定的例法。
此外,事实证明利用图灵完备是一种极易被攻击并引起各种意外行为的方式。我们应该将智能合约平台标记为图灵脆弱而不是图灵完备。DAO事件也证明合约的“精神”是隐含信任的,并比我们认识到更有助于解决纠纷。
智能合约太容易被攻击,太难以保护,难以去信任化,并且在处理大多数事务时有太多的外部依赖。智能合约真正实际增加去信任化的地方是类似比特币那样的带有数字承载设备的去中心化平台。
——————————————————
这篇文章非常深度,希望能给大家带来一些帮助。
#### 相关阅读推荐:
[以太坊智能合约OPCODE逆向之理论基础篇](https://www.uzanapp.com/article/1536828300686.html)
[零知识证明中的超级新星:zk-SNARKs](https://www.uzanapp.com/article/1536732711761.html)
[我的区块链第一性原理](https://www.uzanapp.com/article/1536653253922.html)
#### 添加微信(cdong1024),加入区块链开发者技术交流群
#### 虫洞社区:https://www.uzanapp.com/ ——中美区块链开发学习社区
![](https://user-gold-cdn.xitu.io/2018/9/23/16605c7d44bcf2ac?w=900&h=344&f=jpeg&s=103653)
有疑问加站长微信联系(非本文作者))