Un programme sur la blockchain
Un smart contract est un programme stocké sur une blockchain qui s'exécute automatiquement lorsque des conditions prédéfinies sont remplies. Le terme a été inventé par l'informaticien Nick Szabo en 1994, mais le concept n'est devenu concret qu'avec le lancement d'Ethereum en 2015.
L'analogie la plus simple est celle d'un distributeur automatique. Vous insérez de l'argent, appuyez sur un bouton, et la machine délivre votre article. Il n'y a pas de négociation, pas d'intermédiaire, aucune confiance n'est requise. La machine suit sa programmation à chaque fois. Un smart contract fonctionne de la même manière, à la différence qu'il s'exécute sur une blockchain où des milliers d'ordinateurs vérifient que le code a été exécuté correctement.
Ce qui rend cela puissant, c'est la combinaison de l'automatisation et de la confiance. Un smart contract ne peut pas décider de changer ses règles en cours de transaction. Il ne peut pas favoriser qui que ce soit. Il ne peut pas être corrompu. Il s'exécute exactement comme il a été écrit, et le résultat est enregistré de manière permanente sur un registre public que tout le monde peut vérifier.
Comment fonctionnent les smart contracts
Le cycle de vie d'un smart contract comporte plusieurs étapes :
- Écriture. Un développeur écrit la logique du contrat dans un langage de programmation (le plus souvent Solidity pour Ethereum). Le code définit ce que fait le contrat : accepter des dépôts, exécuter des transactions, émettre des jetons, gérer des votes.
- Déploiement. Le code compilé est envoyé à la blockchain via une transaction spéciale. Une fois déployé, le contrat possède sa propre adresse — tout comme un portefeuille — et réside sur la blockchain de manière permanente.
- Interaction. Les utilisateurs et d'autres contrats envoient des transactions à l'adresse du contrat. Chaque transaction déclenche une fonction dans le code. Par exemple, appeler la fonction "swap" sur Uniswap envoie des jetons et en reçoit d'autres en retour.
- Exécution. Les validateurs du réseau (ou les mineurs, sur les chaînes en Proof of Work) exécutent le code du contrat. Des milliers d'ordinateurs indépendants effectuent le même calcul et vérifient qu'ils obtiennent tous le même résultat. C'est ce qui rend l'exécution fiable : aucune partie ne peut falsifier le résultat.
- Changement d'état. Le résultat de l'exécution est enregistré sur la blockchain. Les soldes sont mis à jour, les jetons sont transférés, les enregistrements sont modifiés. Le nouvel état est permanent et transparent.
Ce que font les smart contracts en pratique
Presque tout dans la crypto, au-delà des simples transferts Bitcoin, est alimenté par des smart contracts. Voici les principales catégories :
Gestion des jetons
Chaque jeton ERC-20 (USDC, UNI, LINK, AAVE) est un smart contract. Le contrat suit le solde de chaque détenteur et traite chaque transfert. Lorsque vous "détenez" de l'USDC, ce que vous détenez réellement est une entrée de solde dans le smart contract de l'USDC.
Trading décentralisé
Uniswap, Curve et d'autres DEX sont des smart contracts qui détiennent des pools de jetons et exécutent des échanges en utilisant des formules mathématiques. Pas de carnet d'ordres, pas de moteur de correspondance, pas d'opérateur d'échange : juste du code.
Prêts et emprunts
Des protocoles comme Aave et Compound sont des smart contracts qui acceptent des dépôts, suivent les taux d'intérêt de manière algorithmique et gèrent les garanties (collateral). Les liquidations se produisent automatiquement lorsque les positions deviennent sous-collatéralisées.
Gouvernance
Les contrats de gouvernance DAO gèrent les propositions, les votes et les dépenses de trésorerie. Les détenteurs de jetons votent on-chain, et si une proposition est adoptée, le contrat peut exécuter l'action approuvée sans aucun intermédiaire humain.
Staking
Les contrats de staking verrouillent les jetons et distribuent des récompenses. Les protocoles de liquid staking comme Lido utilisent des smart contracts pour regrouper les dépôts des utilisateurs, gérer les validateurs et émettre des jetons de staking liquide (stETH) en retour.
Contrats immuables vs évolutifs
C'est l'une des distinctions les plus importantes en matière de sécurité des smart contracts, et elle mérite une attention particulière.
Les contrats immuables ne peuvent pas être modifiés après le déploiement. Le code est permanent. Aucun administrateur, aucune équipe, aucun vote de gouvernance ne peut le modifier. Uniswap V2 et Liquity V1 en sont des exemples : une fois déployés, ils fonctionnent exactement comme écrit jusqu'à ce que la blockchain Ethereum elle-même cesse de fonctionner. Cela offre la garantie de confiance la plus forte possible : vous pouvez vérifier le code aujourd'hui et savoir qu'il se comportera de la même manière pour toujours.
Les contrats évolutifs (upgradeable) utilisent un modèle de conception appelé "proxy". Les utilisateurs interagissent avec un contrat proxy qui délègue les appels à un contrat d'implémentation séparé. Un administrateur (généralement un portefeuille multisig contrôlé par l'équipe du protocole) peut remplacer le contrat d'implémentation, modifiant ainsi la logique avec laquelle les utilisateurs interagissent. Cela permet aux équipes de corriger des bugs et d'ajouter des fonctionnalités, mais cela signifie aussi que l'administrateur peut changer les règles.
Le compromis est net :
- Contrats immuables : confiance maximale, mais les bugs ne peuvent jamais être corrigés. En cas de vulnérabilité, la seule option est de déployer un nouveau contrat et de demander aux utilisateurs de migrer.
- Contrats évolutifs : flexibilité pour résoudre les problèmes, mais les utilisateurs doivent faire confiance à l'administrateur pour ne pas effectuer de changements malveillants. Une clé d'administration compromise signifie un protocole compromis.
La plupart des grands protocoles DeFi utilisent une forme d'évolutivité avec des garde-fous : timelocks (les changements prennent effet après un délai, donnant aux utilisateurs le temps de sortir), clés d'administration multisig (plusieurs personnes doivent approuver les changements) et votes de gouvernance (les détenteurs de jetons décident des mises à jour). Mais rien de tout cela n'est infaillible. Comprendre le mécanisme de mise à jour d'un protocole est une partie essentielle de l'évaluation de son risque.
Audits de smart contracts
Avant de déployer un smart contract qui détiendra une valeur importante, les équipes responsables engagent des cabinets de sécurité indépendants pour auditer le code. Un audit implique des chercheurs en sécurité expérimentés qui examinent le code ligne par ligne, testent les cas limites et tentent de trouver des vulnérabilités avant les attaquants.
Faits clés sur les audits :
- Plusieurs audits valent mieux qu'un. Différents auditeurs détectent des choses différentes. Un protocole avec trois audits de cabinets réputés est généralement plus sûr qu'un protocole avec un seul audit.
- Les audits ne sont pas des garanties. Un audit réduit le risque mais ne l'élimine pas. De nombreux protocoles piratés avaient été audités, parfois par plusieurs cabinets. Les auditeurs trouvent certains bugs, pas tous.
- La portée compte. Un audit des contrats principaux ne couvre pas les contrats périphériques, les intégrations d'oracles ou les configurations de déploiement. Les attaques exploitent souvent les failles entre les composants audités.
- Les modifications post-audit invalident les audits. Si une équipe modifie le code après un audit, l'audit ne s'applique plus au code modifié. C'est une source courante de vulnérabilités.
Transparence open source
La plupart des smart contracts DeFi sont open source : le code est publié sur des explorateurs de blocs comme Etherscan, et n'importe qui peut le lire, le vérifier et l'analyser. Cette transparence est une caractéristique fondamentale de l'écosystème. Vous n'avez pas à faire confiance au marketing d'une équipe ; vous pouvez lire leur code.
En pratique, la plupart des utilisateurs ne peuvent pas lire le code Solidity, et c'est normal. Ce qui compte, c'est que les chercheurs en sécurité, les auditeurs, les équipes concurrentes et la communauté des développeurs au sens large puissent le lire. Cela crée une couche de vérification collective qui manque aux systèmes financiers centralisés. Lorsqu'un code de protocole est en ligne et open source depuis des années sans avoir été exploité, c'est une preuve significative (bien que non absolue) de sécurité.
Risques des smart contracts
Des milliards de dollars ont été perdus à cause de vulnérabilités dans les smart contracts. Les vecteurs d'attaque les plus courants incluent :
- Réentrance (Reentrancy). Le contrat d'un attaquant rappelle le contrat victime avant que la première exécution ne soit terminée, drainant les fonds de manière répétée. Le hack de The DAO en 2016 (60 millions de dollars) a utilisé cette technique. Les meilleures pratiques modernes et les protections contre la réentrance ont rendu cela moins courant, mais cela existe toujours.
- Manipulation d'oracles. Les smart contracts qui dépendent de flux de prix (oracles) peuvent être exploités si un attaquant manipule les données de prix. Les attaques par flash loan fonctionnent souvent en faussant temporairement les prix sur un DEX que le contrat victime utilise comme oracle.
- Erreurs de logique. Des erreurs de programmation simples (mathématiques incorrectes, contrôles d'accès manquants, transitions d'état défectueuses) qui permettent aux attaquants d'extraire de la valeur de manières que les développeurs n'avaient pas anticipées.
- Compromission de clé d'administration. Si la clé privée qui contrôle un contrat évolutif est volée, l'attaquant peut mettre à jour le contrat pour drainer tous les fonds. C'est pourquoi les clés d'administration doivent être protégées par des portefeuilles multisig et des timelocks.
- Attaques par mise à jour. Une équipe malveillante ou compromise pousse une mise à jour de contrat qui inclut une porte dérobée (backdoor). Les timelocks aident en donnant aux utilisateurs une fenêtre pour retirer leurs fonds avant que la mise à jour ne prenne effet.
Pour des conseils pratiques sur la façon de vous protéger, consultez notre guide pour rester en sécurité dans la crypto.
Hacks majeurs de smart contracts
| Incident | Montant perdu | Cause |
|---|---|---|
| The DAO (2016) | 60 millions $ | Vulnérabilité de réentrance |
| Ronin Bridge (2022) | 625 millions $ | Compromission de clé de validateur |
| Wormhole (2022) | 325 millions $ | Bug de vérification de signature |
| Euler Finance (2023) | 197 millions $ | Erreur de logique dans la fonction de don |
| Curve Finance (2023) | 73 millions $ | Bug de compilateur dans le langage Vyper |
Langages de programmation des smart contracts
Différentes blockchains utilisent différents langages pour le développement de smart contracts :
- Solidity -- Le langage dominant, utilisé sur Ethereum et toutes les chaînes compatibles EVM (Arbitrum, Optimism, Base, BNB Chain, Polygon, Avalanche). Syntaxe proche de JavaScript. La plus grande communauté de développeurs et les outils les plus matures.
- Rust -- Utilisé sur Solana (via le framework Anchor). Un langage de programmation système connu pour sa sécurité mémoire et ses performances.
- Move -- Utilisé sur Aptos et Sui. Conçu spécifiquement pour la blockchain avec une sécurité des ressources intégrée : les jetons ne peuvent pas être accidentellement dupliqués ou détruits.
- Cairo -- Utilisé sur StarkNet. Conçu pour écrire des programmes prouvables qui peuvent être vérifiés à l'aide de preuves à divulgation nulle de connaissance (zero-knowledge proofs).
- Vyper -- Une alternative à Solidity sur Ethereum, conçue pour être plus simple et plus facile à auditer. Utilisé par Curve Finance et d'autres protocoles.
Smart contracts et votre portefeuille
Chaque fois que vous déposez des fonds dans un protocole DeFi, que vous échangez des jetons sur un DEX ou que vous stakiez vos actifs, vous interagissez avec des smart contracts. Vos jetons sont détenus par ces contrats, et vos rendements dépendent de leur bon fonctionnement. Cela fait de la compréhension du risque lié aux smart contracts une nécessité pratique, et non un simple exercice académique.
CleanSky détecte vos positions à travers les protocoles DeFi (chacun étant un ensemble de smart contracts) et vous montre où se trouve votre argent, ce qu'il fait et quels protocoles le détiennent. Combiné à une compréhension de comment fonctionne la DeFi et des fondamentaux de la blockchain, cela vous donne la visibilité nécessaire pour prendre des décisions éclairées.
Voyez quels smart contracts détiennent votre argent — et quels risques ils comportent — à travers tous vos portefeuilles.