We can use the following function to save gas on float multiplications
// out = x * y unchecked{/} z
function fmul(uint256 x, uint256 y, uint256 z) internal pure returns(uint256 out){
assembly{
if iszero(eq(div(mul(x,y),x),y)) {revert(0,0)}
out := div(mul(x,y),z)
}
}
contracts/access/RoleManager.sol:80: for (uint256 i = 0; i < roles.length; i++) {
contracts/Controller.sol:117: for (uint256 i = 0; i < numActions; i++) {
contracts/strategies/ConvexStrategyBase.sol:313: for (uint256 i = 0; i < _rewardTokens.length(); i++) {
contracts/strategies/ConvexStrategyBase.sol:380: for (uint256 i = 0; i < _rewardTokens.length(); i++) {
contracts/StakerVault.sol:260: for (uint256 i = 0; i < actions.length; i++) {
contracts/BkdLocker.sol:310: for (uint256 i = 0; i < length; i++) {
contracts/actions/topup/TopUpKeeperHelper.sol:43: for (uint256 i = 0; i < users.length; i++) {
contracts/actions/topup/TopUpKeeperHelper.sol:46: for (uint256 j = 0; j < positions.length; j++) {
contracts/actions/topup/TopUpKeeperHelper.sol:72: for (uint256 i = 0; i < keys.length; i++) {
contracts/actions/topup/TopUpKeeperHelper.sol:93: for (uint256 i = 0; i < length; i++) {
contracts/actions/topup/TopUpKeeperHelper.sol:165: for (uint256 i = 0; i < length; i++) {
contracts/actions/topup/TopUpAction.sol:188: for (uint256 i = 0; i < protocols.length; i++) {
contracts/actions/topup/TopUpAction.sol:456: for (uint256 i = 0; i < length; i++) {
contracts/actions/topup/TopUpAction.sol:479: for (uint256 i = 0; i < length; i++) {
contracts/actions/topup/TopUpAction.sol:506: for (uint256 i = 0; i < howMany; i++) {
contracts/actions/topup/TopUpAction.sol:891: for (uint256 i = 0; i < length; i++) {
contracts/actions/topup/handlers/CTokenRegistry.sol:61: for (uint256 i = 0; i < ctokens.length; i++) {
contracts/actions/topup/handlers/CompoundHandler.sol:135: for (uint256 i = 0; i < assets.length; i++) {
> 0
is less efficient than!= 0
for uint in require conditionRef: https://twitter.com/GalloDaSballo/status/1485430908165443590
Float multiplication optimization
We can use the following function to save gas on float multiplications
https://github.com/code-423n4/2022-04-backd/blob/c856714a50437cb33240a5964b63687c9876275b/backd/libraries/ScaledMath.sol#L19
For loop optimization