SuperAPI AI 工具集

echidna

安全与审计

查看项目

更新于 10-16 06:03

技能介绍

Echidna 是一个面向以太坊智能合约的基于属性的模糊测试工具(property-based fuzzer),来源于 crytic/echidna 项目,本文所述技能基于该来源生成。

用途 Echidna 用于对以太坊智能合约进行模糊测试。它生成随机的合约调用序列,以尝试证伪不变量(invariants),即名称带有特定前缀(如 echidna_)、不接受参数且返回 bool 的 Solidity 函数;也可以尝试触发 Solidity assert 失败。

主要能力

  • 基于属性的模糊测试:通过随机调用序列来验证不变量或触发断言失败。
  • 覆盖率引导的模糊测试:支持覆盖率引导和语料库收集。
  • 多种测试模式:property、assertion、overflow、exploration、optimization。
  • 函数过滤:支持 filterFunctions、filterBlacklist、白名单/黑名单。
  • 符号执行:支持 symExec、SMT 求解器(cvc5、z3、bitwuzla)及调优选项。
  • FFI 与作弊码:支持 allowFFI 以及 HEVM 作弊码支持。
  • 构建系统集成:可与 Foundry、Hardhat、Truffle 集成,支持 echidna .、allContracts、solcLibs。
  • 输出与脚本:支持 text、json、none 输出驱动;JSON 输出包含 Campaign/Test/Transaction 结构,适用于 CI 和脚本。
  • 调试与性能:支持性能分析(+RTS -p -s)以及常见性能原因排查。

使用方式

  • 定义不变量:编写名称带 echidna_ 等前缀、无参数、返回 bool 的 Solidity 函数。
  • 配置:通过 YAML 配置 testMode、gas、coverage、corpus、workers、filtering 等。
  • 命令行调用:选择目标合约与输出驱动(text、json、none)。
  • 覆盖率与语料库:配置 corpusDir,产出 covered.txt、行标记与覆盖率报告。
  • 构建系统:在 Foundry、Hardhat、Truffle 等项目中运行,使用 echidna .、allContracts、solcLibs 等选项。
  • 最佳实践:参考不变量模式,包括多发送者、payable、gas/时间、assertions 与 invariants 的取舍。

适用场景 适用于需要验证以太坊智能合约属性、检查不变量是否成立、触发断言失败等场景,适合在 CI 中通过 JSON 输出进行自动化测试与脚本处理。

限制 本资料未提供收费、价格、平台、效果或具体操作步骤等细节;这些内容暂未提供。