大家观察 | 刘胜:智能合约的是与非

2字数 10998阅读 618

根据联动优势首席架构师刘胜先生2018年8月26日晚间在DAGA | Blockchain & AI (核心群)所作的在线分享语音进行整理。

刘胜,联动优势科技有限公司首席架构师,电子学会区块链专委会委员,清华x-lab区块链公开课课程导师。曾获2015年北京市科技进步奖三等奖;参与工信部《可信区块链》、《支付清算行业可信区块链》等标准编写;承担中国互金协会、中国支付清算协会的区块链和法定数字货币等课题的研究;已提交并公开的发明专利50多项,包括区块链相关专利8项。

群里有很多我们的前辈,还有我的老师在里头,我这时候分享一些东西,主要是抛砖引玉。最开始的题目主要是讨论智能合约的图灵完备性到底是不是必要的。题目是叫:智能合约的是与非,论图灵完备的必要性。

刘胜

这其实不是一个完全学术化的一些观点。主要是在我们之前的实践应用中的一些体会把它总结出来了,对现有的一些观点产生了一些质疑。但是没有完全形成一个最终的观点,所以现在放在这里主要是供大家进行一些探讨。

我们现在看到很多公链。他们包括用的一些什么posp,分片,智能合约。现在可以认为是基本上是公链进行融资的几大法宝。但是实际上这里面都存在问题,我们今天的主题呢,主要是分享这个关于智能合约可能存在的一些问题。

1.0,2.0,3.0这个概念,大家都应该都了解过或听到过。这个最早是在《区块链新经济蓝图及其导读》那本书中提到的,那是第一本中文的区块链书籍。

在那本书里面呢,把比特币代表的密码学数字货币就归为区块链1.0。把以太坊代表的智能合约平台归为区块链2.0。但是对于区块链3.0的,其实在那个书里面并没有给出非常严格的定义。只说了这个叫“超越货币、经济、市场”的公证类应用和协作类应用,把他都归为区块链3.0。

图灵完备的智能合约是必须的吗?

我们这里也不对区块链3.0下一个绝对的定义。但是我们现在发现一个现象是什么,就是现在已经很多已经上线的公有区块链叫公链,都说自己是区块链3.0。这里面其实有一个隐含的假设就是大家默认为区块链1.0,2.0都已经达成共识了。然后区块链3.0呢,又是包含区块链2.0的。他们都是以区块链2.0代表以太坊,作为一个对标的一个东西。要做超越以太坊或者以太坊杀手等等之类。

以太坊他最开始白皮书里面定义的,就是说把他自己定位为下一代智能合约和去中心化的应用平台。那么它的最大特点就是支持图灵完备的智能合约。也就是说,很多人潜意识就认为图灵完备的智能合约就是区块链的必由之路。但是这个观点,我对此是有一些保留态度。所以我们后面的内容就是对这个观点进行一些挑战。

后面讲的几个概念,如果对于那个深入了解区块链的人可能都已经很清楚了。那我们先做一个引子,就是主要是了解一些相关的一些概念。你说什么叫图灵完备?什么是智能合约?什么又是图灵完备的智能合约?这里面呢,就必须要说到三个人物。

第一个人物是阿兰图灵。他是一位英国的数学家,它可以是现代计算机科学之父也是人工智能之父。学过计算机的应该都知道啊,我们所有现有的计算机都是基于图灵最开始提出的图灵机的模型来设计出来的。

阿兰•图灵和通用图灵机

在二战期间它那个图灵带领他的同事研究出他的一个密码破译机,好几代。可以高效的破译当时德军最为强大的那个“谜”式密码机。在盟军向一些很大一些重大军事行动,行动里面向诺曼底登陆等等,起到了重要的作用。所以他后来不但是计算机之后他还被誉为是二战的英雄,历史学家认为他让第二次世界大战提前两年结束,至少挽救了两千万人以上的人的生命。所以他也是一个很伟大的一个二战英雄。

