Aider à mettre à jour cette page

🌏

Il existe une nouvelle version de cette page, mais seulement en anglais pour le moment. Aidez-nous à traduire la dernière version.

Cette page est incomplète. Si vous êtes un expert sur le sujet, veuillez éditer cette page et l'enrichir de votre sagesse.

Introduction aux contrats intelligents

Dernière modification: , Invalid DateTime
Edit page

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.

Le contrat intelligent est un type de compte Ethereum. Cela signifie qu'il dispose d'un solde et peut envoyer des transactions sur le réseau. 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.

Prérequis

Assurez-vous d'avoir lu les pages Contrats, Transactions et Machine virtuelle Ethereum avant de vous intéresser aux contrats intelligents.

Distributeur automatique numérique

La meilleure métaphore pour décrire un contrat intelligent, comme le dit Nick Szabo, est peut être le distributeur automatique. Avec les bonnes entrées, une certaine sortie est garantie.

Pour obtenir une sucrerie d'un distributeur automatique :

1argent + choix d'une sucrerie = obtention de la sucrerie
2

Cette 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 ressemblerait ce distributeur automatique sous la forme d'un contrat intelligent :

1pragma solidity 0.6.11;
2
3contract VendingMachine {
4
5 // Declare state variables of the contract
6 address public owner;
7 mapping (address => uint) public cupcakeBalances;
8
9 // When 'VendingMachine' contract is deployed:
10 // 1. set the deploying address as the owner of the contract
11 // 2. set the deployed smart contract's cupcake balance to 100
12 constructor() public {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // Allow the owner to increase the smart contract's cupcake balance
18 function refill(uint amount) public {
19 require(msg.sender == owner, "Only the owner can refill.");
20 cupcakeBalances[address(this)] += amount;
21 }
22
23 // Allow anyone to purchase cupcakes
24 function purchase(uint amount) public payable {
25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
27 cupcakeBalances[address(this)] -= amount;
28 cupcakeBalances[msg.sender] += amount;
29 }
30}
31
Afficher tout
📋 Copier

Tout comme un distributeur automatique peut remplacer un employé dans une boutique, les contrats intelligents peuvent remplacer les intermédiaires dans nombre d'industries.

Sans autorisation

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 le déployer. Techniquement, déployer un contrat intelligent constitue une transaction. Vous devez donc payer pour le carburant, comme vous le feriez pour un simple transfert d'ETH. Le coût en carburant pour déployer un contrat est cependant beaucoup plus élevé.

Pour la rédaction des contrats intelligents, Ethereum propose aux développeurs des langages conviviaux :

  • Solidity
  • Vyper

Plus d'infos 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é. Plus d'infos 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'étendre considérablement ce qui est possible. Certains d'entre eux peuvent même déployer d'autres contrats.

En savoir plus sur la composabilité des contrats.

Limitations

Les contrats intelligents seuls ne peuvent pas obtenir d'informations sur les événements du "monde réel", car ils ne peuvent pas envoyer de demande HTTP. Ceci est intentionnel, car le fait de s'appuyer sur des informations externes pourrait compromettre le consensus, c'est donc important pour la sécurité et la décentralisation.

Il existe des moyens de contourner ce problème en utilisant les oracles.

Ressources de contrats intelligents

Contrats OpenZeppelin - Bibliothèque la plus populaire pour développer des contrats intelligents de façon sécurisée

DappSys - Blocs de construction sûrs, simples et flexibles pour les contrats intelligents

Complément d'information