Let we imagine the situation that we have to implement a smart contract that needs to have some kind of an external optimization after every call of business logic, like optimizing an IOU graph. What we can do is to set a bool variable and two modifiers indicated if our data structure is optimized or not. If the data structure is optimized we can call any kind of a business logic. If it is not optimized we should be able to call only the OptimizationLogic function. Certainly, access control rights and roles of such a system are pretty much questionable and need some more fine tuning.
bool optimized;
constructor() {
optimized = true;
}
modifier Optimized {
require(optimized);
_;
}
modifier NotOptimized {
require(optimized == false);
_;
}
function BusinessLogic() Optimized {
// doing business business logic
optimized = false;
}
function OptimizationLogic() NotOptimized {
// doing optimization logic
optimized = true;
}
}