在1936年他就提出了图灵机的一些概念。图灵机是什么,有点像一个水坝。他一头是输入一头是输出,同时他还有一个存储器,保存了一些内部的状态。还有一些控制器,就是预制的程序,它能够按照预制的程序进行执行。并且来控制它输出的结果是什么样的,我们现在看到的通用计算机、笔记本电脑、智能手机都是基于图灵机模型的,对于计算机来说,鼠标键盘都是输入设备,屏幕声卡等等都是输出设备,内存就是保存内部状态的存储器。CPU就是程序控制器,所以从某个意义来说,你很多东西都能够用到图灵机上。其实从某种意义上讲这个人本身也是基于图灵机的变种。

图灵机模型的形式化解释

什么是图灵完备?图灵完备就是指一切可计算的逻辑都能够被计算,这个这句话有点绕,什么叫可计算?这个很难解释啊,我们下面解释,如果是一个计算机系统具有图灵完备性。就意味着这个系统的功能和通用图灵机相当,就可以互相模拟,就是说所有的图灵机图灵完备的语言系统,它们都是可以互译的互相翻译的互相模拟的。如果一个计算机语言具有图灵完备性那就是说他这个能够跟图灵机完美的结合,这就是现代计算机语言所拥有的最高的能力非常强的能力。所以我们现在看到的c语言、java语言,我们绝大部分语言都是图灵完备的计算机编程语言。

什么是可计算的呢?这个绕的地方就是这个地方,这个其实是有一个严格的定义的。可计算理论是数学的一个小分支,但是他为计算科学打下了一个坚实的理论基础。太形式化的解释呢,这个可以有好几篇论文来解释,这里就不细讲了。我就举一些不可计算的例子做一些反例来来,大家去推理他这个逻辑。比如说我们今天晚上吃什么饭。当然大家已经吃过饭就不说了,我们就说明天晚上吃什么饭这个问题就是不可计算的。任何计算机程序都算不出来,因为这里面有存在太多的假设、前提条件。

但是如果我们增加足够的前提判断规则,比如说,如果是工作日,我们就吃个快餐就行了,如果是周末,我们就在家做米饭。而今天呢,比如说,今天是8月26号啊,是周日,那我们应该是,在家做,那么明天的话,周一是工作日,应该是吃快餐,吃一个方便面啊或什么啊,方便面太低了吧,可能吃了工作餐。那这样的话这个问题就是变成一个可计算的问题了,可以产生一个确定性的结果,我们下周一是吃快餐。

我们涉及的第二个人物就是叫尼克•萨博。他是最早提出了智能合约的概念,被称为智能合约之父。

尼克•萨博提出智能合约

他在1994年的时候就提出了智能合约的设想Smart contract。他在1996年的时候就发表论文来完整地阐述了这个概念。这里面提到一个概念,就是说什么叫智能合约,智能合约就是一个一系列的数字化形式的承诺。一个承诺的集合。同时他还包含相关的一些协议很多协议,这个协议干什么呢,就是来确保各个参与方智能合约的参与方能够履行这些承诺。

可以把智能合约和传统合约做一些对比,就是说与传统合约不同的是呢,智能合约不是写给律师,法官等这些人类看的,而是写给机器来看的。智能合约不仅是包含合约的条款等内容信息。他还包了代码,这个代码就是说履行合约所需要的可执行的代码。

智能合约不是在违约之后去执行合约的条款,而是在违约的前就加以控制,避免违约的发生,最大限度的这个减少这个恶意和一些意外情况,这样的话大家都很严格地遵守这个智能合约的这个相关的条款,不会发生尽量减少合约的发生,甚至不会发生。

智能合约不是在人为,在事后人为的选择性履行,而是在事中,有程序自动去履行,最早减少这个信用中介而降低交易成本。想欺诈立案判决,法律仲裁,司法执行等等很多一些相关的因素。智能合约还能够避免这个履行结果被逆转。他说他没有一个什么叫上诉还在上诉或等等一些仲裁等一些。他的结果就是一个终局,就是一个判决的最终性。

