evm-audit-helpers は、EVMスマートコントラクトのセキュリティ監査を迅速化するために設計された、厳選されたSolidityスニペット、Foundryスクリプト、テストテンプレートのコレクションです。このリポジトリには、リエントランシー、ストレージレイアウトの不一致、ガス最適化の落とし穴など、一般的な監査上の懸念事項に対応する再利用可能なビルディングブロックがバンドルされており、監査人や開発者は定型コードではなくロジックに集中できます。
主な目標:
| カテゴリ | 説明 | 主要ファイル |
|---|
| リエントランシーチェッカー | ヘルパーモディファイア、nonReentrant パターン、実行時検出スクリプト。 | src/helpers/Reentrancy.sol、scripts/reentrancy_check.sol |
| ストレージレイアウトアナライザー | ストレージスロットの比較、レイアウト図の生成、安全でないアップグレードの検出を行うユーティリティ。 | src/helpers/StorageLayout.sol、scripts/storage_analyzer.sol |
| Foundryテストテンプレート | 一般的な脆弱性(アクセス制御、算術、delegatecallなど)をカバーするボイラープレートテストスイート。 | test/templates/* |
| ガス&オペコード監査 | ガス使用量をプロファイリングし、高コストなオペコードをフラグ付けするスクリプト。 | 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️⃣ デフォルトのテストスイートを実行(リエントランシー、ストレージ、ガスチェックを含む)
forge test
ヒント: CI最適化されたコンパイラ設定を使用するには、シェルに
export FOUNDRY_PROFILE=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
このワークフローは失敗を自動的にフラグ付けし、MarkdownレポートをPRコメントとして公開します。
コントリビューションを歓迎します!以下の手順に従ってください:
git checkout -b feat/<name>)。forge coverage)が必要です。npm run lint – solhint と prettier を使用)。pragma solidity ^0.8.20;snake_case、public/externalには camelCase を使用。///)で文書化。# リンティングツールをインストール
npm install
# solhintを実行
npx solhint 'src/**/*.sol' 'test/**/*.sol'
# 自動フォーマット
npx prettier --write '**/*.sol'
evm-audit-helpers は MITライセンス の下でライセンスされています。詳細は LICENSE ファイルを参照してください。
楽しい監査を!