Passer au contenu principal
Change page

Bibliothèques de contrats intelligents

Dernière modification: @DylanCONIN(opens in a new tab), 30 octobre 2023

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(opens in a new tab) ou via l'héritage(opens in a new tab) dans Solidity.

À titre d'exemple, vous trouverez ci-dessous une version simplifiée du contrat Ownable(opens in a new tab) de la bibliothèque de contrats OpenZeppelin(opens in a new tab), 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;
3
4 constructor() internal {
5 owner = msg.sender;
6 }
7
8 modifier onlyOwner() {
9 require(owner == msg.sender, "Ownable: caller is not the owner");
10 _;
11 }
12}
Afficher tout
Copier

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 library
2
3contract MyContract is Ownable {
4 // The following function can only be called by the owner
5 function secured() onlyOwner public {
6 msg.sender.transfer(1 ether);
7 }
8}
Copier

Autres exemples populaires : SafeMath(opens in a new tab) ou DsMath(opens in a new tab). 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(opens in a new tab), DappSys(opens in a new tab) et OpenZeppelin(opens in a new tab). 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(opens in a new tab) 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_modules
2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3
4contract MyNFT is ERC721 {
5 constructor() ERC721("MyNFT", "MNFT") public { }
6}
Copier

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(opens in a new tab) 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!

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

SDK Solidity thirdweb - Fournit les outils nécessaires pour construire efficacement des contrats intelligents personnalisés

Complément d'information

Une ressource communautaire vous a aidé ? Modifiez cette page et ajoutez-la !

Cet article vous a été utile ?