这里面最关键的一点就是最核心的,就是怎么样把这些智能的合约的一些条款嵌入到软件和硬件里面去。传统的智能合约传统的合约一般都涉及到资金或资产。所以典型的智能合约应用也是与数字化资金,或者数字化资产密切相关。

第一类的应用,我们可以认为是叫可编程的数字现金,比如说在1998年一个萨博自己就开发了一个叫比特黄金的一个系统。但是那个系统由于一些设计,他可能还是有偏中心化的一些思想,所以很容易被人外部去控制。没有发展起来。但是到2009年中本聪最后推出一个分布式的去中心化的一个比特币系统,就是一个非常典型的可编程的数字现金。

第二类是叫合成资产。这个合成就是把各种各样的金融资产、金融衍生品、以及不同的债股的比率的一个组合以及不同期限的组合。不同套利模式的组合等等,还有不同免责条款的组合各种各样的把它组合起来。能够执行一些复杂的资产。其实,玩金融衍生品的那些人,其实都会玩,但是很多情况下,它需要人工执行。这样的话非常难,但是如果有数字化智能合约去解决的话,那这就是一个很有意义的资产。

那么,最后一种是叫我们要把它称为智能资产。这就是说,真正的能够内置各种合同条款的资产。比如说,有一种智能锁可以用在这个现代的这个共享单车上和共享充电桩共享的住宅门上。这个时候我们就完全不需要有一个中心化的公司像现在的滴滴公司并进行运营,完全是可以在一个无中心的一个共享经济体力分布式的运营。

比如说,有一种智能门锁。用户就可以将这个租借的费用就通过数字资产直接转账给房东,然后这个智能门锁就可以读取区块链的相关的交易状态。自动的允许打开房门,或者允许这个用户去打开房门,不需要任何的中介机构向这个链家等等参与。

这世界就相对比较美好了,不需要造成一个中心化的巨头又来进一步,损害我们的利益啊,但是实际上这个非常美好,但是实际上在普及智能合约的时候还是存在很多障碍。

一个表现就是在于什么,我们发现这个智能合约概念提出的前二十年。就是1994年到2014年智能合约在商业化的领域实践几乎为零,为什么会实践严重的落后于理论呢,这个方面至少有三个方面的障碍。

第一是法律障碍,就智能合约到底是不是合约啊,这个其实很容易被别人攻击的。那总的来讲呢,我觉得这个法律方面应该是滞后的这种这种新生事物的。

第二个是实现方面的障碍,就是说智能合约是依赖于一些非常可信的数据,而在区块链之前,这个基础根本就不存在。另外一方面,他也缺少一个可编程的交易的支付体系。所以在1998年尼克•萨博就自己创造了一个这样的体系想补充补足这个智能合约的这个缺陷,但是不太成功。后来2008年中本聪发的比特币白皮书之后,尼克•萨博就发现这正是他想要的东西,也可以说比特币和区块链技术的兴起,为智能合约带来了新的转机。

第三个方面就是执行方面的障碍。智能合约到底是由谁来执行怎么样,保证执行的正确性,如果出现错误由谁来监督和仲裁。比特币和区块链技术是通过分布式实现来执行的。初步的理论上是可以解决这一方面的障碍,而不需要一个确定的一个信任中介去帮你去执行。

看上去很美好,但是比特币系统本身他的可编程脚本,我们就叫比特币脚本。他还是存在很多的制约。那这个资源就是说他缺少图灵完备性他能做的事情非常有限,非常受限制。

首先那个脚本对输入有严格的限制,他也不能访问外部信息。不能接受外部的消息,甚至没有没法访问,比特币系统的一些账本的基础数据。只能访问当前交易的一些很少量的数据内容。

