evm-audit-helpers 是一个精心整理的 Solidity 代码片段、Foundry 脚本和测试模板集合,旨在加速 EVM 智能合约安全审计。该仓库打包了针对常见审计问题的可复用构建模块,如重入攻击、存储布局不匹配和 gas 优化陷阱,使审计人员和开发者能够专注于逻辑而非样板代码。
核心目标:
| 类别 | 描述 | 主要文件 |
|---|---|---|
| 重入检查器 | 辅助修饰符、nonReentrant 模式和运行时检测脚本。 | src/helpers/Reentrancy.sol、scripts/reentrancy_check.sol |
| 存储布局分析器 | 用于比较存储槽位、生成布局图并检测不安全升级的工具。 | src/helpers/StorageLayout.sol、scripts/storage_analyzer.sol |
| Foundry 测试模板 | 覆盖常见漏洞(访问控制、算术、delegatecall 等)的样板测试套件。 | test/templates/* |
| Gas 与操作码审计 | 用于分析 gas 使用情况并标记昂贵操作码的脚本。 | scripts/gas_profiler.sol |
| 报告辅助工具 | 可接入 CI 仪表板的 JSON/Markdown 报告生成器。 | scripts/report_generator.sol |
| CI 集成 | 用于自动化审计运行的示例 GitHub Actions 工作流。 | .github/workflows/ci.yml |
所有辅助工具均针对 Solidity ^0.8.20 编写,并与 Foundry (forge, cast) 兼容。
# 1️⃣ 克隆仓库
git clone https://github.com/your-org/evm-audit-helpers.git
cd evm-audit-helpers
# 2️⃣ 安装 Foundry(如果尚未安装)
curl -L https://foundry.paradigm.xyz | bash
foundryup
# 3️⃣ 安装依赖
forge install
# 4️⃣ 运行默认测试套件(包括重入、存储和 gas 检查)
forge test
提示: 在 shell 中添加
export FOUNDRY_PROFILE=ci以使用 CI 优化的编译器设置。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "evm-audit-helpers/src/helpers/Reentrancy.sol";
contract MyVault is ReentrancyGuard {
mapping(address => uint256) private balances;
function deposit() external payable nonReentrant {
balances[msg.sender] += msg.value;
}
function withdraw(uint256 amount) external nonReentrant {
require(balances[msg.sender] >= amount, "Insufficient");
balances[msg.sender] -= amount;
(bool ok,) = msg.sender.call{value: amount}("");
require(ok, "Transfer failed");
}
}
在已编译合约上运行运行时检测器:
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url $RPC_URL --broadcast
# 生成已编译合约存储布局的 JSON 描述
cast abi-storage --contract MyUpgradeable.sol:MyUpgradeable > storage.json
# 与参考布局进行比较(例如,来自先前版本)
forge script scripts/storage_analyzer.sol:StorageComparator \
--sig "compare(string memory, string memory)" storage.json reference.json
该脚本将输出不匹配的槽位、潜在的变量遮蔽问题,以及 @custom:oz-upgrades-unsafe-allow 注解的建议。
将模板复制到您的审计仓库中:
cp -r test/templates/reentrancy/ my-audit/tests/
编辑 MyContract.t.sol 以导入被审计合约,然后运行:
forge test --match-contract MyContract
将提供的工作流添加到您的仓库中:
# .github/workflows/audit.yml
name: EVM Audit
on:
push:
branches: [main]
pull_request:
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Foundry
run: curl -L https://foundry.paradigm.xyz | bash && foundryup
- name: Run Audit Suite
run: |
forge install
forge test -vv
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url ${{ secrets.RPC_URL }}
forge script scripts/storage_analyzer.sol:StorageComparator --sig "compare(string,string)" storage.json reference.json
该工作流将自动标记失败项,并以 PR 评论的形式发布 Markdown 报告。
我们欢迎贡献!请遵循以下步骤:
git checkout -b feat/<name>)。forge coverage)。npm run lint – 使用 solhint 和 prettier)。pragma solidity ^0.8.20;snake_case,公共/外部函数使用 camelCase。///)为每个公共合约/接口编写文档。# 安装代码检查工具
npm install
# 运行 solhint
npx solhint 'src/**/*.sol' 'test/**/*.sol'
# 自动格式化
npx prettier --write '**/*.sol'
evm-audit-helpers 根据 MIT 许可证 授权。详情请参阅 LICENSE 文件。
祝审计愉快!