DApp:智能合约的安全问题?

专员最近的工作实在是比较忙,每次文章写到一半,都被领导叫去干活,因此最近频繁拖更,也请大家见谅,专员也决定在以后,再合理的分配一点时间,来多花点时间在写点有意思的东西给大家。大家有什么区块链技术方面问题,或则项目相关的问题也可以在评论里告诉专员,专员一定会认真的看每一个评论,也会挑几个好的Idea,跟大家一起聊聊专员自己的看法。谢谢大家~

说出正题

之前专员跟大家聊过EOS Dapp被持续攻击的事情。开源游戏EOSDice就被盗了2545个EOS,折合成人民币约9万元。

其实,一直以来,大家也都知道,智能合约自从出现以来一直都出现过很多问题。

智能合约其实本质就是一段运行在区块链网络中的代码,而他的主要目的就是完成用户所赋予的业务逻辑。

另外,以太坊在设计之初,将智能合约设计成了一旦部署就不能修改的模式,由于区块链本身不可篡改的特性,有些交易一旦达成了就无法Roll Back。这种设计有可能是为了提高智能合约的可信性。但是我们知道,只要是由人编写的程序,就一定会出现错误和缺陷。

我们也都知道,其实这种设计本身就违背了程序设计的一般规律,假如在智能合约出现漏洞的时候可能会造成无法弥补的损失,造成的经济损失也是巨大的。

我们可以看到,之前出现的以太坊体系智能合约的漏洞,造成了巨大的影响,有的代币也因此毁灭,给各位投资造成的问题也是很恐怖的。

比如在今年上半年发生的

4月22日中午,有黑客利用以太坊ERC-20智能合约中BatchOverFlow漏洞攻击BEC(美链的代币“美蜜”)智能合约,成功向两个地址转出了天量级别的BEC代币,导致市场上海量BEC被抛售。此事使得当日BEC的价值几乎归零。64亿人民币瞬间蒸发。

然后在4月25日,仅仅三天后,另一个智能合约SmartMesh(SMT)曝出漏洞,交易所表示,因SMT出现异常交易,各交易平台暂停SMT的充提和交易。

大家也知道,BEC出现的漏洞,是转账者在设计一笔特大转账数额时,函数计算结果为0,这就导致黑客可以向自己的钱包中转入任意巨额的数字货币。

主要的原因是数值溢出。

一般来说,智能合约的安全隐患,我们简单的可以将它分为三个方面:

1.合约代码有没有漏洞。合约代码中是否有常见的安全漏洞。

2.合约本身是否可信。没有漏洞的智能合约,未必就安全,合约要保证公平可信。

3.合约创建要符合一定规范和流程。由于合约的创建要求以数字形式来进行定义承诺,所以如果合约的创建过程不够规范,就容易留下巨大的隐患。

我们也都知道,其实目前市场上很多智能合约都存在多多少少安全漏洞问题。比如,早在上半年,安比实验室(SECBIT)就发现Ethereum上出现81个合约带有相同错误,ERC20 Token合约中的transferFrom函数存在巨大隐患,一旦部署后出现问题,将造成不可挽回的损失。

针对Solidity,智能合约的规则库中列出了若干Solidity代码的Linter规范 (以L开头),Solidity的代码Safe规则(以S开头)。

针对每条规则给出了模式样例、原因、解决方案。如下图所示:

其实专员一直觉得,智能合约一直都是一把双刃剑,虽然说智能合约的出现让区块链真正的进入了2.0时代,但是也是意味着区块链的整个执行逻辑将会更加复杂,潜在的Bug存在的可能也是更加明显的。

而作为一名程序员,我们谁也没办法保证一个程序的完美。复杂在某一种程度上,也就意味着不稳定。需要长时间的打磨和测试,才能将一个产品打造的更加商用。

文末

我们需要给区块链时间,给智能合约时间,区块链作为一门新兴技术也不是这么快就能成熟的,也需要无数的专家还有像专员一样的码农去不断完善的,专员也相信今后区块链也一定会更加适合商用。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181108G1I83800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券