其次,脚本没有办法保持状态数据就说他的脚本是无状态的就是也不能这么说他脚本说不管是执行正确还是失败,都没有把结果保存起来,他只能输出一样东西只能输出交易,他是没法输出它中间状态的。

所以当时很多人就觉得,这个不具备图灵完备性是比特币系统的一大缺陷,这个缺陷,我们就叫bug,所以说,这没有图灵完备性是一个bug。

第三个人物是维塔利克·巴特林(Vitalik Buterin),他是一个90后,非常年轻,可能比群里面在座的大多数人都年轻。他七岁开始就开始研究比特币,十八岁创办的比特币杂志,一个电子杂志。发表了很多一些观点性文章,是当时的一个很有影响力的意见领袖。当时他看到这个比特币系统功能太过于固化,导致了很多很多的山寨币横行泛滥。所以他提出要做下一代的智能合约和去中心化应用平台,并且发起了以太坊项目,受众多人的追捧,他的想法就是说大家都用这个统一的系统通用的平台,不要再开发更多的这个山寨币。

他是建立在区块链技术和分布式账本的技术的基础上。他可以接受外部的交易transaction和外部的事件event,也能够对外输出交易和事件。他在内部保存的合约的价值value也保存了合约的状态state。

优点是灵活方便。可以讨好这个去中心化应用的开发人员就是DAPP的那些开发人员开发人员很爽,就很容易就可以写出一个智能合约,满足一些初步的业务场景的一些上层要求。

那么缺点就是太灵活,太方便了,他对外部带来简单性,但是他内部屏蔽了很多复杂性。复杂性带来了很多恶劣的效果,就是低效和不安全。

复杂性永远是安全的敌人。在复杂的分布式场景下图灵完备的智能合约本身以及智能合约的执行环境中都有可能隐含一些未知的安全问题。我们之前介绍图灵完备的概念,图灵完备的计算机语言都是可以互相模拟的。因此我们所见常见的c++c语言、java等等,计算机编程语言的源代码,理论上都是可以翻译成图灵完备的智能合约。但是我们如果去问。任何一位软件工程师能不能不能拍着胸脯保证自己的编的程序没有任何缺陷,没有任何bug。没有任何安全问题,你就会发现谁也不敢这么做,谁也不敢给出这样的保证。所以安全问题是图灵完备智能合约永远的痛

我们先看看几个智能合约的安全事件。那最有名的是2016年The DAO事件。黑客利用智能合约的漏洞,围绕这个The DAO 项目募集而来的1.5亿美元,当时价值1.5亿美元的以太币。现在应该涨得很多,并且把中间的差不多一半将近七百万美元的以太币卷走了,转移走了,虽然后来通过硬分叉的方式,然后找到找回了大部分的被转移走了以太币。但是这个也破坏了区块链去中心化的概念,并且永久的造成的以太坊社区的永久分裂成ETC、ETH等等数字货币。

遇见与预见的区别

其实这个是一个在金融领域里面,我们一般都把它叫做叫无人监管的资金池。这是严重不合规的。很有可能被黑客和其他人盯上。

在2017年,以太坊的客户端多重签钱包,多重签名的合约,你们发现漏洞被别人发现,导致九十三万以上的以太币被锁住,谁也解不开,黑客也没有拿走,但是对这个原有的以太币持有人造成的损失是永久的,造成的永久的丢失,相当于把大量的金子扔到海里去了。

2018年美链bc合约的一个低级的那个整数溢出漏洞被黑客利用。导致无限制的增发新的美链的代币。当天亮的一个代币被从两个地址转出之后就引发了进一步的一个抛售潮。就说当天那个bc的价格暴跌了百分之九十四,整个整体价值几乎归零。

最近,安全公司知道创宇(KnownSec)发布了《区块链安全风险白皮书2018》。中间有些数据可以显示,在2018年上半年区块链安全事件数量和损失金额,都远远超过好几年的数倍甚至数字数十倍。从世界类型上看。由于区块链自身机制导致的安全事件,看上去数量非常虽然比区块链生态系统要少。但是金额却远超百分之四十二,中间出现问题最多的就是智能合约的安全问题。

