本文深入探讨了智能合约中重入攻击的原理、危害以及防御方法。文章通过具体的代码示例,详细解释了经典重入攻击和只读重入攻击的利用方式和防范措施,强调了Check-Effects-Interactions模式和重入锁Guard在保障智能合约安全中的重要性。尤其针对view函数在特定情况下可能返回过期数据的问题提出了应对方案。
本文档介绍了OpenZeppelin Contracts库中的实用工具合约和库,用于提高智能合约的安全性、处理新型数据类型以及安全地使用底层原语。包括安全工具(如Pausable和ReentrancyGuard),以及用于处理地址、数组和字符串的库。此外,还介绍了用于处理计数器、可枚举映射和集合的实用工具,以及安全使用CREATE2操作码的工具。
ReentrancyGuard库是一个用来防御函数重入的工具库。函数被修饰器nonReentrant修饰可确保其无法被嵌套(重入)调用。本库的代码逻辑上只实现了一个重入锁,所以被nonReentrant修饰的函数之间也是无法相互调用的。
nonReentrant