Si les smart contracts sont le “cerveau” d’Ethereum, Solidity en est la langue principale. C’est dans ce langage que sont écrits la plupart des protocoles DeFi, des NFTs, des DAO et des projets Web3 qui fonctionnent sur Ethereum et sur de nombreuses blockchains compatibles EVM. Pour toute personne qui souhaite comprendre comment sont construits ces protocoles, une première familiarisation avec Solidity est un passage obligé.
Dans cet article, nous allons présenter la logique de Solidity, son fonctionnement avec l’EVM (Ethereum Virtual Machine), ses forces, ses limites et les grands principes de sécurité à connaître, même si vous ne comptez pas devenir développeur à plein temps.
Qu’est-ce que Solidity ?
Solidity est un langage de programmation orienté objet, inspiré de langages comme JavaScript, C++ et Python. Il a été conçu spécifiquement pour écrire des smart contracts qui s’exécutent sur l’EVM d’Ethereum, décrite plus en détail dans l’article consacré à Web3 et aux infrastructures décentralisées.
À lire aussi: Bitcoin Script : Le Langage de Programmation de Bitcoin
Un fichier Solidity contient généralement une ou plusieurs définitions de contrats, avec :
À lire aussi: Swissborg (Borg) : Tout savoir sur cette cryptomonnaie innovante et son rôle dans la blockchain
• Des variables d’état : stockées de manière permanente sur la blockchain.
À lire aussi: Les smart contracts expliqués simplement
• Des fonctions : qui peuvent être appelées par les utilisateurs ou par d’autres contrats.
À lire aussi: Les DAO d’Investissement : Quand les Communautés Gèrent des Fonds sur la Blockchain
• Des événements : permettant de loguer des informations on-chain pour faciliter la lecture par les interfaces utilisateur.
À lire aussi: Construire un Portefeuille Crypto Diversifié : Méthode et Exemple
Compilation vers l’EVM
Solidity n’est pas exécuté directement par les nœuds. Le code est d’abord compilé en bytecode, un langage bas niveau que l’EVM comprend. Ce bytecode est ensuite déployé sur la blockchain via une transaction. Une fois déployé, le contrat devient immuable (sauf si un mécanisme de mise à jour spécifique a été prévu) et toute interaction avec lui se fait via des appels de fonctions encodés selon une interface standard.
Cette compilation signifie que de petites erreurs dans le code Solidity peuvent se transformer en failles critiques une fois déployées, d’où l’importance des audits et du respect de bonnes pratiques de sécurité, notamment dans la finance décentralisée.
Structure d’un contrat Solidity
Un contrat typique contient :
• Un en-tête de version : par exemple pragma solidity ^0.8.0; pour indiquer la version minimale du compilateur.
• Des importations : pour réutiliser des bibliothèques (par exemple celles d’OpenZeppelin pour les tokens standardisés comme ERC-20 ou ERC-721, sujets abordés dans l’article sur les standards de tokens).
• Des variables : pour stocker des soldes, des rôles (admin, propriétaire), des paramètres de configuration, etc.
• Des fonctions publiques ou externes : appelables par les utilisateurs (par exemple transfer(), stake(), vote()).
• Des fonctions internes ou privées : utilisées comme blocs de construction internes.
• Des modifiers : pour ajouter des conditions à l’exécution de certaines fonctions (par exemple “seulement le propriétaire” ou “seulement avant telle date”).
Gestion du gas et optimisation
Chaque opération exécutée par un contrat consomme du gas, qui se traduit en frais payés par l’utilisateur. Un contrat mal optimisé peut coûter très cher à utiliser, ce qui peut tuer son adoption. Les développeurs Solidity doivent donc apprendre à écrire un code efficace, en minimisant les accès au stockage (très coûteux) et en évitant des boucles sur de très grandes structures de données.
La question des gas fees est au cœur de l’expérience utilisateur sur Ethereum, comme détaillé dans l’article consacré aux frais et limites de la blockchain, mais aussi dans celui qui traite de la transition vers le Proof of Stake via le Merge d’Ethereum.
Principaux risques et erreurs fréquentes en Solidity
De nombreux hacks et pertes de fonds dans la DeFi proviennent d’erreurs de code Solidity :
Reentrancy : une fonction qui envoie de l’ETH à un contrat externe avant de mettre à jour ses propres soldes peut être attaquée si ce contrat rappelle la fonction initiale en boucle.
Débordements arithmétiques (overflow/underflow) : historiquement, des opérations sur des entiers pouvaient produire des résultats inattendus. Les versions modernes de Solidity intègrent des protections, mais il reste important de gérer correctement les calculs.
Mauvaises gestions des autorisations : des fonctions critiques laissées publiques, ou des modifiers mal écrits, peuvent permettre à des attaquants de prendre le contrôle du contrat.
Ces risques rappellent l’importance d’audits de smart contracts, décrits plus largement dans la partie sécurité de l’écosystème crypto. Certains protocoles ont perdu des centaines de millions de dollars à cause de quelques lignes de code mal pensées.
Bonnes pratiques de développement en Solidity
Parmi les bonnes pratiques recommandées :
• Utiliser des bibliothèques éprouvées : comme OpenZeppelin, plutôt que de réécrire soi-même des standards tels qu’ERC-20 ou ERC-721.
• Limiter la surface d’attaque : éviter les fonctions inutiles, restreindre les accès, ne pas stocker plus de données que nécessaire.
• Tester et auditer : écrire des tests unitaires, simuler des scénarios d’attaque, recourir à des audits tiers pour les protocoles qui gèrent des montants significatifs.
• Prévoir des mécanismes de sécurité : comme des pauses d’urgence (“circuit breaker”) pour désactiver certaines fonctions en cas de comportement anormal.
Solidity au-delà d’Ethereum
De nombreuses blockchains compatibles EVM (Binance Smart Chain, Avalanche C-Chain, Fantom, Polygon, etc.) utilisent également Solidity comme langage principal. Un contrat bien écrit peut souvent être porté sur plusieurs de ces réseaux avec peu ou pas de modifications, ce qui facilite le déploiement multi-chaînes des projets Web3.
Cette compatibilité favorise l’émergence d’un écosystème commun, où les développeurs peuvent réutiliser leurs compétences et leurs outils. Les standards de tokens, la DeFi et les NFTs se déploient ainsi bien au-delà d’Ethereum, comme évoqué dans l’article sur les applications blockchain.
Conclusion : la “langue” dominante du Web3
Solidity s’est imposé comme la langue dominante du Web3 et de la DeFi. Maîtriser au moins ses concepts de base permet de lire les contrats, comprendre les risques, dialoguer avec les développeurs et mieux évaluer les projets.
Pour celles et ceux qui souhaitent aller plus loin, la documentation officielle de Solidity et les tutoriels détaillés proposés sur https://ethereum.org sont un excellent point de départ pour apprendre à écrire, tester et déployer ses premiers contrats de manière sécurisée.