智能合约安全的定义

所以我觉得,智能合约本质上应该是一种预先设置好确定性的规则,而不是任意性的逻辑。

从合约性上来讲,它是预制规则,所以说还算不上法律上的合约。

从智能性上看,它只需要支持有线的可编程性而不需要支持无线的智能。

从完备性看,它不需要图灵完备,比如说一些法律条文越清楚越明确越简单越好,不是越复杂越好。

从交付性上看,它也无需要访问外部系统,因为他需要上万个节点重复的去执行。如果允许访问外部系统,由于外部时间的一些网络,等等各种因素的不一样条件。不一样有可能产生反问的结果也不一样,这样最后大家就达不成一致,最后执行的结果就完全作废了。

智能合约与传统合约对比

所以我们需要重新对智能合约进行一些理解。一般来讲呢,不同的行业有不同的思维模式。我们大家接触的多的是互联网行业,那是什么是遇见问题,就是遇到什么问题就解决什么问题,讲究我们的软件系统能够快速的迭代。

而金融行业追究的是预见问题,这个预字很像同音词。他是什么呢,预先能够预知预判,所有的可能发生的问题以及可能产生的后果。并且有针对性的应急处理预案,否则的话这个系统可能就不能上线。

由于图灵完备的智能合约引入了太多的不确定性和安全隐患。所以隐患,所以他不适合于比较严肃的金融场景。比如说把智能合约用在一些不涉及到钱的一些感简单场景,比如说在线预约等等,这些场景下。图灵完备是不是并不太重要,但是一旦用于金融场景,就需要慎重再慎重。

根据我们之前的实践经验来看,把智能合约用在金融场景下。就是非常要做好限制,作好隔离就是提升它的安全性和可控性。这个限制,一方面就是把他的逻辑固化,防止被篡改。尽可能地避免他去去去升级去改造。但是可以把他下线,然后重新换一个新的上来。另外一方面就是限制他逻辑的复杂性,要越简单越好,避免这个图灵完备性。

隔离的就是对所有的智能合约。要做好调用方面的隔离咱们之间就不能说相互调用太复杂了,做好第二个做好数据方面的隔离他们的数据最好也不能够直接访问,互相访问。再一个就是做好执行上的隔离,每个智能合约的执行他们也不要互相影响。避免智能合约产生的一些其它的一些问题。

总的来讲,我们是需要重新理解智能合约。它是什么,它是运行在区块链之上,有多方自己自主执行的一个预制规则。它的核心的目标是对交易进行检查和限制限制这个交易去产生让这个交易。合规合法,和流程而正确,而不要在这个交易错了之后再去做对账。所以在这种场景下它是不需要太过智能,也不需要图灵完备。

智能合约的是与非

最后我总结一下。就是智能合约的是与非,是在哪,它提高了可编程性确实更灵活,它的非在于什么,就是在于图灵完备太过于灵活的,会带来很多安全隐患,所以这个方面,我们需要严格限制或者要把它抛弃掉。

今天的分享就到这里谢谢大家。


提问互动

群友:我有个基础问题,智能合约在本地执行,是如何防止本地篡改代码逻辑的?

刘胜:合约的代码,是作为数据预先写入到区块链中的,不会被篡改。

群友:但执行的时候,依旧是在本地内存里执行,是怎么做到本地完全做到防篡改?

群友:感觉图灵完备的风险还是太高了

刘胜:

1,别把虚拟机也篡改了呀;

2,如果虚拟机改了,结果不一样了,这只是影响一个全节点,而大多数节点执行还是正确的。

群友:智能合约已经出现安全问题,是太复杂造成的吗?目前有无智能合约形式化安全验证之类的成果?

群友:只能合约限制过于灵活。

