专员最近的工作实在是比较忙,每次文章写到一半,都被领导叫去干活,因此最近频繁拖更,也请大家见谅,专员也决定在以后,再合理的分配一点时间,来多花点时间在写点有意思的东西给大家。大家有什么区块链技术方面问题,或则项目相关的问题也可以在评论里告诉专员,专员一定会认真的看每一个评论,也会挑几个好的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存在的可能也是更加明显的。
而作为一名程序员,我们谁也没办法保证一个程序的完美。复杂在某一种程度上,也就意味着不稳定。需要长时间的打磨和测试,才能将一个产品打造的更加商用。
文末
我们需要给区块链时间,给智能合约时间,区块链作为一门新兴技术也不是这么快就能成熟的,也需要无数的专家还有像专员一样的码农去不断完善的,专员也相信今后区块链也一定会更加适合商用。
领取专属 10元无门槛券
私享最新 技术干货