2018-08-02 石榴区块链B16视频 刘胜 | 首席架构师的颠覆观点:图灵完备的智能合约不是区块链的必由之路 | 梳理编辑:赵黎 | 视频制作:于戈
image.png活动行 B16 Talk:区块链的新启蒙时代(6月16日)
活动行 B16 区块链思想节:开启区块链的新启蒙时代(7月16日) <<<
活动行 B16 区块链思想节:开启区块链的新启蒙时代(8月12日)
关于区块链1.0、2.0、3.0的概念,最早在《区块链:新经济蓝图及导读》一书中提出。本书把比特币为代表的密码学数字货币归为区块链1.0,把以太坊为代表的智能合约平台归为区块链2.0,而对于区块链3.0并没有给出严格的定义,只说了“超越货币、经济、市场”的公证类应用和协作类应用。
对于区块链3.0是什么,我们先不讨论。
我们发现一个现象,目前很多已上线的公有区块链(简称公链)都说自己是区块链3.0。这其中就隐含一个假设,即大家默认了区块链3.0是包含区块链2.0的。而区块链2.0的代表——以太坊(Ethereum),其作为“下一代智能合约和去中心化应用平台”,最大的特点就是支持图灵完备的智能合约。
换句话说,很多人潜意识就认为——“图灵完备的智能合约是区块链的必由之路”。
但这个观点正确么?
接下来刘胜讲的内容,就是要挑战这个观点!
刘胜,B16思想节讲者,联动优势的首席架构师PS:公链三大法宝——多链+智能合约+跨链
在次之前,我们需要先了解几个概念——
● 什么是图灵完备?
● 什么是智能合约?
● 什么是图灵完备的智能合约?
这里,就不得不说到很重要的三个人物。
01 阿兰·图灵(Alan Turing)提出图灵机模型,奠定了现代计算机的理论基础
阿兰·图灵(Alan Turing)第一个人物是阿兰·图灵(Alan Turing),他是一位英国的数学家,是现代计算机科学之父,也是人工智能之父。在二战期间,他带领同事研制出的密码破译机,可高效地破译当时德军最强大的“谜”式密码机,并在盟军诺曼底登陆等重大军事行动中发挥重要作用,被誉为二战英雄。历史学家认为,他让二战提早了2年结束,至少拯救了2000万人的生命。
1936年,他提出 “图灵机(Turing Machine)”的概念。
图灵机有点像一个水泵,一头是输入,一头是输出,除此之外,它还有一个存储器能保存一些内部状态,以及一个控制器可以读取预置程序代码并加以执行,来控制输出的结果。现在大家经常用的计算机、笔记本电脑、智能手机都是基于图灵机模型的。对于计算机来说,鼠标、键盘等都是输入设备,屏幕、声卡等都是输出设备,内存是保存内部状态的存储器,CPU就是程序控制器。其实从某种意义上来说,“人”本身,也是基于图灵机模型的。
图灵机模型的形式化解释那么,什么是“图灵完备(Turing- Completeness)”呢?
图灵完备,就是指一切“可计算”的逻辑都能被计算。
如果一个计算系统具备图灵完备性,意味着该系统功能和通用图灵机相当,可以互相模拟。
如果一个计算机语言具备图灵完备性,意味着该语言能够和通用图灵机完美结合,这也是现代计算机语言所能拥有的最高能力。
那么,什么是“可计算(Computable)”的呢?
“可计算理论”是数学的一个小分支,但它为“计算机科学”的独立发展打下了基础。
太形式化的解释,这里就不讲了,我举一个“不可计算”的例子。
比如,“今天晚上吃什么饭?”,这个问题就是不可计算的,任何计算机程序都是算不出来的,因为这里存在太多的假设。
但是,如果我们增加了足够的前提条件和判断规则,比如, “工作日晚上吃快餐面,周末在家吃米饭”、“今天7月16号是周一”、“周一是工作日”,那么,这个问题就是可计算的了,能够产生确定的结果——“吃快餐面”
02 尼克·萨博(Nick Szabo)提出智能合约概念
尼克·萨博(Nick Szabo)提出智能合约概念第二个人物是尼克·萨博是智能合约之父。他在1994年提出“智能合约(Smart Contract)”的设想,并在1996年发表论文来阐述该概念。文中解释到,“一个智能合约就是一系列数字化形式的承诺集合,还包含一系列相关协议,以确保各参与方能够履行这些承诺”。
可以把智能合约与传统合约做一些对比。与传统合约不同的是:
- 智能合约不是给律师、法官等“人”来看的,而是给机器看的;
- 智能合约不仅仅包含合约条款等信息内容,还包括履行合约所需的可执行程序代码;
- 智能合约不是在违约之后执行合约条款,而是在违约发生之前加以控制,避免发生违约,最大限度的减少恶意和意外的状况;
- 智能合约不是在事后由人为选择性履约,而是在事中有程序自动履约,最大限度减少使用信任中介,从而降低交易过程成本,如欺诈损失、立案判决、法律仲裁、司法执行等的成本。
- 智能合约避免“履约结果”被逆转,比较容易实现的履约结果的终局性。
这里面,最基本理念,就是要 把这些合约条款嵌入到软件或者硬件里面去。
传统合约通常都会涉及资金或资产。而典型的智能合约应用,也和数字化资金或数字化资产密切相关。
- 第一类是可编程数字现金(Digital Cash)。如1998年尼克·萨博开发的比特黄金(BitGold)系统,又如2009年中本聪推出的比特币系统(Bitcoin)。
- 第二类是合成资产(Synthetic Assets)。包括各类金融资产、金融衍生品,以及各种不同债、股比率的资产组合、不同期限的资产组合、不同套利模式的资产组合、不同免责条款的资产组合等等。
- 第三类是智能资产(Smart Assets)。包括能够内置各种合同条款的资产,如某种智能锁,可以用在共享单车、共享充电桩、共享住宅门之上,此时完全不需要一个中心化的公司来运营,而是可以在一个无中心的共享经济体里,分布式地来运营。例如有一种智能门锁,用户可以将租借费通过数字资产转账给房主,然后智能门锁就可读取区块链上的相关交易状态,自动打开房门让用户入住,而无需任何中介机构参与。
普及智能合约时存在很多障碍。
我们发现,智能合约的概念提出的前20年,智能合约在商业领域的实践几乎停滞。
为很么实践严重落后于理论?至少有三个方面的障碍:
- 其一是法律障碍。智能合约到底是不是合约,法律是滞后的;
- 其二是实现障碍。一方面是智能合约依赖于一些可信的数据,而在区块链出来之前,这个基础不存在;另一方面,缺少一个支持“可编程交易”的一个支付体系。在1998年,尼克·萨博创造了比特黄金系统(BitGold),但不太成功,再后来, 2008年中本聪发表了“比特币白皮书”(一种点对点的电子现金系统),尼克·萨博发现这正是他想要的东西。可以说,比特币和区块链技术的兴起为智能合约带来新的转机。
- 其三,是执行障碍。由谁执行?怎么保证执行的正确性?如果出现错误,由谁来监督或者仲裁?比特币和区块链技术通过实现分布式的执行,可以解决了这一障碍。
但是,比特币系统的可编程脚本存在一个严重的限制,即缺失图灵完备性。
- 首先,脚本对输入有严格的限制。即不能访问外部系统,也不能接收外部消息,甚至没法访问比特比系统的一些账本数据等信息,而只能访问当前交易的少量数据内容。
- 其次,脚本无法保持状态数据。不管脚本执行正确还是失败,都没办法把结果保存起来,只能输出交易,没有状态。
因此,有很多人甚至认为,
“不具备图灵完备性,是比特币系统的一大缺陷(BUG)”
03 维塔利克·巴特林(Vitalik Buterin)发起以太坊项目,意图解决比特币非图灵完备的"缺陷"
维塔利克·巴特林(Vitalik Buterin)第三个人物是维塔利克·巴特林(Vitalik Buterin),他是一个90后,17岁开始研究比特币,18岁创办了《Bitcoin Magazine》杂志,并发表了很多观点性文章,成为当时很有影响力的一位意见领袖。当他看到由于比特币系统功能过于固化,导致众多山寨币系统泛滥,因此提出要做“下一代智能合约和去中心化应用平台”,并发起了以太坊(Ethereum)项目,受到众多人追捧。
这所谓“下一代智能合约”,实际上就是“支持图灵完备的智能合约”。
一个支持图灵完备的智能合约模型,是这么样一个东西:
- 它是建立在区块链技术(Blockchain)或分布式账本技术(DLT)基础上;
- 它即可以从外部接收交易(Transaction)和事件(Event),也能够对外输出交易或事件;
- 它在内部即保存了合约价值(Value),还保存了合约状态(State);
但是,智能合约支持图形完备性,有利也有弊。
- 优点是灵活和方便,可以讨好去中心化应用(Dapp)的开发人员。开发人员很容易写出一个智能合约,实现满足具体业务场景的上层应用。
- 缺点则是在于过度灵活和方便,带来的复杂性。由于针对开发人员友好,它内部可以容纳极大的复杂性,因此,也就需要一个复杂的环境来执行,比如以太坊虚拟机EVM等。
复杂性带来恶劣的效果,就是低效和不安全。
- 复杂性通常意味着低效。一方面是在单节点环境下的执行低效。例如简单计算一个哈希值,在以太坊EVM虚拟机中执行的时间,要比直接执行慢约50倍。另一方面,智能合约执行不是仅仅执行一次,而是需要在所有的区块链全节点上都从头到尾地重复执行。
- 复杂性永远是安全的敌人。在复杂的分布式场景下,图灵完备的智能合约本身以及智能合约执行环境中,都可能隐含这未知的安全性问题。之前介绍图灵完备的概念是,我们知道,图灵完备的计算机语言是可以互相模拟的,因此,我们常见的C/C++、Java、C#、Python等计算机编程语言的源代码,理论上都可以翻译成图灵完备的智能合约。但是,当我们如果去问任一位软件工程师,“能否保证自己开发的软件程序没有缺陷(BUG),没有安全问题呢?”,你就会发现,谁也不敢拍着胸脯保证这些。
04 安全问题是图灵完备智能合约永远的痛
我们先来看几个智能合约的安全事件:
- 2016年,The DAO事件中,黑客利用智能合约漏洞,围绕The DAO项目募集来价值1.5亿美元的以太币发起攻击,并将其中当时价值相当于7000万美元的以太币转走。虽然后来通过“硬分叉”找回了被转移走的以太币,但这也破坏了区块链“去中心化”的理念,并造成以太坊社区永久地分裂成ETH和ETC。在金融行业里,这一类“无人监管的资金池”是严重不合规的,极有可能会被黑客或者其他人盯上。
- 2017年,以太坊客户端Parity多重签名合约漏洞,导致93万个以太币被锁住,谁也解不开,从而永久的被丢失。
- 2018年,美链BEC合约一个低级的溢出漏洞被黑客所利用,可以无限制地产生新的代币。当天量BEC代币从两个地址转出后,进一步引发抛售潮,当天BEC价格暴跌94%,其价值几乎归零。
最近,安全公司知道创宇(KnownSec)发布了《区块链安全风险白皮书(2018)》,其中一些数据显示,在2108年上半年,区块链安全事件数量及损失金额都远超之前几年的数倍甚至数十倍。从事件类型上来看,今年由于区块链自身机制导致的安全事件,其数量虽然比区块链生态要少,但金额却远超42%,而其中,区块链自生机制安全问题,智能合约的问题排在首位。
所以智能合约本质上,应该是一种预先设置好、确定的规则,而不是任意的逻辑。
- 从合约性上讲,它是预制规则,而不是法律合约;
- 从智能性上看,它只需要支持有限的可编程性,而不是支持无限的“智能”;
- 从完备性上看,它也无需“图灵完备性”;比如法律条文,越清楚、越明确、越简单越好,而不是越复杂越好;
- 从交互性上看,它也无需访问外部系统。因为它需要上万个节点重复地去执行,如果允许访问外部系统,由于访问的时间、网络等原因导致访问结果不同,就达不成一致,执行结果就作废了。
05 重新理解智能合约
不同行业有不同的思维模式。
- 互联网行业是“遇见问题”,遇到什么问题,就解决什么问题,讲究系统的快速迭代。
- 金融行业则是“预见问题”,对于所有可能发生的后果,都需要预先判断,并有针对性的应急处理预案,否则系统就不能上线。
由于图灵完备的智能合约引入了太多的不确定性和安全隐患,因此它不适合比较严肃的金融场景。将智能合约用于一些不涉及“钱”的简单场景,如在线预约等,是否支持图灵完备并不重要;但是一旦用于金融场景,则需慎重、再慎重。
不同行业有不同的思维模式根据我们的实践经验来看,将智能合约用在金融场景上,一定要做好限制、做好隔离,提升安全性和可控性。
- 限制:一方面将其逻辑固化,防止被篡改;另一方面,限制其逻辑灵活性,避免图灵完备。
- 隔离:对所有智能合约,做好调用隔离、数据隔离、执行隔离,避免智能合约之间互相影响。
总之,我们需要重新理解“智能合约”。它是运行在区块链之上,由多方自主执行的预置规则,用于对交易进行检查和限制。
这种场景下,它不需要太“智能”,更不需要具备“图灵完备性”。
(END)
网友评论