Custom errors could save gas
Solidity allows using custom errors. Using custom errors instead of revert or require saves gas since the error message used by the revert function is stored on chain. Here is an example usage:
+ error ReblancingError();
+ error ZeroSupplyError();
function rebalance(Token[] memory inBasket, Token[] memory outBasket) external onlyRole(REBALANCER_ROLE) {
- require(rebalancing, "lock rebalance first");
+ if (!rebalancing) { revert ReblancingError();}
- require(totalSupply() > 0, "zero supply");
+ if (totalSupply() == 0) { revert ZeroSupplyError();}
Token[] memory newBasket = Utils.addTokenset(Utils.subTokenset(basket_, outBasket), inBasket);
Token[] memory newTokenset = Utils.muldivTokenset(newBasket, 10**decimals(), totalSupply());
setBasket(newBasket);
setTokenset(newTokenset);
}