code-423n4 / 2021-11-nested-findings

1 stars 1 forks source link

Cache array length in for loops can save gas #186

Closed code423n4 closed 2 years ago

code423n4 commented 2 years ago

Handle

defsec

Vulnerability details

Impact

Reading array length at each iteration of the loop takes 6 gas (3 for mload and 3 to place memory_offset) in the stack.

Caching the array length in the stack saves around 3 gas per iteration.

Proof of Concept

Instances include:

https://github.com/code-423n4/2021-11-nested/blob/5d113967cdf7c9ee29802e1ecb176c656386fe9b/contracts/OperatorResolver.sol#L33

Tools Used

Code Review

Recommended Mitigation Steps

Here you could cache uint len = _moduleAddresses.length; and then change the stop criteria to use len instead _moduleAddresses.length to save gas (_moduleAddresses is on memory)

adrien-supizet commented 2 years ago

duplicate #7