
Collection d'extraits Solidity et de scripts Foundry pour les audits de sécurité des contrats intelligents
evm-audit-helpers est une collection organisée d'extraits Solidity, de scripts Foundry et de modèles de tests conçus pour accélérer les audits de sécurité des smart‑contracts EVM. Le dépôt regroupe des blocs réutilisables pour les préoccupations d'audit courantes telles que la réentrance, les incohérences de disposition du stockage et les pièges d'optimisation du gaz, permettant aux auditeurs et aux développeurs de se concentrer sur la logique plutôt que sur le code standard.
Objectifs clés :
| Catégorie | Description | Fichiers principaux |
|---|---|---|
| Vérificateurs de réentrance | Modificateurs d'aide, modèles nonReentrant et scripts de détection à l'exécution. | src/helpers/Reentrancy.sol, scripts/reentrancy_check.sol |
| Analyseur de disposition du stockage | Utilitaires pour comparer les emplacements de stockage, générer des diagrammes de disposition et détecter les mises à niveau non sécurisées. | src/helpers/StorageLayout.sol, scripts/storage_analyzer.sol |
| Modèles de tests Foundry | Suites de tests standard couvrant les vulnérabilités courantes (contrôle d'accès, arithmétique, delegatecall, etc.). | test/templates/* |
| Audits de gaz et d'opcodes | Scripts pour profiler l'utilisation du gaz et signaler les opcodes coûteux. | scripts/gas_profiler.sol |
| Aides au reporting | Générateurs de rapports JSON/Markdown pouvant être intégrés aux tableaux de bord CI. | scripts/report_generator.sol |
| Intégration CI | Exemple de workflow GitHub Actions pour des exécutions d'audit automatisées. | .github/workflows/ci.yml |
Tous les aides sont écrits pour Solidity ^0.8.20 et sont compatibles avec Foundry (forge, cast).
# 1️⃣ Cloner le dépôt
git clone https://github.com/your-org/evm-audit-helpers.git
cd evm-audit-helpers
# 2️⃣ Installer Foundry (si ce n'est pas déjà fait)
curl -L https://foundry.paradigm.xyz | bash
foundryup
# 3️⃣ Installer les dépendances
forge install
# 4️⃣ Exécuter la suite de tests par défaut (inclut les vérifications de réentrance, de stockage et de gaz)
forge test
Astuce : Ajoutez
export FOUNDRY_PROFILE=cià votre shell pour utiliser les paramètres du compilateur optimisés pour la 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");
}
}
Exécutez le détecteur à l'exécution sur un contrat compilé :
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url $RPC_URL --broadcast
# Générer une description JSON de la disposition du stockage d'un contrat compilé
cast abi-storage --contract MyUpgradeable.sol:MyUpgradeable > storage.json
# Comparer avec une disposition de référence (par exemple, d'une version précédente)
forge script scripts/storage_analyzer.sol:StorageComparator \
--sig "compare(string memory, string memory)" storage.json reference.json
Le script affichera les emplacements incompatibles, les ombrages potentiels et des suggestions pour les annotations @custom:oz-upgrades-unsafe-allow.
Copiez un modèle dans votre dépôt d'audit :
cp -r test/templates/reentrancy/ my-audit/tests/
Modifiez MyContract.t.sol pour importer le contrat audité et exécutez :
forge test --match-contract MyContract
Ajoutez le workflow fourni à votre dépôt :
# .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
Le workflow signalera automatiquement les échecs et publiera un rapport Markdown en tant que commentaire sur la PR.
Nous accueillons les contributions ! Veuillez suivre ces étapes :
git checkout -b feat/<name>).forge coverage).npm run lint – utilise solhint et prettier).pragma solidity ^0.8.20;snake_case pour les fonctions internes, camelCase pour les fonctions publiques/externes.///).# Installer les outils de linting
npm install
# Exécuter solhint
npx solhint 'src/**/*.sol' 'test/**/*.sol'
# Formatage automatique
npx prettier --write '**/*.sol'
evm-audit-helpers est distribué sous la licence MIT. Voir le fichier LICENSE pour plus de détails.
Bon audit !