智能合约代码审计

匿名 (未验证) 提交于 2019-12-03 00:26:01

上周六大概看了一下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;

'''

转载请标明出处:智能合约代码审计
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!