Introduction aux contrats intelligents
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 sucrerie2
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;23contract VendingMachine {45 // Declare state variables of the contract6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // When 'VendingMachine' contract is deployed:10 // 1. set the deploying address as the owner of the contract11 // 2. set the deployed smart contract's cupcake balance to 10012 constructor() public {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Allow the owner to increase the smart contract's cupcake balance18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Allow anyone to purchase cupcakes24 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}31Afficher toutCopier
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
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
- Smart Contracts: The Blockchain Technology That Will Replace Lawyers - Blockgeeks
- Best Practices for Smart Contract Development - Yos Riady, 10 novembre 2019