完美?不存在的!智能合约既不“智能”也不“安全”
发布时间:2019-05-21 12:26来源: 网络整理如今,智能合约如云计算、人工智能一样,在人群中掀起一波热潮。依附着“区块链”和“以太坊”这样“高科技”流行词,智能合约显得十分新鲜和高大上,然而事实真的是这样吗?
其实早在1994年,智能合约的概念就被提出了。它的提出者是一个名叫Nick Szabo的前乔治华盛顿大学的法学教授。就智能合约的早期定义来看,智能合约是一套以数字形式定义的承诺(promises),是一个很朴实的概念,与“高大上”一点也不沾边。
简单来讲,智能合约是多方参与场景中的共识规则,智能合约以数字形式存在的属性,意味着其不得不写入计算机可读的代码中,计算机程序编写具有法律效力的合约。这个合约是可以自动执行的,并且,一旦被部署便不能修改。
智能合约的数字化和由计算机执行也使得它无需任何信用背书,也就是说,在智能合约的履行过程中,不需要依赖第三方来执行各种条款。既不需要“签订”合约的双方的言行一致,在合约执行出现问题时,也不需要依靠律师或是法律制度来解决问题,因为智能合约可以及时、客观地执行约定好的各个事项。
这样看来,智能合约中的“智能”一词,并不像人工智能那样,涉及到意识、自我、思维甚至无意识思维等等高深的问题,也不能单独的成为一项可以和基因工程和纳米科学相媲美的尖端技术。
智能合约中的“智能”只体现于合约的执行不依赖任何一方的合作,而就“及时客观”执行约定的内容,智能合约可以代替一个常规化的人来工作,但并不能被称作是真正的“智能”,因为往往现实中,“智能合约”显得过于墨守成规。
简单来讲,智能合约只是一段代码,由区块链交易触发。在区块链点对点的特性下,智能合约得以实现,并弥补了一些传统合约的不足之处,但智能合约不仅不是“完美”的,反而由于自身缺陷存在很多安全问题。
智能合约“不完美”
智能合约相较于传统合约,拥有很多优势,最重要的一点就是省力。在区块链上,所有人共同维护一个账本,在账本上的数据都是可追溯的、透明的、无法篡改的。它有效地降低了传统合同中,单方违约和律师等第三方参与带来的时间和经济上的成本。在智能合约中,面对潜在的纠纷,无需耗费当事人的时间和精力,一切可以交给代码来处理。
但是,目前的智能合约由于自身的不完善,其安全性面临着巨大的挑战。据相关数据显示,2011年至2018年,由智能合约安全事件导致的经济损失达12.4亿美元,仅低于由交易安全平台安全事件导致的金额损失(13.44亿美元),在所有安全事件所造成的经济损失中排名第二。
其中,比较知名的有,2016年6月的DAO安全漏洞,导致了5000万美元的损失;2017年7月的Parity多签名钱包两次安全漏洞,分别导致3000万美元、1.52亿美元的损失;2018年4月,由于一行代码的安全漏洞引发其64亿人民币市值几乎归零的BEC代币被盗事件。
就以太坊智能合约而言,其中的安全问题包括合约编程Solidity漏洞、编译器错误、以太坊虚拟机错误、对区块链网络的攻击、程序错误的不变性以及其他尚无文档记录的攻击等等。
“完美”真的很难
很多人认为只有在以太坊上或是在区块链2.0时代以后才开始应用智能合约,这是错误的。早在2009年,区块链1.0时代,比特币就已经使用了一种名叫Script的语言来拟定比特币交易系统的智能合约。
但是,比特币的智能合约语言同以太坊版本的区别在于,一个是图灵非完备的,一个是图灵完备的。也就是说,比特币的智能合约语言要更简单一些。而以太坊用Solidity语言是图灵完备的,一切可计算的内容都是可以计算的,因此在语言内部形成了一个闭环可以循环计算。在solidity上虽然可以运行更复杂的智能合约,但是与此同时,其分析难度也随之增加了。
简单来讲,安全可靠地执行图灵完备的智能合约相当于证明一个计算机程序没有错误,但是让一个程序没有任何Bug是几乎不可能的,就算是最优秀的程序,也会存在一些逻辑漏洞,不断地需要修复。