Bugs Solidity — Trouvez et Corrigez les Erreurs

Chaque développeur Solidity fait ces erreurs. Apprenez à les repérer et les corriger avant le déploiement.

Solidity est impitoyable. Un mot-clé storage manquant peut détruire votre contrat. Une valeur de retour non vérifiée peut drainer tous les fonds. Les compétences en débogage ne sont pas optionnelles — c'est une question de survie.

Top 5 des Bugs Courants

Pointeur Storage Non Initialisé

Déclarer une struct sans storage ou memory crée un pointeur dangereux vers le slot 0.

Visibilité Public vs External

Utiliser public pour des fonctions appelées uniquement en externe gaspille du gas en copiant calldata vers memory.

Reentrancy Sans Protection

Les appels externes avant mise à jour de l'état permettent l'exploitation récursive de votre contrat.

Valeurs de Retour Non Vérifiées

Ignorer les valeurs de retour de call ou transfer fait échouer silencieusement les transferts.

tx.origin pour l'Authentification

Utiliser tx.origin au lieu de msg.sender permet les attaques de phishing.

Exemple : Bug de Pointeur Storage

❌ Bug : Pointeur Non Initialisé

struct User {
    address addr;
    uint256 balance;
}

mapping(uint256 => User) users;

function addUser(uint256 id) public {
    User user; // Pointe vers le slot 0 !
    user.addr = msg.sender;
    user.balance = 100;
    // Écrase le slot 0 au lieu de users[id]
}

✅ Corrigé : Storage Explicite

struct User {
    address addr;
    uint256 balance;
}

mapping(uint256 => User) users;

function addUser(uint256 id) public {
    User storage user = users[id]; // Storage explicite
    user.addr = msg.sender;
    user.balance = 100;
    // Écrit correctement dans users[id]
}

La correction : Toujours déclarer les variables struct avec storage ou memory. L'omettre pointe par défaut vers le slot 0, corrompant l'état.

Questions Fréquentes

Quel est le bug Solidity le plus courant ?

Les bugs de pointeurs storage sont les plus fréquents pour les débutants. Oublier d'initialiser un pointeur storage crée une référence dangereuse au slot 0, pouvant écraser l'état critique du contrat.

Comment déboguer Solidity efficacement ?

Utilisez les tests Foundry avec vm.prank, vm.expectRevert et console.log. Écrivez des tests unitaires pour les cas limites. Utilisez des outils d'analyse statique comme Slither pour détecter les patterns courants.

Les bugs Solidity sont-ils différents des autres langages ?

Oui. Solidity a des pièges uniques : état blockchain immuable, coûts en gas, reentrancy et sémantique storage vs memory. Les outils de débogage traditionnels ne fonctionnent pas — vous avez besoin de frameworks de test spécialisés.

Maîtrisez le Débogage Solidity

Entraînez-vous à trouver et corriger des bugs avec 50+ défis réels. Apprenez les patterns qui préviennent les bugs avant qu'ils n'arrivent.

Commencer gratuitement →