Passer au contenu principal
Change page

Introduction aux contrats intelligents

Qu'est-ce qu'un contrat intelligent ?

Un « contrat intelligent » est simplement un programme qui s'exécute sur la chaîne de blocs Ethereum. C'est un ensemble de code (ses fonctions) et de données (son état) qui réside à une adresse spécifique sur la chaîne de blocs Ethereum.

Les contrats intelligents sont un type de compte Ethereum. Cela signifie qu'ils ont un solde et peuvent être la cible de transactions. Cependant, ils ne sont pas contrôlés par un utilisateur, ils sont plutôt déployés sur le réseau et s'exécutent tels qu'ils ont été programmés. Les comptes d'utilisateurs peuvent ensuite interagir avec un contrat intelligent en soumettant des transactions qui exécutent une fonction définie sur le contrat intelligent. Les contrats intelligents peuvent définir des règles, comme un contrat classique, 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 débutez ou si vous recherchez une introduction moins technique, nous vous recommandons notre introduction aux contrats intelligents.

Assurez-vous d'avoir lu les informations sur les comptes, les transactions et la machine virtuelle Ethereum avant de vous plonger 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, telle que décrite par Nick Szabo (opens in a new tab). Avec les bonnes entrées, une certaine sortie est garantie.

Pour obtenir une collation d'un distributeur automatique :

argent + sélection de la collation = collation distribuée

Cette logique est programmée dans le distributeur automatique.

Un contrat intelligent, tout comme un distributeur automatique, intègre une logique programmée. Voici un exemple simple de ce à quoi ressemblerait ce distributeur automatique s'il s'agissait d'un contrat intelligent écrit en Solidity :

Tout comme un distributeur automatique élimine le besoin d'un employé de vente, les contrats intelligents peuvent remplacer les intermédiaires dans de nombreux secteurs.

Sans permission

N'importe qui peut écrire un contrat intelligent et le déployer sur le réseau. Il vous suffit d'apprendre à coder dans un langage de contrat intelligent et d'avoir suffisamment d'ETH pour déployer votre contrat. Le déploiement d'un contrat intelligent est techniquement une transaction, vous devez donc payer du gaz de la même manière que vous devez payer du gaz pour un simple transfert d'ETH. Cependant, les coûts en gaz pour le déploiement d'un contrat sont beaucoup plus élevés.

Ethereum dispose de langages adaptés aux développeurs pour écrire des contrats intelligents :

  • Solidity
  • Vyper

En savoir plus sur les langages

Cependant, ils doivent être compilés avant de pouvoir être déployés afin que la machine virtuelle d'Ethereum puisse interpréter et stocker le contrat. En savoir plus sur la compilation

Composabilité

Les contrats intelligents sont publics sur Ethereum et peuvent être considérés comme des API ouvertes. Cela signifie que vous pouvez appeler d'autres contrats intelligents dans votre propre contrat intelligent pour étendre considérablement ce qui est possible. Les contrats peuvent même déployer d'autres contrats.

En savoir plus sur la composabilité des contrats intelligents.

Limites

Les contrats intelligents seuls ne peuvent pas obtenir d'informations sur les événements du « monde réel » car ils ne peuvent pas récupérer de données provenant de sources hors chaîne. Cela signifie qu'ils ne peuvent pas réagir aux événements du monde réel. C'est intentionnel. S'appuyer sur des informations externes pourrait compromettre le consensus, ce qui est important pour la sécurité et la décentralisation.

Cependant, il est important pour les applications de la chaîne de blocs de pouvoir utiliser des données hors chaîne. La solution réside dans les oracles, qui sont des outils qui ingèrent des données hors chaîne et les rendent disponibles pour les contrats intelligents.

Une autre limite des contrats intelligents est la taille maximale du contrat. Un contrat intelligent peut faire au maximum 24 Ko, sinon il manquera de gaz. Cela peut être contourné en utilisant le modèle Diamant (Diamond Pattern) (opens in a new tab).

Contrats multisig

Les contrats multisig (à signatures multiples) sont des comptes de contrats intelligents qui nécessitent plusieurs signatures valides pour exécuter une transaction. C'est très utile pour éviter les points de défaillance uniques pour les contrats détenant des quantités substantielles d'ether ou d'autres jetons. Les multisigs divisent également la responsabilité de l'exécution du contrat et de la gestion des clés entre plusieurs parties et empêchent la perte d'une seule clé privée d'entraîner une perte irréversible de fonds. Pour ces raisons, les contrats multisig peuvent être utilisés pour la gouvernance simple d'une DAO. Les multisigs nécessitent N signatures sur M signatures acceptables possibles (où N ≤ M, et M > 1) pour s'exécuter. N = 3, M = 5 et N = 4, M = 7 sont couramment utilisés. Un multisig 4/7 nécessite quatre signatures valides sur sept possibles. Cela signifie que les fonds sont toujours 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 être d'accord et signer pour que le contrat s'exécute.

Ressources sur les contrats intelligents

Contrats OpenZeppelin - Bibliothèque pour le développement sécurisé de contrats intelligents.

Lectures complémentaires

Tutoriels : Signatures de contrats intelligents (EIP-1271) sur Ethereum