ERC20代币审计流程

ERC20代币审计流程

本文ERC20涵盖 BEP20 HRC20 TRC20 等一切EVM虚拟机区块链的代币协议,其他区块链仅有EVM虚拟机的不做额外补充

1. 审计合约是否开源,各大已支持的evm公链查看代码地址如下:
区块链 浏览器预览代码地址
ETH https://etherscan.io/address/0xdac17f958d2ee523a2206206994597c13d831ec7#code
AVAX https://snowtrace.io/address/0xc7198437980c041c805a1edcba50c1ce5db95118#code
BSC https://bscscan.com/address/0x55d398326f99059ff775485246999027b3197955#code
Ploygon https://polygonscan.com/address/0xc2132d05d31c914a87c6611c10748aeb04b58e8f#code
ThunderCore https://viewblock.io/thundercore/address/0x9bafb0da04147276711721627bf37b026dbfe10f?tab=code
Heco https://hecoinfo.com/address/0xa71edc38d189767582c38a3145b5873052c3e47a#code
Fantom https://ftmscan.com/address/0x04068da6c83afcfa0e13ba15a6696662335d5b75#code
Arbitrum https://arbiscan.io/address/0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9#code
Tron https://tronscan.org/#/contract/TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t/code
Klaytn https://scope.klaytn.com/account/0x5096db80b21ef45230c9e423c373f1fc9c0198dd

对于未验证的合约,拒绝通过安审。

2. 检查合同是否为代理合约

如果为代理合约,则需要同时审计被代理访问的合约地址,一般情况下慎重通过安审,举个例子

https://polygonscan.com/address/0x695FC8B80F344411F34bDbCb4E621aA69AdA384b

在这里可以找到被代理的合约,然后去找代理合约第一次构造传入的参数

https://polygonscan.com/txs?a=0x695FC8B80F344411F34bDbCb4E621aA69AdA384b

核对完构造参数后,对被代理合约 0x6c69ef0e475566777294911b6658c002ae6ab2e6 进行审计

代理合约可以升级没法处理啊。风险是有的,需要酌情处理,给他们说明,跟项目方保持联系就好了

3. 检查是否设置发行量上限
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        require( _totalSupply.add(amount) < maxSupply );
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

一般来说设置了最大供应量的就没有问题了,** require( _totalSupply.add(amount) < maxSupply )**

如果未设置最大供应量,查看 _mint( 函数是否只在构造函数的时候调用,如果是的话,也没有问题了

最后如果有其他函数可以随意铸造(根据时间线性解锁份额的情况除外),需要满足以下条件才可以通过审核:

  • 其他函数必须有鉴权,不是任何人都可以增发
  • 权限控制必须为合约地址 | 单次增发存在时间锁 | 上过其他大交易所 3选1
4. 检查 onwer 是否权限过大

检查 onwer 是否权限过大, 通常来说允许 onwer冻结某个地址的代币以及冻结该项目所有转账,但是不允许如下情况发生:

  • onwer 可以转移任意地址代币
  • onwer 可以转移销毁地址代币
5. 转账不允许收取手续费

对于此类代币,一般直接不给过。如果强烈要求,除非代码中包含可以按照 from/to 任意一个地址为白名单,则不扣除转账税 的逻辑, 并将所有归集地址添加至白名单中,否则不予通过

6. 检查是否有错误逻辑
  • 代币增发时总量不增加
  • 可以修改代币名称

此类错误逻辑会导致系统错乱,直接拒绝

posted @ 2022-03-17 14:57  EnochLin  阅读(530)  评论(0编辑  收藏  举报