Ethereum
$121.08 -2.31%
ETH · 70w

How to write clean, elegant Solidity code using function modifiers — Colony

How to write clean, elegant Solidity code using function modifiers

One of the most interesting features in Solidity are function modifiers. When added to a function body they extend it, allowing us to abstract parts of our code and write functions with fewer conditionals checks intertwined with state changes.

Creating a function modifier

The syntax looks similar to declaring a function, except it uses the modifier keyword. The underscore on indicates how the original function is changed:

modifier assertValueIsOne(uint value) { assert(value == 1); _; // original function goes at this point} function doSomething(uint value) assertValueIsOne(value){ } Use cases

Checking for invariants or conditions using require, revert (throw is deprecated, see more here) or assert accordingly:

// For parameterless modifiers, we can omit parenthesismodifier isAllowed { assert(msg.sender == owner); // contract state _;} modifier isValidAddress(address target) { require(target != 0x0); _;} modifier isValueBiggerThanZero(uint value) { require(value > 0); _;} function isOwner(address target) constant returns (bool) { return target == owner;} function simpleFunction(address target) isValidAddress(target) isValueBiggerThanZero(msg.value) isAllowed // omitted parenthesis for parameterless modifiers payable{ // do something} Please note that modifiers are applied to the original function in the order they are presented on the function declaration, i.e: isValidAddress, isValueBiggerThanZero, isAllowed and then payable.

Checking for msg.sender permissions:

modifier isOwner { assert(owner == msg.sender); _;} function finalize() isOwner { finalized = true;}

Raising events before or after a function is called:

event StartEvent();event FinishEvent(); modifier logEvents { StartEvent(); _; FinishEvent();} function toggle () logEvents { } Conclusion

Before formal verification or code coverag...

Continue on blog.colony.io
Recent news
ETH -2.31% · medium.com · Now

OAX at IFX EXPO

IFX EXPO Asia kicks off at the Hong Kong Convention Centre next week and we’re proud to announce that OAX will be a part of the event. Our General Manager, Amanda Liu, has been invited by the…
ETH -2.31% · blog.aragon.org · 5h

Everything You Need To Know About AraCon

The countdown is on! With just 3 days left before registration closes and less than two weeks until the event kicks off, AraCon is officially right around the corner
ETH -2.31% · medium.com · 12h

Earn real rewards with Lympo referral programs

Imagine getting paid for walking or running, that is, essentially, just for staying fit and healthy. Sounds crazy, right? Lympo is a free app for everyone wishing to live a healthier and wealthier…