
Sammlung von Solidity-Snippets und Foundry-Skripten für Smart-Contract-Sicherheitsaudits
evm-audit-helpers ist eine kuratierte Sammlung von Solidity-Snippets, Foundry-Skripten und Testvorlagen, die darauf ausgelegt ist, EVM-Smart-Contract-Sicherheitsaudits zu beschleunigen. Das Repository bündelt wiederverwendbare Bausteine für häufige Audit-Themen wie Reentrancy, Storage-Layout-Abweichungen und Gas-Optimierungs-Fallstricke, sodass sich Auditoren und Entwickler auf die Logik konzentrieren können, statt auf Boilerplate-Code.
Hauptziele:
| Kategorie | Beschreibung | Primäre Dateien |
|---|---|---|
| Reentrancy-Prüfer | Hilfs-Modifier, nonReentrant-Muster und Laufzeit-Erkennungsskripte. | src/helpers/Reentrancy.sol, scripts/reentrancy_check.sol |
| Storage-Layout-Analysator | Hilfsprogramme zum Vergleichen von Storage-Slots, Erzeugen von Layout-Diagrammen und Erkennen unsicherer Upgrades. | src/helpers/StorageLayout.sol, scripts/storage_analyzer.sol |
| Foundry-Testvorlagen | Boilerplate-Test-Suiten für häufige Schwachstellen (Zugriffskontrolle, Arithmetik, delegatecall usw.). | test/templates/* |
| Gas- und Opcode-Audits | Skripte zur Profilierung der Gas-Nutzung und Kennzeichnung teurer Opcodes. | scripts/gas_profiler.sol |
| Berichts-Helfer | JSON/Markdown-Reporter, die in CI-Dashboards eingespeist werden können. | scripts/report_generator.sol |
| CI-Integration | Beispiel-GitHub-Actions-Workflow für automatisierte Audit-Läufe. | .github/workflows/ci.yml |
Alle Helfer sind für Solidity ^0.8.20 geschrieben und mit Foundry (forge, cast) kompatibel.
# 1️⃣ Repository klonen
git clone https://github.com/your-org/evm-audit-helpers.git
cd evm-audit-helpers
# 2️⃣ Foundry installieren (falls noch nicht geschehen)
curl -L https://foundry.paradigm.xyz | bash
foundryup
# 3️⃣ Abhängigkeiten installieren
forge install
# 4️⃣ Standard-Test-Suite ausführen (enthält Reentrancy-, Storage- und Gas-Prüfungen)
forge test
Tipp: Fügen Sie
export FOUNDRY_PROFILE=cizu Ihrer Shell hinzu, um die CI-optimierten Compiler-Einstellungen zu verwenden.
// 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");
}
}
Führen Sie den Laufzeit-Detektor für einen kompilierten Vertrag aus:
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url $RPC_URL --broadcast
# Eine JSON-Beschreibung des Storage-Layouts eines kompilierten Vertrags erzeugen
cast abi-storage --contract MyUpgradeable.sol:MyUpgradeable > storage.json
# Mit einem Referenz-Layout vergleichen (z. B. aus einer früheren Version)
forge script scripts/storage_analyzer.sol:StorageComparator \
--sig "compare(string memory, string memory)" storage.json reference.json
Das Skript gibt abweichende Slots, mögliches Shadowing und Vorschläge für @custom:oz-upgrades-unsafe-allow-Annotationen aus.
Kopieren Sie eine Vorlage in Ihr Audit-Repository:
cp -r test/templates/reentrancy/ my-audit/tests/
Bearbeiten Sie MyContract.t.sol, um den zu prüfenden Vertrag zu importieren, und führen Sie dann aus:
forge test --match-contract MyContract
Fügen Sie den bereitgestellten Workflow zu Ihrem Repository hinzu:
# .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
Der Workflow kennzeichnet Fehler automatisch und veröffentlicht einen Markdown-Bericht als PR-Kommentar.
Wir freuen uns über Beiträge! Bitte befolgen Sie diese Schritte:
git checkout -b feat/<name>).forge coverage).npm run lint – verwendet solhint und prettier).pragma solidity ^0.8.20;snake_case für interne Funktionen verwenden, camelCase für öffentliche/externe.///) dokumentieren.# Linting-Tools installieren
npm install
# solhint ausführen
npx solhint 'src/**/*.sol' 'test/**/*.sol'
# Automatische Formatierung
npx prettier --write '**/*.sol'
evm-audit-helpers ist unter der MIT-Lizenz lizenziert. Details finden Sie in der Datei LICENSE.
Viel Spaß beim Auditing!