💻 Développement

dev-smart-contract-auditor

Audit de sécurité de smart contracts Solidity et blockchain.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- dev-smart-contract-auditor --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } dev-smart-contract-auditor -Launch"

🚀 Déjà installé ?

claude "/dev-smart-contract-auditor"

Ou tapez /dev-smart-contract-auditor dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

smart contractSolidityaudit blockchainvulnérabilité smart contractreentrancyERC-20ERC-721Web3 security

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/dev-smart-contract-auditor ~/.claude/skills/

Payload du plugin : skills/dev-smart-contract-auditor · source éditable : dev-skills/smart-contract-auditor

📖 Manuel

Smart Contract Auditor

Workflow d'audit

1. Cartographie du périmètre

Avant toute analyse de code, délimiter précisément la surface d'attaque :

# Compter les lignes Solidity hors tests
find . -name "*.sol" ! -path "*/test*" ! -path "*/node_modules*" | xargs wc -l | sort -rn

# Lister les contrats upgradeable (proxy pattern)
grep -rl "UUPSUpgradeable\|TransparentUpgradeableProxy\|BeaconProxy" contracts/

Critères de décision sur la profondeur :

2. Analyse statique automatisée

Lancer systématiquement avant toute revue manuelle :

# Slither — détection patterns vulnérables
slither . --checklist --json slither-report.json

# Mythril — analyse symbolique (fonctions critiques)
myth analyze contracts/Vault.sol --execution-timeout 120 --solv 0.8.24

# Aderyn (2024+) — alternative Rust, plus rapide sur gros repos
aderyn . --output report.md

Trier les findings Slither par impact : ignorer low et informational en premier passage, se concentrer sur high et medium.

3. Vérification des vulnérabilités critiques

Reentrancy — pattern CEI (Checks-Effects-Interactions) obligatoire :

// VULNERABLE
function withdraw(uint amount) external {
    require(balances[msg.sender] >= amount);
    (bool ok,) = msg.sender.call{value: amount}(""); // appel externe AVANT mise à jour
    balances[msg.sender] -= amount;
}

// CORRECT
function withdraw(uint amount) external nonReentrant {
    require(balances[msg.sender] >= amount);
    balances[msg.sender] -= amount; // état mis à jour EN PREMIER
    (bool ok,) = msg.sender.call{value: amount}("");
    require(ok);
}

Access control — vérifier chaque fonction external/public :

// Checklist : toute fonction modifiant l'état a-t-elle un modifier ?
// Slither détecte : slither . --detect missing-zero-check,suicidal,unprotected-upgrade

Flash loan / price manipulation :

Signature replay :

Overflow (Solidity < 0.8) :

4. Analyse des standards ERC

# Vérifier conformité ERC-20 avec Foundry
forge test --match-contract ERC20Compliance -vvv

# OpenZeppelin Wizard — base safe à utiliser comme référence
# https://wizard.openzeppelin.com/

Points de contrôle ERC-20 : transfer retourne bool, approve + transferFrom atomique, events Transfer/Approval émis. ERC-721 : safeTransferFrom gère IERC721Receiver, tokenURI ne doit pas revert sur token inexistant.

5. Tests et fuzzing avec Foundry

# Lancer les tests en mode fork mainnet
forge test --fork-url $ETH_RPC_URL --fork-block-number 20000000 -vvv

# Fuzzing d'une fonction critique (définir un invariant)
# Dans le fichier de test Foundry :
// test/VaultFuzz.t.sol
contract VaultFuzzTest is Test {
    Vault vault;

    function setUp() public { vault = new Vault(); }

    // Invariant : la balance du contrat >= somme des dépôts utilisateurs
    function invariant_solvency() public view {
        assertGe(address(vault).balance, vault.totalDeposits());
    }
}
forge test --match-contract VaultFuzzTest --fuzz-runs 10000

6. Vérification gas et storage

forge snapshot --diff                    # comparer avant/après optimisation
forge test --gas-report                  # rapport détaillé par fonction

Règles d'optimisation sûres :

Ne jamais sacrifier la sécurité pour le gas : toute économie < 5000 gas sur une fonction critique ne justifie pas de supprimer un nonReentrant.

7. Rapport de findings

Chaque finding suit ce template :

## [CRIT-01] Reentrancy dans `withdraw()`

**Sévérité** : Critical
**Contrat** : Vault.sol, ligne 42
**Impact** : Drain total des fonds du contrat
**Reproductibilité** : 100%

### PoC
[code Solidity ou séquence d'appels reproductible]

### Recommandation
Appliquer le pattern CEI + modificateur `nonReentrant` d'OpenZeppelin.

### Statut
[ ] Non corrigé  [ ] Corrigé  [ ] Accepté (risque assumé)

Niveaux de sévérité :

NiveauCritère
CriticalPerte de fonds, drain total possible
HighPerte partielle ou blocage permanent
MediumComportement inattendu, contournement de règle métier
LowBonne pratique non respectée, risque faible
InfoQualité de code, optimisation

Garde-fous et anti-patterns

Outils de référence (2026)

OutilUsageCommande rapide
SlitherAnalyse statiqueslither . --checklist
FoundryTests + fuzzingforge test --fuzz-runs 5000
AderynAnalyse statique Rustaderyn .
EchidnaFuzzing basé propriétésechidna-test . --contract MyContract
MythrilAnalyse symboliquemyth analyze file.sol
CertoraVérification formellecertoraRun spec.conf
TenderlySimulation fork + debugUI + CLI