本文介绍了如何使用Certora对OpenZeppelin的Ownable.sol合约进行形式化验证。它详细解析了Ownable合约的核心功能,并展示了如何编写CVL规则来验证访问控制、所有权放弃和所有权转让等关键属性,确保合约的安全性。
Ownable.sol
Ownable
本文详细阐述了如何运用Certora工具对OpenZeppelin的Nonces.sol智能合约进行形式化验证。文章首先介绍了Nonces合约的功能,随后深入讲解了Certora验证语言(CVL)的规则,包括验证nonce值递增、操作不回滚以及无副作用等核心安全属性,旨在通过严谨的逻辑证明确保智能合约的安全性。
本文详细介绍了如何使用 Certora 的部分参数化规则对 ERC-721 代币的五个关键状态变化(总供应量、账户余额、所有权、单一代币批准和操作员批准)进行形式化验证。文章解释了部分参数化规则的设计模式,通过 helperSoundFnCall() 函数实现方法特定逻辑和前置条件,并对比了其与完全参数化规则的优劣,强调了其在处理不同方法特定约束时的优势。
helperSoundFnCall()
本文探讨了Certora Prover在形式化验证中处理循环(包括显式和隐式循环)时遇到的路径爆炸问题。文章详细解释了Prover如何通过有界循环展开来缓解这一问题,并介绍了--loop_iter和--optimistic_loop两个配置标志,同时指出了这些方法的局限性(不完整性或不健全性)。
--loop_iter
--optimistic_loop
本文详细介绍了 Certora 形式化验证工具中 requireInvariant 语句的用法。它通过在规则和不变式中引入已证明的不变式作为假设,避免了在不切实际的合约状态下进行验证,从而提高了验证的效率和准确性。文章以 ERC20 代币的 transfer 函数为例进行了实践演示。
requireInvariant
transfer
这篇文章详细介绍了使用 Certora 工具进行形式化验证中的参数化规则(Parametric Rules)。它解释了如何通过定义通用规则来验证智能合约在任何函数调用后都应保持不变的属性,例如 ERC-20 代币的总供应量不变性,并深入探讨了参数化规则的作用范围和执行机制。
本文详细介绍了如何设置环境并使用Certora Prover对Solidity智能合约进行形式化验证。内容涵盖了前置工具安装、项目目录配置、获取Certora访问密钥、编写并运行第一个规范文件,以及如何使用配置文件简化验证流程,并展示了验证结果。
这篇文章详细介绍了 Certora 形式化验证中“保留块”(preserved blocks)的作用和用法。它解释了如何利用保留块来指导 Certora Prover 避免在探索不切实际的符号状态时产生虚假告警,从而确保对智能合约不变量(invariants)的验证更加准确和有效。文章以 WETH 合约为案例,逐步演示了如何通过添加保留块来解决验证失败的问题。
文章介绍了形式化验证,阐明了规范的定义,并将其与模糊测试进行了比较,分析了形式化验证的优点和局限性。文中以Certora Prover为例,探讨了如何通过数学方法来证明智能合约符合预设规范,特别强调了其在DeFi应用中的重要性及核心原理。
本文介绍了如何在 Certora Verification Language (CVL) 中使用 if/else 语句和三元运算符进行形式化验证。通过实例展示了对 Solidity 合约中条件行为(如溢出处理、max 函数)的验证,并强调了优化 CVL 规则以提高验证效率的重要性。文章还讨论了 if/else 的局限性及三元运算符的适用场景。