编者按:本文编译自Medium,作者Jimmy Song,原文标题The Truth about Smart Contracts。

打开网易新闻 查看精彩图片

就像“区块链”,“AI”和“云”一样,“智能合约”也是如今收到热捧的新概念。

试想一下,有什么能比相确信合约在未来会按照约定被执行而不需要任何司法介入更好? 智能合约的承诺包括:

  • 合约可以被自动地、无需信任地和公正地执行

  • 在合约制定,履行和强制执行过程中取消中间人

  • 或许不再需要律师

我能够理解智能合约为何会被热炒。 毕竟,如果我们不需要担心对方是否会按照约定履行合约,那么很多事情的效率会大大提高。

话说,到底什么是智能合约? 这是源于以太坊的概念么? 这是未来合约订立的方式么?

在这篇文章中,我将探究智能合约的种种细节以及与之相伴的“工程现实”问题(剧透:它并不简单,并且很难保证可靠性)。

什么是智能合约?

正常的通常意义上的合约是双方或多方之间的协议,将他们约束在未来发生的某些事物上。 譬如,Alice可能会向Bob支付一些钱来使用Bob的房屋(又名租金)。 Charlie可能会同意修复对Denise的汽车未来发生的任何损坏,作为回报Denise每月向Charlie支付一笔费用(又名汽车保险)。

打开网易新闻 查看精彩图片

所谓“智能”合约,其不同之处在于合约的所有条款都是由计算机代码评估和执行的,这使得它无需任何信用背书。 因此,如果Alice同意支付向Bob支付500购买沙发,交货期为3个月。则通过计算机代码可以判断合约的某些条款是否成立(Alice是否付款给了Bob?3个月的交货期是否到期?)并执行合约 (将托管下的沙发交付给Alice);合约双方都没有反悔的权利。

智能合约的关键特点是它的执行力不依赖任何信用背书。 也就是说,你不需要依赖第三方来执行各种条款。 既不需要依靠对方对合约的履行言行一致,也不需要在合约执行出现问题时依靠律师和法律制度来纠正事情;智能合约可以及时客观地执行合约约定的各个事项。

智能合约非常“傻瓜“

使用“智能”一词意味着这些合约具有某种天生的智慧。 然后事情并非如此。 所谓”智能“的部分在于合约的执行不依赖任何一方的合作。 相比把拖欠房租的租客请出房子,一个“智能”的合约会直接将没有按时付款的租客锁在房子外面。 对于合约约定后果的无条件执行是智能合约显得强大有力的原因,而不是智能合约具有天生的智慧。

打开网易新闻 查看精彩图片

一个真正意义上的智能合约应当考虑到所有情有可原的情况,着眼于契约精神,即便在情况非常不明朗的条件下也试图做出公平的裁决。 换句话说,一个真正的智能合约就像一个非常好的法官。 与之相反,现实中的智能合约非常不智能。 它事实上只是基于规则并严格按照规则行事,不能将任何次要因素或法治精神考虑在内。

换句话说,由于智能合约不依靠任何信用背书,同时也意味着合约的订立不能有任何模棱两可的空间。这一点引发了下一个问题。

拟定智能合约非常困难

由于以太坊大量的宣传,使得人们错误地认为智能合约只存在于以太坊。 然而事实并非如此。 2009年伊始,比特币就已经拥有了一种被广泛使用,名叫Script的语言来拟定智能合约。 事实上,智能合约的存在可以追溯到1995年,要早于比特币。比特币的智能合约语言同以太坊版本的区别在于以太坊的语言具有图灵完备性。 也就是说,以太坊的Solidity语言允许更复杂的合约,其代价是会增加分析难度。

打开网易新闻 查看精彩图片

这种语言的复杂性带来了一些重大的后果。 虽然复杂的合约可以允许更复杂的情况,但复杂的合约也很难保证安全。 即使是普通的合约,实施难度也会因为复杂性的提高而加大;因为复杂性带来了更多的不确定性和解释空间。 凭借智能合约,确保安全意味着处理合约可能被执行的所有可能方式,并确保合约执行符合拟定者的意图。

打开网易新闻 查看精彩图片

执行具有图灵完备性的上下文中是极其棘手和难以分析的。 安全可靠地执行图灵完备的智能合约相当于证明一个计算机程序没有错误。 我们知道这是非常困难的,因为几乎所有现存的计算机程序都或多或少存在缺陷。

考虑到需要多年的学习和非常过硬的考核才能够胜任编写普通合约的工作这样一个事实。 智能合约的编写至少需要与之相当的能力,但目前还有的合约是由很多不懂得如何确保其安全性的新手编写的。 从当前很多存在缺陷的智能合约中可以清楚地看出这一点。

比特币的解决方案简单地放弃图灵完备性。 这使合约更容易分析,因为合约可能的结果更容易列举和检查。

以太坊的解决方案是将确保可靠性的责任托付给智能合约的起草者。 合约的起草者应确保合约按照他们的意图进行。

智能合约并非真正的合约(至少在以太坊)

虽然在理论上将确保合约可靠性的责任交给起草者是个不错的办法,但实际操作中这已经产生了一些严重的集权后果。

以太坊以“代码即法律”的观点发起。 也就是说,在以太坊合约是最终的权威,没有人可以否决合约。 这个观点向智能合约开发者表达的意思是他们必须依靠自己。 如果你搞砸自己的智能合约,那么从某种意义上讲,你是咎由自取。 当DAO事件发生时,这导致了崩溃。

