在区块链世界中,代币被视为资产。这些资产必须得到安全地保护。在开发人员创建完智能合约之后,审计员有责任测试智能合约的漏洞。代币是使用智能合约创建的,而智能合约又使用 ERC20 标准。
那么,你如何审计 ERC20 合约呢?
请按照以下文章中的说明进行操作。但在此之前,让我们先定义 ERC20。
什么是 ERC20?
ERC20是使用以太坊区块链创建的可互换代币的标准。可互换代币是一种可与另一个代币互换的代币——而众所周知的非可互换代币(NFT)则不可互换。
ERC20 标准的功能:
如果合约实现了以下一些功能,则可以说该合约使用了 ERC20 标准。
- 将代币从一个账户转移到另一个账户
- 获取账户的当前代币余额
- 获取网络上可用代币的总供应量
- 批准某个账户是否可以由第三方账户花费一定数量的代币
审计 ERC20 合约时需要检查的事项:
-
当将代币从一个账户转移到另一个账户时,请检查值是否被正确更新。
-
类似地,当转移 ETH 时,请检查是否在转移之前发生状态更改。例如,在将 ETH 转移到接收方之前,应该先从发送方的账户中减少余额。这样可以防止诸如重入攻击之类的攻击。
-
检查所有外部调用。因为外部函数是任何人都可以调用的函数。如果有任何错误,攻击者将会清空合约中的余额。
-
如果合约具有多个用户角色,请检查所有角色,并检查是否正确应用了访问控制。
-
检查父合约(ERC20、Ownable)是否是标准合约(例如由 OpenZeppelin 编写),还是由开发者编写的自定义合约。
Gas燃气优化问题:
在审计阶段,审计员还将寻找gas优化问题。这将为客户降低成本。gas优化可以应用于所有合约,不仅仅是 ERC20 合约。
- 检查合约中声明的所有函数是否都被使用(未使用函数)。
- 检查是否存在多个功能相同的函数,有时开发人员会编写自己的逻辑。
- 写入区块链存储是昂贵的。因此搜索“storage”关键字并分析是否应将其写入区块链。建议使用“memory”关键字。
找到所有问题后,重要的是再次验证这些问题。