刘胜:这是一个好问题。

群友:您的意思是智能合约执行,是同一组数据在所有节点里一起执行,在通过共识写入区块?

刘胜: 对,共识完成后才会写入的。

刘胜:我回答一下,尝试回答一下谭总的这个问题啊,这个问题却是一个好问题,智能合约安全问题,是因为太复杂,这个怎么说呢,这个复杂,其实不完全是合约本身的复杂性。而是你要合约执行环节等等很多方面的复杂性。

群友:美国一家机构已经成立智能合约审计

刘胜:

其实你像刚才指那个案例。那个美链那个那个案例其实他的合约非常简单呀,可能不到两百行吧,他就是在一个整数溢出的方面没有注意到。非常低级的low,是个程序员应该理论上都能够了解这个这个问题。但是这个地方被别人利用之后,就差点造成了很严重的后果。

所以现在讲这个智能合约的安全审计,其实有一家阿。在16年在那个维他令可就在他的论文里面在二三的一个报告研究报告里面就提过。今年好像应该有西安电子科技大学有一家做了一个链安科技的他们做了一个智能合约验证就是服务vaas这个一个服务啊,要做智能合约的一个验证。但这里面有还是有些问题。

智能合约的形式化证明这个东西确实很技术很牛。但是它的作用,我觉得还是很有限。

最近Vitalik他提了一种说法就说什么叫智能合约的安全啊,就是说理论与现实的区别差异就是安全的,就是说。你合约的时限和合约的意图之间的差异,就是安全性问题。

但是这个意图,什么叫智能合约的意图,他没有做进一步的定义,这个意图其实很难做严格的定义就说他有些事,就像有些话是嘴巴说的,有些话,有些事情是他真正做的。还有些事情是他心里想的,但是这哪一个道理,才是和智能合约的真正的意图。

比如说有些人做一些什么事,但是他对管理人员的这个权限放得非常非常大,他有可能就想自己做当然这也是猜测吧啊。他心里想的和说的一套可能就是两套东西,但这个东西到底是以哪个为准。

还有一些就是说他想确实也这么想,但是这个东西漏洞被坏人利用了。那这个到底是算意图还是不算意图呢。所以这个东西是讲不太清楚的。我总的觉得是形式化证明的技术很牛,但是安全是证明不来的,我可以证明他不安全,但是我很难证明它安全。

还不知道唐总,我这个解释是不是可以了啊。

成都链安科技,区块链形式化验证平台VaaS

“基于EOS区块链的代币合约同样可能存在BEC代币合约类似的整数溢出漏洞。”

群友: 如果放弃图灵完备,改为封装好的有限功能,那怎么设计该封装哪些功能呢?有什么思路吗?

群友:谢谢刘总,很精辟!

群友: 您对smart contract以后的发展方向是怎么看的

刘胜:

针对特定领域去设计呀,比如比特币脚本,就限制很严格,运作很好的。

如果你都不知道要封装什么,怎么可能确保不被坏人利用导致安全问题。

我的题目,其实就是说 smart contract 不是必由之路,当然也就没方向了。慎用,限制使用,隔离使用。

群友:那有什么好的替代思路

群友:@大圣²⁰¹⁷ 我的问题是,目前有一些公链选择了这条路,放弃图灵完备,封装有限功能。如果我作为一个Dapp在选择他们的时候,针对封装有限功能,该怎么去判断合适呢?

刘胜:

我在举个例子吧,

智能合约,核心是将代码写入到区块链中,防止不被篡改,可靠可信的执行。

但是,如果有Bug怎么办?如果有需求变更怎么办?

你去专利网上看,好几个可升级的智能合约,说白了,不就是等效于篡改了原始代码么?

一链一合约

Dapp是个伪命题

我更赞同 Serverless 这个方向。

群友:愿闻其详,请问为什么dapp是伪命题呢?

刘胜:谁产生,谁负责,谁承担后果。

