Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refs #454 -- Added ShortCircuiting to general/build/smart-contracts/gas-optimization #493

Merged
merged 8 commits into from
Mar 29, 2024
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
displayed_sidebar: generalSidebar
---

# Short-Circuiting

In Solidity, where every blockchain-affecting operation requires gas, short-circuiting is a coding technique that evaluates the second argument of a logical operation only if the first doesn't conclusively determine the outcome, thus significantly reducing unnecessary gas consumption and enhancing efficiency.

**DemoCode**

Below, we demonstrates how short-circuiting can be applied to minimize gas usage:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract LogicOptimization {
// High gas consumption function
function heavy() public pure returns (bool ok) {
uint num;
for (uint256 i = 0; i < 1000; i++) {
num = i + 1;
}
ok = true;
}

// Low gas consumption function
function light() public pure returns (bool ok) {
ok = true;
}

// No short-circuiting: higher gas usage
function basic() external pure {
heavy() || light(); // Evaluates both heavy() and light()
}

// With short-circuiting: reduced gas usage
function efficient() external pure {
light() || heavy(); // light() evaluated first, heavy() skipped if light() is true
}
}
```

Recommendations for gas optimization:

🌟 Utilize **short-circuiting** to prevent unnecessary function calls or computations.

🌟 Place functions or conditions likely to succeed (or that are less gas-consuming) **before** others in logical operations.

🌟 Understand the gas cost of operations and structure your code to minimize these costs whenever possible.