Solidité - Modificateurs de fonction

Les modificateurs de fonction sont utilisés pour modifier le comportement d'une fonction. Par exemple, pour ajouter un prérequis à une fonction.

Nous créons d'abord un modificateur avec ou sans paramètre.

contract Owner {
   modifier onlyOwner {
      require(msg.sender == owner);
      _;
   }
   modifier costs(uint price) {
      if (msg.value >= price) {
         _;
      }
   }
}

Le corps de la fonction est inséré là où le symbole spécial "_;" apparaît dans la définition d'un modificateur. Donc, si la condition du modificateur est satisfaite lors de l'appel de cette fonction, la fonction est exécutée et sinon, une exception est levée.

Voir l'exemple ci-dessous -

pragma solidity ^0.5.0;

contract Owner {
   address owner;
   constructor() public {
      owner = msg.sender;
   }
   modifier onlyOwner {
      require(msg.sender == owner);
      _;
   }
   modifier costs(uint price) {
      if (msg.value >= price) {
         _;
      }
   }
}
contract Register is Owner {
   mapping (address => bool) registeredAddresses;
   uint price;
   constructor(uint initialPrice) public { price = initialPrice; }
   
   function register() public payable costs(price) {
      registeredAddresses[msg.sender] = true;
   }
   function changePrice(uint _price) public onlyOwner {
      price = _price;
   }
}