巴比特论坛

发表于 2017-5-11 14:21:14 | 显示全部楼层
本帖最后由 CryptoCommunity 于 2017-5-11 14:23 编辑

图片 1.png

Wings团队请我们审计他们的新代币合约代码,我们对这些代码进行了检查,现在公布本次检查的结果。


被审计的合约代码在这:

本报告针对的代码版本是:
1b308105a31c5b005c21fbbda3b1ff5b3fac9bae

主合约文件是:

代码很赞,我们使用OpenZeppelinhttps://openzeppelin.org/)来审计这些代码。

下面是我们的评估和建议,按照重要顺序来说:

更新:Wings团队已经在他们的代码中实现了我们大部分的建议

严峻问题

在代码中没有发现任何严峻的问题。

潜在问题

注意类型

声明变量是尽量避免使用var。这种变量定义系统在你不注意的时候会导致意外发生。例如,对int来说,它会选择持有分配常量所需的最小类型。这会导致无尽的循环和燃料消耗。为了保证不出意外并提高限制,最好使用明确的变量类型uint。建议把所有的var换成明确的类型。

已修复:

时间戳的使用

合约逻辑中的时间戳和now(又名block.timestamp)的使用存在一个问题,矿工可以进行操控,最好在合约逻辑中不依赖时间戳。解决方式是使用Block.number代替它,用预计区块高度代替大概时间,用预计区块数来代替时间周期。

该代币合约Token.sol代码在212行处使用了时间戳。矿工操控的风险很低,潜在的危害是有限的:在预分配完成时,矿工可以轻微地进行操控。我们建议开发团队考虑一下这个风险,如有必要可以使用 block.number来解决问题。

关注这个主题的详细信息请参考:

警告

魔术常量的使用

在这个合约代码中有一些地方使用了魔术常量,如:


使用魔术常量会降低代码可读性,让代码难以理解。我们建议把魔术常量替换为合约常量。

修复:

漏洞报告奖励

正式的安全审计不能完全保证安全。我们建议设置一个自动化的漏洞奖励合约,制定一个期限,让全球的研究者来攻破这个合约的不变性。使用OpenZeppelin来设置自动漏洞奖励的相关信息请参考:

避免重复代码

重复代码降低可读性,审计更困难,在修改这些代码时还增加了引入bug的风险。

Transfer transferFrom approve中的逻辑和StandardToken非常相似,可以重构它们来避免重复。不必重写上级合约逻辑:可以使用超级关键字(super keyword)来访问SandardToken,就像这样:
function transfer(address _to, uint _value)whenAllocation(false) returns (bool success) {
  return super.transfer(_to, _value);
}
已修改:

命名建议:

l  所有与premine相关的变量名(Preminer,PreminerAdded, PremineAllocationAdded, PremineRelease等)都让人产生困惑,因为这代币是不挖矿的,可以使用“initial assignment”这样的名字代替。
l  checkUserAllocation 和 checkPreminerAllocation不是好名字,因为它不能表示它们到底是做什么的。可以使用whenHasntAllocated(user)这样的名字来代替。
l  Preminer结构中的monthlyPaymentuint字段让人困惑,这个名字意思是每月支付,不过这个支付并不是被强制每月进行的。建议重命名这个字段,或添加时间校验。

已修改:

使用最新版的Solidity

这个代码是为老版solc(0.4.2)所写,在0.4.4前的版本存在存储重写漏洞,这些代码可能使用存在漏洞的solc编译,这存在风险。我们建议使用最新版的 solidity语法(pragma solidity ^0.4.10)来确保使用的编译器是最新版的。

已修复:

附加信息和注释

l  第8行注释中有错别字:“Campaign”而不是“Campagin”
l  第27行有一个错别字:“structure”而不是“scturcture”
l  第39行: “perminers”.
l  第 202行: “monthes”.
l  第 140行: “functionality”.
l  Send和call.value没有用
l  用OpenZeppelin完成的工作
l  使用了安全数学的工作
l  为什么totalSupply被分配了一个固定的魔术数字?

总结

我们没有发现严峻的安全问题,我们建议的一些更改遵从最佳实践范例,并可以有效减小被攻击的风险。

代码质量很赞。我们很高兴使用OpenZeppelin进行该项目的审计。

更新:Wings团队已经在主代码库中实施了我们的建议。

如果你对智能合约的安全性有兴趣,请关注的我们的Medium或加入我们的slack频道。我们可以进行智能合约安全部署和审计工作。

注意,截止本文发稿时,以上的评测反映了我们对已知的Wings代币合约安全模型的理解。我们没有对Wings项目进行审计。以上不构成投资建议或提供Wings代币,智能合约安全性相关信息在这里可以找到:
https://medium.com/zeppelin-blog/onward-with-ethereum-smart-contract-security-97a827e47702

原文:https://medium.com/zeppelin-blog/wingsdao-token-audit-f39f800a1bc1



0条回复 跳转到指定楼层

高级模式
您需要登录后才可以发帖 登录 | 立即注册 | 用新浪微博登录

本版积分规则

搜索

0关注 0粉丝 9主题

作者的其他主题

返回顶部 返回列表

登录

分享 发帖