找回密码
 立即注册

扫一扫,登录网站

首页 区块链生态 查看内容
  • 9609
  • 0
  • 分享到

区块链程序开发者看智能合约和形式验证

2018-5-18 11:44

来源: 架构文摘 作者: 当然我在扯淡

智能合约自动生成标注是不可能的


所以即使有了 Hoare Logic,程序验证也不是轻松的事情。于是呢就有人乘火打劫,提出一个类似减肥药的想法,声称他们要用“深度学习”,通过对已有标注的代码进行学习,最后让机器自动标注这些前后条件。还在“空想”阶段呢,却已经把“自动标注”作为自己的“优势”写进了白皮书:“我们的方法是自动的,其他的项目都是手动的……”

很可惜的是,“自动标注”其实跟“自动编程”是一样的空想。自动编程的难点在于机器没法知道你想要做什么。同理,自动标注的难点在于,机器没法知道你想要代码满足什么样的性质(property)。这些信息只存在于你的心里。如果你不表达出来,任何其它人和机器都没有办法知道。

除非你把它写出来,机器永远无法知道函数的参数应该满足什么样的条件(前条件),它也无法知道函数的返回值应该满足什么样的条件(后条件)。比如上面的那个例子,机器怎么知道你想要程序执行之后 x 大于零呢?除非你告诉它,它是不可能知道的。

你也许会问,深度学习难道帮不上忙吗?想想吧…… 你可以给深度学习系统上千万行已经标注好的代码。你可以把整个 Windows 系统,整个 Linux 系统,FireFox 的代码全都标注好,再加上一些战斗机,宇宙飞船的代码,输入深度学习系统进行“学习”。现在请问系统,我下面要写一个新的函数,你知道我想要做什么吗?你知道我希望它满足什么性质吗?你仍然不知道啊!只有我自己才知道:它是用来给我的猫铲屎的 :p

所以,利用深度学习自动标注 Hoare Logic 的前后条件,跟“自动编程”一样,是在试图实现“读心术”,那显然是不可能的。作为资深的 PL 和形式验证专家,这些人应该知道这是不可能自动实现的。他们提出这样的想法,并且把它作为相对于其他智能合约项目的优势,当然只是为了忽悠外行,为了发币圈钱 ;)

如果真能用深度学习生成前后条件,从而完全自动的验证程序的正确性,那么这种办法应该早就在形式验证领域炸锅了。每一个形式验证专家都希望能够完全自动的证明程序的正确性,然而他们早就知道那是不可能的。

设计语言来告诉机器我们想要什么,什么叫做“正确”,这本身就是 PL 专家和形式验证专家的工作。设计出了语言,我们还得依靠优秀的程序员来写这些代码,告诉机器我们想要做什么。我们得依靠优秀的安全专家,给代码加上前后条件标注,告诉机器什么叫做“正确安全的代码”…… 这一切都必须是人工完成的,无法靠机器自动完成。

当然,我并没有排除对智能合约手动加上 Hoare Logic 标记这种做法的可行性,它是有一定价值的。我只是想提醒大家,这些标记必须是人工来写的,不可能自动产生。另外,虽然工具可以有一定的辅助作用,但如果写代码的人自己不小心,是无法保证程序完全正确的。

如何保证智能合约的正确呢?这跟保证程序的正确性是一样的问题。只有懂得如何写出干净简单的代码,进行严密的思考,才能写出正确的智能合约。关于如何写出干净,简单,严密可靠的代码,你可以参考我之前的一些文章。

做智能合约验证的工作也许能圈到钱,然而却是非常枯燥而没有成就感的。为此我拒绝了好几个有关区块链的合作项目。虽然我对区块链的其它一些想法(比如去中心化的共识机制)是感兴趣的,我对智能合约的正确性验证一点都不看好。

版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。
相关新闻
发表评论

请先 注册/登录 后参与评论

    回顶部