智能合约( Smart Contract )的概念是由计算机科学家、密码学专家尼克·萨博( Nick Szabo )在 1994 年提出来的。本节宏观介绍一下智能合约的最重要的几个特点。智能合约不是本书论述的主线,但是的确是区块链社区呼声很高的一个发展方向,我们来看看它和 Web3.0 有着怎样的共同目标,而在技术上又有怎样的差异。
基于区块链
萨博提出智能合约的这个概念,是受到自动售货机的启发,网上很多文章说,他被自动售货机砸中,就像牛顿被苹果砸中,于是诞生了智能合约的思想。智能合约是自动执行的合约,这跟售货机类似。投币之后,合约是自动执行的,不需要人的参与。
智能合约最大的特点是基于区块链来运行。实际上,即使程序内容不是个我们通常印象中的合约,只要是运行在区块链上的计算机程序,都叫做智能合约。从技术上来讲,智能合约是要基于区块链上的虚拟机的,比特币区块链上不能运行真正意义的智能合约,因为比特币没有支撑代码运行的环境(严格来讲比特币有自己的脚本,但是功能非常少,不能运行任意逻辑的程序。虽然比特币之上的闪电网络也可以认为是广义的智能合约,但是一般认为,比特币不是一个智能合约平台),而之后的很多新一代的区块链,例如 Blockstack ,都是有虚拟机的,所以用户可以部署自己写的程序到上面,在大家的共识下去进行多方监督的,不可人为停止的计算。智能合约思想是比特币代表的第一代区块链思想的拓展,由通过共识保证数据不被人为破坏,到通过共识保证计算不会被人为破坏。
从 1994 年提出智能合约的概念,到 2017 年智能合约真正在社会上小有影响力,这其中间隔了很多年,是什么阻止了智能合约的普及呢?答案就是不可篡改的数据。而区块链的诞生,为人类第一次带来了不可篡改的数据,所以才让智能合约又回到了人们的视野中。我们的工业自动化程度最近几十年有了飞速的发展,智能合约可以理解为人与人关系的自动化过程,为何却发展的如此之慢呢?原因就是工业上处理的是物和物之间的关系,而智能合约处理的是人和人之间的关系,而人是充满怀疑的动物。区块链带来的是不可篡改的数据,智能合约基于区块链来运行,相当于所有交易都是是可跟踪的,不可逆的。于是,我和你通过智能合约来达成合作,其实我是不需要信任你的,因为一切都是可验证且不可篡改的。
智能合约的执行通常也都会涉及到钱的问题。早在 1998 年,尼克·萨博就设计了一种叫比特黄金的去中心化的数字货币,但是没有区块链技术的支撑,比特黄金只是一种思路,没有办法运行起来。区块链带来了加密货币,为智能合约的成功带来了一个新的要素。要保证计算机程序能够强制执行合约条款,需要合约方提前把钱存入到合约中,类似于网购时把钱存入到支付宝中,注意这些钱于是就不再属于任何人了,相当于让机器实现了自己的经济独立,这是计算机历史上从来没有的事情。
总之,区块链是智能合约运行的基础,这是智能合约的第一大特点。
社会扩展性
智能合约的相关的另外一个概念是:社会扩展性。通常我们基于本国文化和法律制定的很多贸易规则或者公司制度,推广到其他国家就会受阻,这就是所谓的社会扩展性比较差。而智能合约基于代码和数学规则。代码是清晰的逻辑,数学规则是全球通行的,所以智能合约的社会扩展性就会很好。
智能合约也称“代码化的合约”,代码是结构化语言,是计算机使用的语言,区别于人类使用的自然语言,代码是没有歧义的,是规则明确的。而传统合约基于自然语言来写的,有歧义。这就为何最终合约破裂后合约双方往往会有争执,对付公堂。而有意思的是,即使到了法院,法官使用的法律本身也是自然语言写成的,也一样是有歧义的,这就是为何往往审理都会旷日持久了。如果最早合约都是用代码来完成的,这些麻烦就都可以避免了。尼克·萨博说,法律是潮湿的代码,代码是干燥的法律。
智能合约的真正落地有赖于数字社会的建设,技术上面临很大挑战。
第一个挑战是跟物理世界的通信问题,业内有个相关术语叫做”预言机“。区块链保证了合约执行的数据安全,但是如果智能合约涉及到了物理世界的输入和输出,那么还是有可能要部分基于对人的信任,这样智能合约的作用也就打了折扣。我们以一个租房合同为例,智能合约订立好之后,是需要输入的,也就是租户的付款信息,假设他使用法币通过银行付款,那么就需要银行提供对应的 API 来证实这次转账过程,这需要银行加快数字化建设。如果使用数字货币,那么输入本身就是数字化的了。再说输出,如果真的还是需要物理的钥匙去开门,那么租户还是会担心房东耍赖的。如果是智能门锁,到时候开锁过程也许只是需要合约给租户的一个数字秘钥即可,甚至如果门锁更加智能,也有可能直接是租户跟门锁签订合同了,完全不需要房东参与。
第二个挑战是状态爆炸问题。智能合约执行过程中用到的数据,被叫做状态( State )。智能合约之所以可信,是因为有区块链在底层去保持不可篡改的数据。但是如果数据量很大,而区块链是一个只增不删的存储媒介,那么数据就会不受控制的膨胀,也就是所谓的状态爆炸。让全球诸多的节点去永久保存已经爆炸了的状态,成本上是很难负担的。
总之,智能合约的规则简单明确,有很好的社会扩展性,但是个人觉得还有很长的路要走,很多难点是否可以最终突破也的确尚未可知。
去中心化经济
同样都是区块链的应用方向,智能合约和 Web3.0 未来肯定会有各种融合,但是目前来看更多的是两条不同的发展道路。智能合约社区思路倾向于不去依赖原有的 Web 技术体系,创建一套新体系。而 Web3.0 则是比较渐进的思路,用区块链去解决 Web2.0 的痛点。
但是智能合约和 Web3.0 要达成的目标是一致的,概括起来就是要实现“去中心化经济”,
去中心化经济的一大表现就是去中介,而最大的中介就是平台。我们日常也可以用到很多代码化的合约,类似于使用共享单车,或者是使用支付宝的担保交易,这些也都很方便了,但是他们都不是智能合约。因为这些合约,不是基于不可篡改的数据,而是基于对大公司大平台的信任。我们无法验证支付宝数据库中的数据,因为数据是私有的,我们只是选择信任蚂蚁金服这家公司。去掉中介,好处很多。首先是灵活,平台不会让我们随便的使用它们的数据做各种智能合约,这就很不方便,而使用区块链则会更灵活。其次是安全,区块链都是顶级密码学专家搞的,安全性要高于企业系统,而且是以一个近乎免费的价格提供给所有人使用的。其他类型的中介也都一样是高成本和不灵活的。传统合约,基本都离不开可信第三方,离不开中介,法院,银行,券商,公证处,拍卖行,都是各种各样的中介。而智能合约是可以去中介的,这样带来的是更透明,高效,低成本的世界。
智能合约之上可以拓展出一些新的功能,常见的有两种形式:一种是发 Token ,另一种是发展 DAO 。发 Token ,就是俗称的发币,作用是把资产数字化,方便自由流转,基于 Token 的玩法有很多,跟本书主线无关不展开。DAO 就是”去中心化自治组织“,想象一个没有管理层的公司,大家都是基于智能合约的明确规则来工作,这样的公司就是一个 DAO ,例如当前比较知名的一个项目是 MakerDAO 。
结论
以上就是对智能合约的介绍了。总结起来智能合约有三个特点,第一个是基于区块链,因为区块链是目前唯一一个提供不可篡改数据的技术。第二个是规则透明,有良好的社会扩展性。第三个是以”去中心化经济“为目标,摆脱对中介的依赖。总之,智能合约让我们看到了可编程金融和可编程社会的美好前景,但是技术上的还有非常大的挑战。个人认为,智能合约的大方向是完全没有问题的,主要的问题是对当前 Web2.0 继承性不够,颠覆性太强,落地困难,而本书的 Web3.0 思路,则相对而言对 Web2.0 的改动小很多,继承了了 Web2.0 的基本架构,各个企业可以相对平稳的切换过来,所以落地容易。