20,000 USDC
View results
Submission Details
Severity: gas
Valid

 ++i/i++ Should be unchecked {++i}/ unchecked {i++} when it si not possibel for them to everflow ,as is th case when used in FOR - AND while loops

Summary

In scenarios where it is known that the variables ++i or i++ will not cause overflow, such as when used in for or while loops with a known iteration count, it is possible to mark them as unchecked to potentially save gas. Let's explore why this optimization can be beneficial for gas consumption.
In Solidity, the ++i and i++ expressions are typically used to increment a variable by one. By default, Solidity performs overflow checks to ensure the result remains within the defined range of the variable type. These checks incur gas costs.
However, if you are certain that the variable will not overflow due to the nature of the loop construct and the known iteration count, you can mark the expressions as unchecked. This informs the compiler that overflow checks are unnecessary, potentially resulting in gas savings.

Here's an example to illustrate the usage of unchecked expressions within a for loop:
contract MyContract {
function iterate(uint256 iterations) external {
for (uint256 i = 0; i < iterations; i++) {
unchecked {
// Perform operations using unchecked expressions
// Increment i by one
++i;
}
}
}
}
In the above example, the ++i expression is marked as unchecked within the for loop. This tells the compiler to skip the overflow checks, assuming that i will not overflow due to the known iteration count.

By using unchecked expressions, you can potentially save gas because the compiler eliminates the overhead of the overflow checks. However, it's crucial to ensure that the variables will not overflow in practice. Incorrectly using unchecked expressions can lead to unexpected behavior or vulnerabilities in your smart contract.

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.