群友:可升级智能合约

刘胜:

不确定的人产生Dapp应用并部署,全体共同承担后果,不合适。

以太坊,通用平台,“世界计算机”这个观点,也不太对。2016年,“世界计算机”说的很多,但是2017年之后,就没人再提了。

群友: serverless我理解是不是把smart contract和链之间做个隔离?

群友:单机电脑可以很容易实现多线程运行,互不干扰。公链难道不能实现dapp责任dapp负责吗?

刘胜: 

这就好像,一家生成企业,污染水源后。然后说,我买了净化设备了呀,我交了罚款了呀。。。

我记得  serverless最早是亚马逊开发的一种服务,不需要购买云主机,直接借用亚马逊的多余计算能力。

群友:用这个例子,是不是可以政府把水源用技术分成1000分,一家企业污染,只污染他的那一份,这个思路有可能实现呢?

刘胜:

难,因为合约不是执行一次,而是所有全节点执行的,很有可能没覆盖住成本。

这就是做好合约执行的隔离吗。

群友:但如果这是个问题,那智能合约、封装有限功能的合约,所有合约,都会有一样的问题啊

群友:解决方式除非是完全放弃区块链合约

刘胜:

其实,靠谱一点的做法,都是把计算拿出来做的,不是放在区块链全节点上执行。

是的,计算和存储剥离开来。

不是单一方执行呀,不确定的多方执行,但不需要全部的全节点来执行

群友:可行的

群友: 但这样本质没变,一个dapp的责任,一堆节点来承担。

群友:如果核心问题是成本收益率,那就看足够安全数量的节点参与,共有多大的成本了。EOS 21个节点,我知道有的dpos公链15个节点,也许成本就算的平了。

刘胜:对,但是少一些节点,就少一点成本。但是EOS相对固定节点身份的模式,我是不喜欢的,中心化太厉害。

群友:让全节点参与单个smart contract本身就是不科学的

群友:有几个智能合约安全成果

群友:嗯,随机选择一定数量的节点做共识,应该是个好方向

群友:分享很重要。

刘胜:

支持EOS,以太坊的区块链形式化验证平台VaaS

VaaS(Verification as a Service)是全球首个同时支持EOS、以太坊区块链智能合约的自动形式化验证平台,具有验证效率高、自动化程度高、人工参与度低、易于使用、支持多种合约开发语言、可支持大容量区块链底层平台等特点。

群友: 问个题外话题,您对未来公链的发展模式如何看

刘胜:发展模式,是指什么呢?

群友:你们规划的最先可能落定的应用是哪方面?谢谢!

群友:可能我问的太宽泛了,您觉得eos算一个好的方向吗?如果不是,您觉得什么才是比较理想的公链

群友:姜总可能问公链谁会尘埃落定,

刘胜:是指整个行业,还是我公司?——在传统领域话语权大的,就更容易地。

群友:这么多问题,万问齐发,辛苦刘总了

群友: 你们公司

刘胜:

不同思路——以太坊选择了更民主,EOS选择了更集权和垄断

我团队,针对行业联盟链,做了一个底层框架产品——优链,去年首批通过信通院《可信区块链》预测试,今年也过了一轮测试,在10月可信区块链峰会上公布结果。

参与标准编写过程中,在智能合约方面,当时就有很多争论,最后都放在“可选测试项”中了。

群友:看来您是准备采用serverless的思路

刘胜:然后,对智能合约的形式,其实各家也都不同。

比如,有一家就是上传Jar包,然后在Java虚拟机中执行,也算智能合约了。。。

我是对 图灵完备 吐槽太多。。。:)

其实,IBM也意识到这个问题,在其Fabric中有一点体现。

群友:现在有些DAG也号称搞出了图灵完备的smart contract

群友:我一直没弄明白DAG上怎么跑

刘胜:

但是最后做的结果,却只是改了个名字,不叫“智能合约”,改为“链上代码”。

