上周六大概看了一下solidity的语法,从昨天开始审计一个智能合约的代码,以前只有一些C和C++的基础.对这个语法不是很熟悉,所以看得会有点慢.合约代码的代码量不大,加注释有3百多行.
到今天上午为止排除了一些基础的,加减乘除中可能存在的一些溢出漏洞除法不用怎么做判断。因为除数为0会直接报错。
'''
uint256 c = a / b; // 这里不存在溢出,所以不用做验证(这一步如果除数为零会导致报错)
return c;
'''
对于加法要做一定的判断要让结果大于加数和被加数
'''
uint256 c = a + b;
assert(c >= a); // c必须大于等于a
'''
减法,因为币的交易中不存在负数还能交易的情况,所以被减数要小于减数
'''
assert(b <= a); // b必须小于等于a
return a - b;
'''
对于乘法的限制来说,要验证结果的反向运算来判断结果是否存在被溢出
'''
uint256 c = a * b;
assert(a == 0 || c / a == b); //防止溢出(这样不论a是否为零都可以判断)
return c;
'''
转载请标明出处:智能合约代码审计
文章来源: 智能合约代码审计