DEVCON2: 让智能合约更智能:Oyente

区块链铅笔Blockchain view 77 2016-9-20 09:22
share to
Scan QR code with WeChat

本文为大会演讲速记尝鲜版,给心急的小伙伴们先行浏览,精细校对版将会在大会后逐步发布。

新加坡国立大学博士生Loi Luu发表演讲主题“让智能合约更智能:Oyente”。

Oyente产生的背景

合约分析器Oyente是为了发现智能合约中的漏洞而创造的,不久它将被会开源发布。本演示介绍Oyente的概况,解释我们怎么可以让智能合约更智能。

智能合约鉴别易受攻击面临的困难

智能合约安全性的项目Oyente,安全的编程很难,特别是对程序员来说,攻击者可以攻击最弱的部门,安全止于最弱的环节,安全的智能合约很难,智能合约只有一个机会,一旦部署了,就很难进行变更,智能合约的执行模式不一样,我们用了一个新语言,和现有的语言很相似,这跟Java和python很相似。成立项目时 ,是不是还有其他位置错误,有哪些合约易受攻击,智能合约数量呈指数增长,现在有12万个智能合约,鉴别易受攻击还会面临一些挑战。

智能合约会有二进制代码,由高级代码编译而来,把二进制码转换为合约非常困难,由专业人员来分析,需要几年时间来分析所有合约

我们找出了时间戳的依赖性,新的智能合约采用的是符号执行,我们可以在2万个智能合约上运行,有9000多个合约易受攻击。

首先我们有一个难题解决合约,存入以太币,任何人都可以提交以太币获得奖励。奖励太低,难题太难,可以更新奖励机制,吸引更多解决者。矿工它们放在区块当中,解决方法就被触发。矿工可以在自己的块上处理交易,可以先更新奖励,再提交解决方法,虽然已经提交了正确的解决方法,但是没有奖励是不公平的。

对于这样的挑战,在提交交易时观察到的状态和执行的状态不一样,但这是偶然的,因为两个交易可能同时发生。另外一个人可以发送这样的交易,这可能是正确的。以太坊智能合约可以在合约时间内访问时间戳,生成随机数,矿工可以改变自己区块的时间戳,因此让合约执行有利于他们。

针对这两个问题提出了自己的解决方案

智能合约分析器,把自解码作为输出,通过探索程序的所有部分,对所有探索部分进行核心分析,如果确实有问题,我们会让验证人验证结果,所以在谈一下符号执行。

这是控制流程图,我们可以搜集所有条件,最终总结所有执行特性,所有条件都会在这个公式中。

我们把格式发送给现在的算法中,如果有任何的价值的话,Oyente能做什么呢?我们已经在2万个合约中运行了Oyente,可以把错误分成不同的类型。它可以用于生成测试,Oyente是开源的,可以登录我们的网站为我们的项目做贡献,提升Oyente的功能和性能。现在很多EVM可以把静态和动态的符号执行结合在一起。

作者:Lydia

btcfans公众号

Scan QR code with WeChat

Disclaimer:

Previous: 西班牙桑坦德银行力争成为首家在区块链上发行数字现金的银行 ... Next: 为什么说下一个存储解决方案有赖于区块链技术

Related