Getting your Trinity Audio player ready...
|
La fonction require
est l’une des plus utilisée dans les smart contracts avec le langage Solidity et permet de vérifier si une condition est vraie. L’utilisation de cette fonction relativement simple permet d’interrompre le code ainsi que la possibilité de renvoyer une erreur.
Require : C’est quoi et à quoi elle sert dans Solidity ?
Comme nous l’avons succinctement introduit en préambule, require
est une fonction de contrôle de flux utilisée dans le langage Solidity. Sa particularité est qu’elle « exige » quelque chose avant de poursuivre la suite de ses opérations. Par exemple, les sites Web requiert de posséder un compte ou de créer un nouveau compte avant de pouvoir utiliser les services de la plateforme.
Finalement, c’est un peu la même chose avec la fonction require
dans Solidity. Celle-ci possède la particularité de vérifier si une condition est vraie, ce qui permet au code suivant de s’exécuter. Si jamais la condition est fausse, require
renverra une erreur, le reste du code ne sera alors pas exécuté et la transaction sera simplement annulée.
Dans le cas des contrats, elle est utilisée pour vérifier une série de condition comme :
- Les fonds de l’utilisateur sont-ils suffisants ?
- L’adresse de l’utilisateur a-t- elle déjà été utilisée ?
- Est-ce que l’adresse à été utilisée pour mint un NFT ?
Elle s’implémente au sein d’autres fonctions du contrat intelligent de la façon suivante :
// Vérification si l'émetteur d'une transaction est le propriétaire du contrat require(msg.sender == _owner, "Error message"); // Autre vérification sans message d'erreur require(msg.sender == "0x123456...");
Comme vous pouvez le constater, le premier paramètre est celui de la condition. Le second paramètre, qui lui est optionnel, permet de retourner un message d’erreur à l’EVM qui pourra être envoyé à l’utilisateur en cas d’erreur par exemple.
Enfin, la fonction require
permet ainsi de garantir la validité des conditions qui ne peuvent pas être détectées avant l’exécution. Elle vérifie les entrées, les variables d’état du contrat et les valeurs de retour des appels aux contrats externes.
Optimiser et rendre son code Solidity plus performant
Mais en plus d’être très pratiques, ces fonctions permettent aussi d’optimiser son code et de le rendre plus performant. En effet, elles permettent de réduire la quantité de code utilisé avec l’utilisation des opérateurs logiques comme if
et else
.
Voici un exemple (de ce qu’il ne faut pas faire) avec de multiples conditions imbriquées les unes dans les autres.
// Fonction permettant de mint un NFT function mintNFT() public payable { // Vérification si l'adresse est sur la whitelist if (whitelist[msg.sender]) { // Vérification si le solde est suffisant if (balances[msg.sender] >= 1 ether) { // Mint NFT } else { revert("Address balance is too low."); } } else { revert("Address is not whitelisted"); } }
On pourrait alors transformer le code précédent simplement en 2 lignes de cette façon :
// Fonction permettant de mint un NFT function mintNFT() public payable { require(whitelist[msg.sender], "Address is not whitelisted"); // Vérification si l'adresse est sur la whitelist require(balances[msg.sender] >= 1 ether, "Address balance is too low"); // Vérification si le solde est suffisant // Mint NFT... }
Comme vous pouvez le constater, ce code est beaucoup plus lisible, plus clair et économique. Des éléments à ne pas négliger quand vous développez vos propres smart contracts en Solidity.
De plus, certains IDE comme Remix vont vous permettre de vous faciliter la tâche car il dispose de fonctions de vérification de la consommation. En cas de surconsommation détectée, Remix vous alertera et vous pourrez alors prendre les dispositions nécessaires pour optimiser votre code.
Conclusion
En résumé, la fonction require
est un outil essentiel pour la gestion des erreurs et la sécurité dans la programmation de contrats intelligents en Solidity. De plus, elles veillent à ce que seuls les événements autorisés et valides puissent être exécutés.
Utiliser require
lors de certaines vérifications par le biais du mapping en fait des atouts particulièrement puissants et économes. Maintenant, c’est à vous de jouer et de faire vos propres expérimentations avec cette fonction de contrôle de flux.
Depuis 2017, je ne cesse d'explorer l'univers du Bitcoin, de la blockchain des crypto monnaies, des NFT et plus récemment, celui du Web3. Après avoir fondé Au Coin du Bloc en 2021, je met à disposition mes connaissances et tente de vulgariser les aspects obscurs pour rendre abordable et compréhensible cet univers naissant dans lequel je crois fermement.