code-423n4 / 2021-12-pooltogether-findings

0 stars 0 forks source link

Prefix increments are cheaper than postfix increments #18

Open code423n4 opened 2 years ago

code423n4 commented 2 years ago

Handle

robee

Vulnerability details

Prefix increments are cheaper than postfix increments. Further more, using unchecked {++x} is even more gas efficient, and the gas saving accumulates every iteration and can make a real change There is no risk of overflow caused by increamenting the iteration index in for loops (the ++i in for (uint256 i = 0; i < numIterations; ++i)). But increments perform overflow checks that are not necessary in this case. These functions use not using prefix increments (++x) or not using the unchecked keyword:

    change to prefix increment and unchecked: TwabRewards.sol, index, 172
    change to prefix increment and unchecked: TwabRewards.sol, index, 217
PierrickGT commented 2 years ago

I did some gas golfing to figure out if ++i is really less gas consuming than i++. We would only save 5 gas per iteration but also lose in code clarity, so this gas saving trade off isn't really worth it.

About the unchecked part, results are a bit more convincing but still negligible. We would save 77 gas per iteration but as stated in the following issue, it is not possible to write unchecked { ++i } inline so we would have to write a helper function which would make our code less legible and harder to maintain in the future.

ethereum/solidity#10695

I've acknowledged the issue but we won't actually make the changes cause we prefer to keep a simple code base that will be easier to maintain in the future.