找回密码
 立即注册

扫一扫,登录网站

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

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

2018-5-18 11:44

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

智能合约是一个误区


实际上,我认为智能合约这整个概念就不靠谱,是一个比较大的误区。比特币以太坊的系统里面,根本就不应该,而且没必要存在脚本语言。

比特币的解锁脚本执行方式,一开头就有个低级错误,导致 injection 安全漏洞。用户可以写出恶意代码,导致脚本的运行系统出错。比特币最初的解锁方式,是把两段代码(解锁脚本+加锁脚本)以文本方式拼接在一起,然后执行。以文本方式处理程序,是程序语言实现方法的大忌。稍微有点经验的黑客都知道,这里很可能有可攻击的点。

以太坊的 Solidity 语言一开头就有低级错误,导致价值五千万美元的以太币被盗。以太坊的智能合约系统消耗大量的计算资源,还导致了严重的性能问题。

虽然比特币和以太坊的作者大概在密码学和分布式系统领域都是高手,然而我不得不坦言,他们都是 PL 外行 :p 然而如果是内行来做这些语言,难道就会更好吗?我并不这么认为。

首先的问题,是 PL 这个领域充满了各种宗教,和许多的传教士。一般的 PL 内行都会把问题复杂化,他们会试图设计一个自己的“信仰”中完美的语言,而不顾其他人的死活。如果你运气不好,就会遇到那种满嘴“纯函数”,monad,dependent type,linear logic 的极客…… 然后设计出来的语言就没人会用了 :p

有责任感的 PL 科学家,都是首先试图避免制造新的语言。能不用新语言解决问题,就不要设计新的语言,而且尽量不在系统里采用嵌入式语言。所以,如果换做是我设计了比特币,我根本不会为它设计一种语言。

让用户可以编程是很危险的!极少有用户能够写出正确而可靠的代码,而且语言系统的开发过程中极少可以不出现 bug。语言系统的设计错误,会给黑客可乘之机,写出恶意脚本来进行破坏。从来没有任何语言和他们的编译器,运行时系统是一开头就正确的,都需要很多年才能稳定下来。另外你还要考虑性能问题,对于去中心的分布式系统,这种问题就更加棘手。这对于普通的语言问题不大,你不要用它来控制飞机就可以。然而数字货币系统的语言,几乎不允许出现这方面的问题。

所以与其提心吊胆的设计这些智能合约语言,还不如干脆不要这种功能。

我们真的需要那些脚本的功能吗?比特币虽然有脚本语言,可是常用的脚本其实只有不超过 5 个,直接 hard code 进去就可以了。以太坊的白皮书虽然做了那么多的应用展望,EVM 上出现过什么有价值的应用吗?我并不觉得我们需要这些智能合约。数字货币只要做好一件事,能被安全高效的当成钱用,就已经不错了。

美元,人民币,黄金…… 它们有合约的功能吗?没有。为什么数字货币一定要捆绑这种功能呢?我觉得这违反了模块化设计的原则:一个事物只做一点事,把它做到最好。数字货币就应该像货币一样,能够实现转账交换的简单功能就可以了。合约应该是另外独立的系统,不应该跟货币捆绑在一起。

那合约怎么办呢?交给律师和会计去办,或者使用另外独立的系统。你有没有想过,为什么世界上的法律系统不是程序控制自动执行的呢?为什么我们需要律师和法官,而不只是机器人?为什么有些国家的法庭还需要有陪审团,而不光是按照法律条款判案?这不只是历史遗留问题。你需要理解法律的本质属性才会明白,完全不通过人来进行的机械化执法,是不可行的。智能合约就是要把人完全从这个系统里剔除出去,那是会出问题的。

奢望过多的功能其实是一种过度工程(over-engineering)。花费精力去折腾智能合约系统,可能会大大的延缓数字货币真正被世界接受。实话说嘛,试用了多种数字货币,了解了它们所用的技术之后,我发现这些技术相当的有趣,然而这些数字货币其实仍然处于试验阶段,离真正作为货币使用还有一定的距离。集中精力改进它们作为货币的功能,将会加速它们别人接受。而耗费精力去研究智能合约,我觉得是误入歧途。

在这一点上,我觉得比特币比它的后继者们(比如以太坊)都要做的地道一些。比特币虽然也有脚本语言,然而它并不过分强调这种脚本的作用。比特币的脚本语言非常简单,而且不是图灵完备的。这迫使用户只能写出功能简单,不伤害系统性能,容易验证的脚本。相比之下,以太坊花了太多精力去折腾智能合约,弄得过度复杂,带来各种问题,影响了大家接受最重要的货币功能。

说到这里,很多人可能以为我对数字货币不屑一顾,然而实际上正好相反 :) 我打心眼里是对区块链技术感兴趣的,我只是觉得其中的智能合约是多余的麻烦。虽然被某些人吹捧得有些过头了,用它来忽悠的人也很多,然而比特币的技术确实是有相当大价值的。比特币巧妙地解决了分布式计算领域里面几个重要而有趣的难题(比如拜占庭将军问题)。它们的解决方案给了我挺多的启发,我感觉这些想法可以有很多应用场景。所以我感谢 Satoshi 发明了这个东西 :)
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。
1234
相关新闻
发表评论

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

    回顶部