DEV Community

Loading Blocks
Loading Blocks

Posted on

5 Advanced Solidity Modifier Tricks

1. Modifiers Can Change State

  • Usual role: run require checks before function execution.
  • Hidden power: modifiers can update state variables.
address public owner; uint public modifierCount; modifier onlyOwner { require(msg.sender == owner); modifierCount++; // state change inside modifier _; } 
Enter fullscreen mode Exit fullscreen mode

Result: modifierCount increases every time onlyOwner is triggered.

Takeaway: modifiers can serve as pre-processors (logging, state prep, counters).

2. Evolution: Dynamic Modifiers With Parameters

(a) Literal Parameters

Instead of writing many modifiers, pass values directly:

modifier cost(uint value) { require(msg.value >= value, "Insufficient fee"); _; } function setX() public payable cost(1 ether) { ... } function setY() public payable cost(2 ether) { ... } 
Enter fullscreen mode Exit fullscreen mode

Flexible: one generic modifier → multiple use cases.

(b) Function Parameters

Modifiers can also take function arguments:

modifier greaterThan(uint val, uint min) { require(val > min, "Input value is too low"); _; } function setX(uint num) public greaterThan(num, 10) { // executes only if num > 10 } 
Enter fullscreen mode Exit fullscreen mode

3. Execution Order of Multiple Modifiers

Multiple modifiers run in the listed order.

function setX(uint num) public payable cost(1 ether) greaterThan(num, 10) { // ... } 
Enter fullscreen mode Exit fullscreen mode

Flow:

  1. cost runs first.
  2. Then greaterThan.
  3. Only then the function body.

Mechanism: each _ means “execute the next step in the chain”.

Function body is just the last step in the chain.

4. Multiple _ → Multiple Executions

You can place multiple _ in one modifier.

uint public count; modifier tripleExecute(uint val) { require(val > 10, "Too low"); _; _; _; } function setX(uint num) public tripleExecute(num) { count++; } 
Enter fullscreen mode Exit fullscreen mode

setX increments count three times per call.

Rarely practical, but illustrates that _ = “insert function body here.

Conclusion

Modifiers can:

Update state directly.

Accept dynamic parameters (literals + function inputs).

Chain together in controlled execution order.

Execute functions multiple times with multiple _.

Top comments (0)