DAO是“分散的自治组织(Decentralized Autonomous Organization)”的简称,他们在以太坊创建了一个基金,以此来展示该平台可以做什么。 用户可以将资金存入DAO,并根据DAO投资收益获得回报。 投资决策会由去中心化的众包形式做出。 DAO在以太币价值20美元时募集了大约1.5亿美金。上述的这些事情看上去很美好,不过千里之堤溃于蚁穴。 因为代码的可靠性没有很好地保护,最终导致有人想出了一个途径盗取了DAO所有的资金。

许多人将盗走DAO的人称为“黑客”。 在这种意义上,这个“黑客”找到了一种方法,以智能合约起草者没有考虑的方式从合约中盗取了资金,这是个真实的例子。 但从更广泛的意义上讲,此人根本不能为称作黑客,他只是一个正在利用智能合约中的瑕疵获利的人。 这与有想法的注册会计师(CPA)利用税务漏洞为其客户节税并无太大区别。

在此之后,以太坊决定不再视代码为法律,并将存入DAO的所有资金归还。 换句话说,智能合约的起草者和投资者做了一些愚蠢的事情,而以太坊的开发者决定将他们解救出来。

打开网易新闻 查看精彩图片

这起事件的影响完全有据可查。 Ethereum Classic平台因此诞生,保留了DAO并延续“代码即法律”的原则。 除此之外,开发人员开始回避使用以太坊图图灵完备属性的智能合约,因为它证明很难保证可靠性。 当前ERC20和ERC721标准是以太坊中使用最为频繁的智能合约模板,需要着重指出的是,这两种合约都可以在没有任何图灵完备性的情况下编写。

智能合约只是用于数字化的无记名票据(digital bearer instruments)

即使不具备图灵完备性,智能合约仍然听起来不错。 毕竟,谁喜欢不得不去法庭上获得本就该属于他们的东西呢? 相比普通合约,使用智能合约来实现这一点不是更容易么?

例如,房地产行业不就能因为智能合约受益么? Alice可以证明她拥有房子, Bob可以为房子付款并获得它。 没有所有权问题,机器可以快速、无需信任地执行合约,不需要法官,行政机构或产权保险。 听起来很棒,不是么?

这里有两个问题。 首先,由中心化组织负责执行智能合约并不是真的不可靠。 你仍然需要信任这个中心化组织才能执行合约。 无需信任是智能合约的关键特征,因此中心化的执行机构使得只呢呢合约失去了意义。 为了让智能合约真的无需信任机制,你需要一个真正的无中心的平台。

第二个问题就此引出。 在去中心的环境下,智能合约只有在数字版本与实体之间存在某种明确的联系时才能有效代替普通合约。 也就是说,只要房子的数字版本改变所有权,其实体必须改变所有权。 数字世界需要联系物质世界。 这被称为“测试准则问题”(oracle problem)。

当Alice将房子转让给Bob时,智能合约需要获知她实际上将房子转让给了Bob。 有几种方法可以做到这一点,但它们都有相同的基本问题。 那就是有一个被信任的第三方在现实世界中验证转让行为的发生。

打开网易新闻 查看精彩图片

例如,房子可以在以太坊上表现为一枚不可替代的令牌。 Alice可以通过原子交换(Atomic Swap)将房子转移给Bob以获得一定数量的以太币。 问题在于,Bob需要相信这枚令牌实际上代表了房子。这里必须有一些测试准则确保代表房子的令牌的转让在实际上意味着该房子实际所有权的合法转让。

此外,即使政府当局承认令牌实际代表房屋,那么如果令牌被盗,情况又会怎样, 这房子现在属于小偷吗? 加入令牌丢失怎么办? 房子不能再出售了吗? 代表房屋的令牌可以重新签发么? 如果可以的话,应该由谁来执行呢?

在去中心化的的背景下,将数字与实物资产联系起来是一个棘手的问题,无论它是水果,汽车还是房屋。 实物资产受您所处区域的政府或其他机构管辖,这意味着除了你创建的智能合约之外,他们还需要相信一些其他的东西。 这意味着,智能合约中的所有权并不一定等于现实世界中对同一事物的所有权,并且会像普通合约一样面临信任问题。 需要信任第三方才能履行的智能合约也就不再具有无需信任任何人这个其最大功能(或者说优点)。

即使是电子书,健康记录或电影等数字化资产也会遇到同样的问题。 这些数字资产的“权利”最终由其他一些权威机构决定,而测试准则需要被信任。

从这个角度来看,测试准则只是现实中法官的简化版本。 除了获得仅依靠机器来履行合约和简化的强制执行规则的好的,你实际要面临的复杂工作是用代码将合约所有的可能情况以及主观性和人为判断的风险全都考虑在内。 换句话说,签订一份“智能”的合约意味着你需要编写复杂的代码,同时还需要信任某个人或组织。

唯一不需要测试准则的合约标的就是数字化的无记名票据。 本质上,交易双方不仅仅需要数字化的,而且合约标的必须是无记名票据。 也就是说,令牌的所有权不能在智能合约签订平台之外拥有依赖关系。 只有当智能合约的标题是数字化的无记名票据是,智能合约能在无需信任的基础上被执行。

结论

我非常希望智能合约可以比它目前看起来更加实用。 不幸的是,我们人类对于合约的理解包含了大量的假设和无需清楚说明的判例法。

此外,事实证明,利用图灵完备性是一种破坏智能合约的简单方法,并导致各种意想不到的行为。 我们应该标记那些不具备图灵完完备性的智能合约平台,而不是有图灵完备性的那些。 DAO事件也证明了被隐隐相信和帮助解决争端的契约精神确实存在,这点超乎我们的想象。

智能合约简直太容易搞砸,难以保证可靠性,很难广泛地做到无需信任、并且依赖太多外部事物使它适用于大多数场景。 智能合约唯一具有无需信任这一特点的场景是比特币这样的基于去中心化平台的数字化的无记名票据。

编译组出品。编辑:郝鹏程