文章作者 | 不碎
文章字数:2340字左右
阅读时间:约3.5分钟
导语:本文编译自比特币开发者Jimmy Song的文章《The Truth about Smart Contracts》。近几年,随着区块链、加密货币概念的发展,智能合约也开始被广泛的接受,然而就像最初的人工智能被过度神化一样,智能合约也被人类寄予厚望。在Jimmy Song的这篇文章中,将智能合约与事实结合讨论了其在现实场景中的局限性,证明了智能合约其实并没有想象中的那么智能。
一份合约通常可以把合作双方或多方与未来的某件事物联系起来,比如买卖房产、汽车保险等。而智能合约与普通合约的不同之处在于,智能合约当中所有的执行条件都由计算机代码来评估并完成。
在现实生活中,当我们的合约出现问题时,我们只能依赖诸如律师和法院这样可信的第三方来主持公道;而在智能合约中,根本不存在信不信任第三方的问题 ,因为计算机代码就能够即时客观的帮我们执行合约的所有条款,它相当于一个优秀的法官。
这样听起来“智能合约”似乎很高大上,它应该像人工智能那样“聪明”。但事实却并非如此。
一份合格的智能合约,应该包括一切可能发生的情况。因为智能合约的核心要义就是“即使在最阴暗的环境中,也要做出最公正的裁决”。然而从目前的情况来看,我们所接触到的智能合约都是遵循程序员设定的一系列规则来达到目的的。它完全不考虑规则以外的因素。这也就意味着,在规则之外没有任何让你犹豫不决和法外留情的余地。
这种情况就引出了我们接下来要讲的问题。
1.智能合约真的很难保证安全性
这一点从以太坊的身上就能够看出来。
由于以太坊本身是一个智能合约平台,因此很多人认为只有以太坊才能够实现智能合约。但这其实是认知上的一个误区,从1995年在比特币被发明之前,智能合约的概念就已经存在了;到了2009年比特币开发了一种相当广泛的智能合约语言“脚本(Script)”。
而以太坊与比特币之间的区别在于,以太坊是图灵完备的,通过该平台可以实现种类更多、条款更复杂的合约,当然这样做的代价是,复杂的合约内容使其变得更加难以分析。通常情况下,复杂度与发生漏洞的机率是成正比的;复杂度越高,发生漏洞的机率就越大。
而要在图灵完备的情况下执行这样一份合约也是非常棘手的,因为如果这时你想要证明你的合约是安全的,就相当于要证明计算机程序中没有BUG一样。但这个世界上就根本不存在没有BUG的计算机程序啊!
一个普通人至少需要多年的学习,通过层层考试并不断地实践才能成为一个合格的法官,但是现在写智能合约的门槛相当低,很多程序员都是新手,他们其实并不知道如何来保证这些合约的安全性。
就像去年11月初,Github上的新手devops199误删除了一个智能合约的库函数就导致了大概三亿美元的以太坊被锁死,至今尚未解冻。
以太坊处理此类问题的方式是将其代码安全性的责任负担在程序员的身上,由他们来解决代码可能出现的安全性问题,而以上devops199的例子就证明,并非所有的程序员都能够担此重任。
除此之外,以太坊提出的理念是“代码即法律”,以太坊合约就是最终的权威,没有人可以否决这个合同。但是当年的The Dao事件使以太坊回滚了交易记录,代码本身的漏洞招致了黑客的攻击,其实这种行为与一个脑筋活泛的注册会计师找出税收法的漏洞以帮助其客户省钱没什么不同。是代码本身的漏洞打了“代码即法律”的脸。
这件事导致了以太坊的分裂,同时也使不少开发人员开始建议避免图灵完备以保证智能合约的安全。当前最受欢迎的两个以太坊智能合约标准是ERC20和ERC721,这两种类型的合约都是不支持图灵完备的。
而与以太坊不同,比特币一开始便选择通过放弃图灵完备来解决问题,以降低智能合约的复杂度来提高合约的可查性,从而提高合约的安全性。因为在非图灵完备的情况,程序所能够引发的状态是可以通过枚举的方式来列出来的,这样更方便检验。
2.智能合约真的没有去信任
即使没有图灵完备,智能合约听起来也还不错,毕竟不需要法院、律师这样的中介,在不需要信任第三方的情况下就能自动执行,效率势必会比普通合约高得多。
但是这里还有两个问题:
去信任是智能合约的核心特征。但即使智能合约本身是去信任的,合约的执行依然需要依赖第三方;
在去中心化的环境里,要想智能合约真的起到作用,虚拟世界和现实世界之间必须要有一个强关联关系才可以;
以买房为例:如果房子相当于以太坊区块链世界中的ETH代币,那么在虚拟世界里A将房子的所有权转让到B的名下,就可以换取一定数量的ETH,而此时在现实世界中,B也要相信这些ETH实际上就相当于房子的所有权。因此他们还是需要一个权威第三方来证明当B交出ETH之后他就能够在法律上获得这套房子的归属权。
这里就涉及到了“预言机”的问题,预言机是智能合约与外部环境进行数据交互的唯一途径,外部数据作为智能合约的输入参数经过预言机流入智能合约程序。只有通过预言机才能够确定,在虚拟世界和现实世界中你的状态,以及履行合约的情况是否一致。本质上来说,你还是需要信任流入预言机的数据是客观准确的,这与智能合约去信任的思想严重相悖。
如果想的再长远一些,即使当权威机构说这个代币实际上代表房产,但如果这些代币被盗了呢?被盗之后房子属于小偷吗?如果代币丢失了怎么办?这座房子就不能再卖了吗?可以重新换取新的代币来代表这套房子的所有权吗?如果是这样,谁来做这些事情?
而在没有预言机的情况下,唯一能够发挥作用的就是数字不记名工具。从本质上来讲,“数字不记名工具”意味着代币的所有权不能在智能合约所属平台之外再具备任何有依赖性的关系。因此,智能合约大部分时候,只有在像比特币这种内生型代币(不需要外部数据的输入)上才有可能做到真正的去信任。
我们当然希望智能合约能够比普通合约更有效,但不幸的是,现实生活中的很多合约,都包含一系列的假设和既定的法律体系;而且事实也证明,图灵完备的智能合约很容易带来意想不到的结果。
所以我们给智能合约的标签应该是“图灵易受攻击”,而不是“图灵完备”。
※更多精彩内容,请关注哈希派公众号(ID号:hashpai)获取