Repolode
crytic

crytic/echidna

Echidna 是一款用 Haskell 编写的以太坊智能合约模糊测试工具,通过生成调用序列来验证不变量和断言。

Star
3,189
Fork
436
未关闭 Issue
107
最近提交
23小时前

这是什么?

Echidna 是一款面向以太坊智能合约的模糊测试与基于属性的测试工具。它根据合约 ABI 生成基于语法的调用序列,检查用户定义的不变量(以 echidna_ 开头、返回 bool 的函数)或 Solidity 的 assert() 断言。一旦找到能使属性失效的调用序列,工具会输出该序列,并可对测试用例进行最小化,便于快速定位问题。

工具支持多种测试模式,包括属性测试、断言测试、Foundry 风格测试、单交易符号化验证、整数溢出检测、int256 返回值优化以及仅收集覆盖率的探索模式。它通过 crytic-compile 支持 Foundry、Hardhat 和 Truffle 项目,并借助 Slither 在模糊测试前提取合约信息。结果可通过交互式终端界面、纯文本或 JSON 输出查看,覆盖率最大化的语料库也能保存,并标注到源代码上。

核心功能

  • 01根据合约 ABI 和源码生成针对性的调用序列。
  • 02测试以 echidna_ 开头的布尔不变量和 Solidity 断言。
  • 03对失败的测试用例进行最小化,便于快速分析。
  • 04输出带源码标注的覆盖率信息。
  • 05支持文本、JSON 以及交互式终端界面输出。
  • 06通过 crytic-compile 兼容 Foundry、Hardhat 和 Truffle 项目。

适用场景

  • 在部署前发现 DeFi 协议合约中的不变量违规问题。
  • 检查代币合约是否存在余额或整数溢出漏洞。
  • 在 GitHub Actions 工作流中运行智能合约属性测试。
  • 在 Solidity 合约上复现模糊测试相关的研究案例。

快速上手

  1. 1

    使用 Homebrew 安装 Echidna(macOS / Linux)

    brew install echidna
  2. 2

    在 README 中的示例合约上运行 Echidna

    echidna tests/solidity/basic/flags.sol

使用前须知

  • 对 Vyper 的支持有限。
  • 对测试库的支持有限。
  • 安装 Echidna 需要额外配置 Slither 依赖。
  • 容器镜像目前仅支持 x86 系统构建。

收录于专题

标签

常见问题

echidna 是什么?
Echidna 是一款用 Haskell 编写的以太坊智能合约模糊测试工具,通过生成调用序列来验证不变量和断言。 Echidna 是一款面向以太坊智能合约的模糊测试与基于属性的测试工具。它根据合约 ABI 生成基于语法的调用序列,检查用户定义的不变量(以 echidna_ 开头、返回 bool 的函数)或 Solidity 的 assert() 断言。一旦找到能使属性失效的调用序列,工具会输出该序列,并可对测试用例进行最小化,便于快速定位问题。
echidna 可以免费使用吗?用的什么许可证?
echidna 以 AGPL-3.0 许可证开源。用于商业产品前,请先确认许可证条款。
echidna 还在维护吗?
活跃维护中。echidna 最近一次提交是在 2026年11月6日。
echidna 适合用来做什么?
在部署前发现 DeFi 协议合约中的不变量违规问题。 检查代币合约是否存在余额或整数溢出漏洞。 在 GitHub Actions 工作流中运行智能合约属性测试。 在 Solidity 合约上复现模糊测试相关的研究案例。
echidna 怎么安装和运行?
使用 Homebrew 安装 Echidna(macOS / Linux): brew install echidna 在 README 中的示例合约上运行 Echidna: echidna tests/solidity/basic/flags.sol
在哪里获取 echidna?
源代码和安装说明在 GitHub 上:https://github.com/crytic/echidna

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目