Introduction aux contrats intelligents
Dernière mise à jour de la page : 25 février 2026
Qu'est-ce qu'un contrat intelligent ? Qu'est-ce qu'un contrat intelligent ?
Un "contrat intelligent" est simplement un programme exécuté sur la blockchain d'Ethereum. C'est un ensemble de code (ses fonctions) et de données (son état) qui réside à une adresse spécifique sur la blockchain Ethereum.
Les contrats intelligents sont un type de compte Ethereum. Ceci veut dire qu'ils ont un solde et peuvent être la cible de transactions. Cependant, il n'est pas contrôlé par un utilisateur, mais est plutôt déployé et exécuté comme un programme. Les comptes des utilisateurs peuvent ensuite interagir avec un contrat intelligent en soumettant des transactions qui exécutent une fonction définie sur le contrat intelligent. Un contrat intelligent peut définir des règles, comme un contrat normal, et les appliquer automatiquement via le code. Les contrats intelligents ne peuvent pas être supprimés par défaut et les interactions avec eux sont irréversibles.
Prérequis
Si vous venez tout juste de débuter ou si vous cherchez une introduction moins technique, nous vous recommandons notre introduction aux contrats intelligents.
Assurez-vous d'avoir lu les articles sur les comptes, les transactions et la machine virtuelle Ethereum avant de vous lancer dans le monde des contrats intelligents.
Un distributeur automatique numérique
La meilleure métaphore pour un contrat intelligent est peut-être celle d'un distributeur automatique, comme le décrit Nick Szabo (opens in a new tab). Avec les bonnes entrées, une certaine sortie est garantie.
Pour obtenir une sucrerie d'un distributeur automatique :
1money + snack selection = snack dispensedCette logique est programmée dans les distributeurs automatiques.
Le contrat intelligent, comme un distributeur automatique, possède une logique programmée. Voici un exemple simple de ce à quoi ce distributeur automatique pourrait ressembler s'il était un contrat intelligent rédigé avec Solidity :
1pragma solidity 0.8.7;23contract VendingMachine {45 // Déclarer les variables d'état du contrat6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // Lorsque le contrat 'VendingMachine' est déployé :10 // 1. définir l'adresse de déploiement comme propriétaire du contrat11 // 2. définir le solde de cupcakes du contrat intelligent déployé à 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Permettre au propriétaire d'augmenter le solde de cupcakes du contrat intelligent18 function refill(uint amount) public {19 require(msg.sender == owner, "Seul le propriétaire peut réapprovisionner.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Permettre à n'importe qui d'acheter des cupcakes24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "Vous devez payer au moins 1 ETH par cupcake");26 require(cupcakeBalances[address(this)] >= amount, "Pas assez de cupcakes en stock pour finaliser cet achat");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}Afficher toutTout comme un distributeur automatique peut remplacer un employé dans une boutique, les contrats intelligents peuvent remplacer les intermédiaires dans bon nombre d'industries.
Sans permission
N'importe qui peut rédiger un contrat intelligent et le déployer sur le réseau. Il vous suffit d'apprendre à coder dans un langage de contrat intelligent, et de disposer de suffisamment d'ETH pour déployer votre contrat. Techniquement, le déploiement d'un contrat intelligent est une transaction, vous devez donc payer du gaz de la même manière que pour un simple transfert d'ETH. Toutefois, les frais de gaz pour le déploiement d'un contrat sont beaucoup plus élevés.
Pour la rédaction des contrats intelligents, Ethereum propose aux développeurs des langages conviviaux :
- solidity
- Vyper
En savoir plus sur les langages
Toutefois, pour que la machine virtuelle Ethereum puisse interpréter et stocker un contrat, il doit être compilé avant d'être déployé. En savoir plus sur la compilation
Composabilité
Sur Ethereum, les contrats intelligents sont publics. Ils peuvent être considérés comme des API ouvertes. Cela signifie que vous pouvez appeler d'autres contrats intelligents dans votre propre contrat afin d'en étendre considérablement les fonctionnalités. Certains d'entre eux peuvent même déployer d'autres contrats.
En savoir plus sur la composabilité des contrats intelligents.
Limitations
Les contrats intelligents seuls ne peuvent pas obtenir d'informations sur les événements du "monde réel", dans la mesure où ils ne peuvent pas récupérer de données depuis des sources hors chaîne. Cela signifie qu'ils ne peuvent pas réagir aux événements du monde réel. C'est un choix délibéré. Le fait de s'appuyer sur des informations externes pourrait compromettre le consensus, qui est essentiel en matière de sécurité et de décentralisation.
Il est toutefois important que les applications de la blockchain puissent utiliser des données hors chaîne. La solution réside dans les oracles, des outils qui ingèrent des données hors chaîne et les mettent à la disposition des contrats intelligents.
Une autre limitation des contrats intelligents est la taille maximale des contrats. Un contrat intelligent ne peut pas dépasser 24 Ko, sans quoi il sera à court de gaz. Il est possible de contourner ce problème en utilisant le Diamond Pattern (opens in a new tab).
Contrats Multisig
Les contrats multisig (signature multiple) sont des comptes de contrats intelligents nécessitant plusieurs signatures valides pour exécuter une transaction. C'est très utile afin d'éviter les points de défaillance unique pour les contrats contenant des montants conséquents d'ether ou autres tokens. Les signatures multiples partagent la responsabilité d'exécution du contact ainsi que la gestion des clés entre plusieurs parties et évite la perte d'une unique clé privée amenant à la perte irréversible des fonds. Pour ces raisons, les contrats multisig peuvent être utilisés pour la simple gouvernance d'une DAO. Les contrats multisig requièrent N signatures parmi M signatures possibles et acceptables (où N ≤ M et M > 1) pour s'exécuter. N = 3, M = 5 et N = 4, M = 7 sont couramment utilisés. Une multi-signature 4/7 requiert quatre signatures valides sur les sept possibles. Cela signifie que les fonds restent récupérables même si trois signatures sont perdues. Dans ce cas, cela signifie également que la majorité des détenteurs de clés doivent accepter et signer pour que le contrat puisse être exécuté.
Ressources sur les contrats intelligents
Contrats OpenZeppelin - Bibliothèque pour le développement sécurisé de contrats intelligents.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- Forum de la communauté (opens in a new tab)