Modifiers in solidity
Modifiers can be used to change the behavior of functions in a declarative way. For example, you can use a modifier to automatically check a condition prior to executing the function. they can be used for:
- Restrict access
- Validate inputs
Guard against reentrancy hack
use the
modifier
in the declaration of a function.Modifier to check that the caller is the owner of the contract
modifier onlyOwner { require(msg.sender == owner); // Underscore is a special character only used inside // a function modifier and it tells Solidity to // execute the rest of the code. _; }
Modifiers can take inputs. This modifier checks that the address passed in is not the zero address.
modifier validAddress(address _addr) { require(_addr != address(0), "Not valid address"); _; }
function changeOwner(address _newOwner) public onlyOwner validAddress(_newOwner) { owner = _newOwner; }
Modifiers can be called before and / or after a function.This modifier prevents a function from being called while,it is still executing.
modifier noReentrancy() { require(!locked, "No reentrancy"); locked = true; _; locked = false; } function decrement(uint i) public noReentrancy { x -= i; if (i > 1) { decrement(i - 1); } }