Solidity : La fonction require

1

Nous allons repartir de la dernière version du contrat de messagerie (ici) pour découvrir la fonction Require sur Solidity.

require est une fonction de contrôle qui permet de vérifier une condition. L’avantage est que cette fonction permet de retourner le gaz si les conditions ne sont pas remplies, contrairement à la fonction assert ou le gaz utilisé sera perdu.

Pour rappel, dans la dernière version du contrat de messagerie que nous utilisons jusqu’à maintenant la fonction definirMessage test avec un if classique que celui qui change le message est bien le propriétaire du contrat :

function definirMessage(string memory _nouveaumessage) public{
if (msg.sender == proprietaire)
{
lemessage = _nouveaumessage;
emit MessageModifie(_nouveaumessage);
}
else {
Log("L'adresse ne correspond pas au propriétaire du contrat");
}
}

Nous voulons la simplifier pour utiliser require et tester que le msg.sender (l’adresse sur la blockchain Ethereum) est bien le même que le propriétaire du contrat. Nous ajoutons donc en début de contrat le test suivant : require(msg.sender == proprietaire);

La fonction devient désormais :

function definirMessage(string memory _nouveaumessage) public{
require(msg.sender == proprietaire);
lemessage = _nouveaumessage;
emit MessageModifie(_nouveaumessage);
}

Le code est plus clair, lisible et surtout plus économique, un paramètre à garder en tête lors de tout développement d’un Smart Contract. Utiliser l’IDE Remix sera un atout ici puisqu’il possède des fonctions de vérifications de la consommation et peut alerter lorsqu’un code devient potentiellement trop consommateur.

Il est recommandé d’utiliser require en début de fonction, notamment pour tous les tests sur les variables entrées par les utilisateurs.

1 COMMENTAIRE

  1. Hello ! Super article ! Je rajoute aussi que l’on peut, maintenant, passer en second argument du require notre condition else !

    Exemple :

    if (msg.sender == proprietaire)
    {
    lemessage = _nouveaumessage;
    emit MessageModifie(_nouveaumessage);
    }
    else {
    Log(« L’adresse ne correspond pas au propriétaire du contrat »);
    }

    Devient alors :

    require(msg.sender == proprietaire, « L’adresse ne correspond pas au propriétaire du contrat »);
    lemessage = _nouveaumessage;
    emit MessageModifie(_nouveaumessage);

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.