智能合约审计用于整个 DeFi 生态系统,通过对协议代码的深入审查,可以帮助解决识别错误、低效代码以及这些问题。智能合约具有不可篡改的特点,这使得审计成为任何区块链项目安全流程的关键部分。
代码审计对任何应用程序都很重要,但它们对去中心化应用程序 (dApp) 尤其重要,因为它们建立在其之上的区块链是不可变的。如果代码漏洞导致用户资金丢失,这些资金将无法找回。迄今为止,DeFi 中的黑客已经损失了超过 50 亿美元。
在本文中,我们研究了智能合约审计到底是什么、如何进行审计、需要注意的常见智能合约漏洞、Solidity gas 优化策略、流行的审计工具等等。
常见的智能合约漏洞
重入漏洞
当智能合约函数被不受信任的外部合约调用时,可能会发生重入攻击。重入攻击中,使该外部合约能够通过递归调用原始合约来耗尽用户资金或进行其他恶意操作。
整数上溢和下溢
当智能合约执行算术运算输出超过当前存储容量的数字时,可能会发生整数溢出或下溢,从而导致计算错误。
抢先交易机会
设计不合理的代码可能会泄露有关 dApp 尚未发生的的交易信息,其他用户可以先行运行这些信息,以牺牲协议为代价锁定利润。
重放攻击
当数据被恶意延迟或重复时,就会发生重播攻击,尤其是在硬分叉事件期间,攻击者可以使用新的系统上的消息从遗留系统中提取资金。
随机数漏洞
如果 dApp 使用公开的数字(例如块哈希)来播种随机数,则它很容易受到利用,这就是为什么许多协议使用 Chainlink VRF 来实现随机性。
函数可见性错误
打算私有的函数必须定义为私有的,因为 Solidity 中的默认可见性属性是公共的。如果是公开的,任何人都可以调用该函数。
中心化风险
中心化机制有单点故障的问题,如果单个私钥或类似密钥被泄露,可能会破坏协议的安全性。时间锁和授予 DAO 特权是处理中心化风险的常用技术。
未锁定编译器版本
Solidity 有许多编译器版本。 dApps 应该锁定他们使用的编译器版本,这样用户就不能用不同的版本编译它,否则这可能会导致不同的字节码和意想不到的问题。
Solidity gas 优化
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !