Introduction aux contrats intelligents
Dernière modification: , Invalid DateTime
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. 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 pages Contrats, Transactions et Machine virtuelle Ethereum avant de vous lancer dans le monde des contrats intelligents.
Distributeur automatique numérique
La meilleure métaphore pour décrire un contrat intelligent est peut-être celle d'un distributeur automatique, tel que décrit par 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 dispensed2
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 la façon dont ce distributeur automatique pourrait ressembler à un contrat intelligent :
1pragma solidity 0.8.7;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() {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 bon 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 déployer votre contrat. Techniquement, le fait de 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. Les coûts en gaz requis pour déployer un contrat sont cependant beaucoup plus élevés.
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 les possibilité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 envoyer de requêtes HTTP. 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 existe des moyens de contourner le problème en utilisant oracles.
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. Ceci peut être contourné en utilisant Le modèle du diamant(opens in a new tab).
Ressources de contrats intelligents
Contrats OpenZeppelin - Bibliothèque la plus populaire pour développer des contrats intelligents de façon sécurisée
- openzeppelin.com/contracts/(opens in a new tab)
- GitHub(opens in a new tab)
- Forum communautaire(opens in a new tab)
DappSys - Blocs de construction sûrs, simples et flexibles pour les contrats intelligents
Complément d'information
- Les Contrats intelligents : La technologie Blockchain qui va remplacer les juristes(opens in a new tab) - Blockgeeks
- Meilleures pratiques pour le développement de contrats intelligents(opens in a new tab) - Yos Riady, 10 novembre 2019
- Contrats propres - un guide sur les modèles et bonnes pratiques pour les contrats intelligents(opens in a new tab) – 30 juillet 2020 - wslyvh