Bibliothèques de contrats intelligents
Vous n'avez pas besoin de rédiger tous les contrats intelligents de votre projet à partir de zéro. Il existe de nombreuses bibliothèques de contrats intelligents open source fournissant des blocs de construction réutilisables, qui peuvent vous éviter d'avoir à réinventer la roue.
Prérequis
Avant de vous intéresser aux bibliothèques de contrats intelligents, nous vous conseillons d'avoir bien compris en quoi consiste la structure d'un contrat intelligent. Lisez la page Anatomie des contrats intelligents si vous ne l'avez pas déjà fait.
En quoi consiste une bibliothèque ?
Vous pouvez généralement trouver deux types de blocs de construction dans les bibliothèques de contrats intelligents : des comportements réutilisables que vous pouvez ajouter à vos contrats, et des implémentations de diverses normes.
Comportements
Lorsque vous rédigez des contrats intelligents, il y a de grandes chances que vous vous retrouviez à réécrire indéfiniment des modèles similaires, comme assigner une adresse admin pour effectuer des opérations protégées, ou ajouter un bouton d'urgence pause pour répondre aux problèmes inattendus.
Les bibliothèques de contrats intelligents fournissent généralement des implémentations réutilisables de ces comportements sous forme de bibliothèques ou via l'héritage dans Solidity.
À titre d'exemple, vous trouverez ci-dessous une version simplifiée du contrat Ownable
de la bibliothèque de contrats OpenZeppelin, qui conçoit une adresse en tant que propriétaire d'un contrat, et fournit un modificateur pour restreindre l'accès à une méthode uniquement à ce propriétaire.
1contract Ownable {2 address public owner;34 constructor() internal {5 owner = msg.sender;6 }78 modifier onlyOwner() {9 require(owner == msg.sender, "Ownable: caller is not the owner");10 _;11 }12}13Afficher toutCopier
Pour utiliser un bloc de construction comme celui-ci dans votre contrat, vous devrez d'abord l'importer, puis l'étendre dans vos propres contrats. Cela vous permettra d'utiliser le modificateur fourni par le contrat Ownable
de base pour sécuriser vos propres fonctions.
1import ".../Ownable.sol"; // Path to the imported library23contract MyContract is Ownable {4 // The following function can only be called by the owner5 function secured() onlyOwner public {6 msg.sender.transfer(1 ether);7 }8}9Copier
Autres exemples populaires : SafeMath ou DsMath. Ce sont des bibliothèques (par opposition aux contrats de base) qui fournissent des fonctions arithmétiques avec des vérifications de dépassement qui ne sont pas fournies par le langage. Une bonne pratique consiste à utiliser l'une de ces bibliothèques au lieu d'opérations arithmétiques natives pour protéger votre contrat contre les dépassements, qui peuvent avoir des conséquences désastreuses !
Normes
Pour faciliter la composabilité et l'interopérabilité, la communauté Ethereum a défini plusieurs normes sous la forme de demandes de commentaires (ERC). Pour plus d'informations, lisez la page Normes de développement Ethereum.
Quand vous incluez une ERC dans vos contrats, il est préférable de chercher des implémentations standards plutôt que d'essayer de déployer la vôtre. De nombreuses bibliothèques de contrats intelligents incluent des implémentations pour les ERC les plus populaires. Par exemple, la norme de jeton fongible ERC20 est disponible dans HQ20, DappSys et OpenZeppelin. De plus, certaines ERC intègrent elles-mêmes également des implémentations canoniques.
Il convient de mentionner que certaines ERC ne sont pas autonomes, mais sont des ajouts à d'autres ERC. Par exemple, ERC2612 ajoute une extension à ERC20 pour améliorer son opérabilité.
Comment ajouter une bibliothèque ?
Pour obtenir des instructions spécifiques, consultez toujours la documentation de la bibliothèque que vous voulez inclure à votre projet. Plusieurs bibliothèques de contrats Solidity sont compilées en utilisant npm
, il vous suffit donc d'utiliser nmp install
. La plupart des outils utilisés pour la compilation de contrats examineront vos node_modules
pour les bibliothèques de contrats intelligents, vous pouvez donc faire ce qui suit :
1// This will load the @openzeppelin/contracts library from your node_modules2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";34contract MyNFT is ERC721 {5 constructor() ERC721("MyNFT", "MNFT") public { }6}7Copier
Quelle que soit la méthode que vous utilisez, lorsque vous incluez une bibliothèque, gardez toujours un œil sur la version du langage. Par exemple, vous ne pouvez pas utiliser une bibliothèque pour Solidity 0.6 si vous rédigez vos contrats en Solidity 0.5.
Quand les utiliser ?
L'utilisation d'une bibliothèque de contrats intelligents pour votre projet présente plusieurs avantages. D'abord, elle vous fait gagner du temps en vous fournissant des blocs de construction prêts à l'emploi que vous pouvez inclure dans votre système, plutôt que d'avoir à les coder vous-même.
La sécurité est également un atout majeur. Les bibliothèques de contrats intelligents open source sont aussi souvent soumises à un examen approfondi. De nombreux projets dépendant d'elles, la communauté est fortement incitée à les réviser en permanence. Il est beaucoup plus courant de trouver des erreurs dans du code d'application que dans les bibliothèques de contrats réutilisables. Certaines bibliothèques sont également soumises à des audits externes pour plus de sécurité.
Cependant, l'utilisation de bibliothèques de contrats intelligents comporte le risque d'inclure du code que vous ne connaissez pas dans votre projet. Il est tentant d'importer un contrat et de l'inclure directement, mais sans une bonne compréhension de ce que fait ce contrat, vous risquez d'introduire par mégarde un problème dans votre système en raison d'un comportement inattendu. Assurez-vous toujours de lire la documentation du code que vous importez, puis vérifiez le code lui-même avant de l'intégrer à votre projet !
Enfin, au moment où vous décidez s'inclure une bibliothèque, considérez son utilisation globale. Un projet adopté à grande échelle a l'avantage de disposer d'une communauté plus vaste, donc de plus d'utilisateurs qui cherchent les problèmes potentiels. La sécurité doit être votre priorité principale lorsque vous construisez avec des contrats intelligents!
Outils connexes
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
HQ20 - Projet Solidity avec des contrats, des bibliothèques et des exemples pour vous aider à construire des applications distribuées complètes pour le monde réel
Tutoriels connexes
- Considérations de sécurité pour les développeurs Ethereum - Tutoriel sur les considérations de sécurité lors de la construction de contrats intelligents, y compris l'utilisation de la bibliothèque
- Comprendre le contrat intelligent de jeton ERC-20 - Tutoriel sur la norme ERC20, fournie par de multiples bibliothèques
Complément d'information
Une ressource communautaire vous a aidé ? Modifiez cette page et ajoutez-la !