而且还偷懒了,直接用Go语言(依然还是图灵完备的,而且还没有Gas机制),只能通过时间来限制资源使用,

这又带来很多其他的问题。

群友:不要急于否定智能合约的应用场景,复杂场景用复杂流程,简单场景用简单流程。

群友:以太坊的智能合约太low了,没法用

群友:据您所知,目前有多少在这么做的公链了?放弃图灵完备,只提供有限合约的。

刘胜:

开头说了,公链融资法宝之一就是智能合约,所以大部分号称区块链3.0的公链,都是支持图灵完备智能合约的。

所有的3.0公链,都是对标以太坊的,而以太坊本身的方向,个人觉得是有问题的,今天的分享,挑战的也是这个观点。

初步共识是,满足大规模商业应用的区块链,才是真正的3.0

群友:互联网发展20多年才来个+,区块链随随便便都3.0甚至4.0,也是醉了

刘胜:

但实际上,2.0和3.0之间,可能有很大的鸿沟

央行数字货币算是大规模商业应用,但是蔡老师估计得10.0才能够实现。

我很少研究公链,除非有技术独到之处。

群友:安全问题可以用我的一个方法解决,但你提到权限过大这种后门搞不了

群友:一句话就是这种弱点问题的产生是因为内存里代码和参数是一样的,通过特殊的方法参数就有可能变为代码,我的专利就是叫他们语义体系完全不同,鸡同鸭讲

群友:我这个方法可以解决注入溢出跨站等计算机体系的弱点问题

群友:系统复杂性越高,稳定性越差,是常识。指望一招包打天下不可能。

群友:智能合约只是工具,使用有严格限定条件。自身完备不能解决应用环境复杂的问题,这个理解对吗?

刘胜: 恩,会有很大效果,能发现大部分已知的安全问题。

但还是那句话,安全性是无法绝对证明的。

群友:安全是相对的,至少还有后门和社工

刘胜:

意思是说,过于灵活的智能合约会因为编写者及环境的水平差异,导致安全问题

智能合约只是工具,——所有技术都是工具

使用有严格限定条件。——没有条件,只是在特定场景需要慎用。

自身完备不能解决应用环境复杂的问题——图灵完备就是可以解决所有“可计算”问题的。但在实现过程中,可能也带来其他的安全隐患。

就是说,安全性= 实现和意图的差异。——

群友:V神那句话的意思,是指 智能合约编写者想实现的,和实现出来的,两者之间的差异,就导致了智能合约的安全问题。

群友: 根据哥德尔定律

刘胜:“可计算”这个条件,是很广泛的。能过逻辑推理的,都是可计算问题。

群友:说白了就是程序员水平不够

刘胜:

实现 > 意图

实现 < 意图

这都是差异,都是安全问题。

但是,严格的相等,几乎无法做到。

群友:程序员就是底层工程师,安全还取决架构设计吧

刘胜:因为“意图”本身,就是很难理解和严格定义的。

群友:@吉檀迦利 是说写智能合约的程序员

intent is fundamentally complex

群友:是的,意图本身就很可能不具备完备性。

刘胜:

其实上面那句话,后面就引出了对“意图”的问题。

安全就不是一个可以严格定义的,所以,只是架构,解决不了安全问题。

群友:哲学上说就是 我的意图无法包括该意图的全部信息。

群友:道可道非常道?

群友:智能合约不是万能的,没有智能合约是万万不能的



版权声明:

1.本文全部著作权归作者刘胜独占享有。

2.任何个人或机构如需转载本文,无须再获得作者书面授权,但是转载者必须保留作者署名,并注明出处。

3.作者保留对本文的修改权。他人未经作者许可,不得擅自修改,破坏作品的完整性。

4.作者保留对本文的其他各项著作权权利。



相关阅读

大家观察 | 郭善琪等:区块链的共识与共识的区块链(持续更新)

推荐阅读更多精彩内容