Why gas efficiency saves money in Blockchain / Solidity - Performance Analysis
Start learning this pattern below
Jump into concepts and practice - no test required
When working with blockchain, every operation costs gas, which means money. Understanding how the number of operations grows helps us see why saving gas is important.
We want to know how the cost changes as the work done by a smart contract increases.
Analyze the time complexity of the following code snippet.
function batchTransfer(address[] memory recipients, uint256 amount) public {
for (uint i = 0; i < recipients.length; i++) {
transfer(recipients[i], amount);
}
}
This function sends tokens to many addresses by looping through each recipient and transferring tokens.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that calls
transferfor each recipient. - How many times: Once for every address in the
recipientslist.
As the number of recipients grows, the number of transfers grows the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 transfers |
| 100 | 100 transfers |
| 1000 | 1000 transfers |
Pattern observation: The work grows directly with the number of recipients. Double the recipients, double the work.
Time Complexity: O(n)
This means the cost grows in a straight line with the number of recipients. More recipients mean more gas spent.
[X] Wrong: "Adding more recipients won't increase gas cost much because transfers are simple."
[OK] Correct: Each transfer uses gas, so more recipients mean more transfers and more gas. The cost adds up directly.
Understanding how gas cost grows with input size shows you can write smart contracts that save money. This skill helps you build better blockchain apps and impress interviewers with practical knowledge.
"What if we replaced the loop with a single batch transfer call that handles all recipients at once? How would the time complexity change?"
Practice
Solution
Step 1: Understand what gas represents in blockchain
Gas is a fee paid to execute operations on the blockchain, measured in cryptocurrency.Step 2: Connect gas efficiency to cost savings
Using less gas means paying less cryptocurrency for the same operation.Final Answer:
Because it reduces the transaction cost paid in cryptocurrency -> Option CQuick Check:
Gas efficiency = lower transaction cost [OK]
- Confusing gas with code speed on a computer
- Thinking gas increases blockchain size
- Believing gas allows free transactions
Solution
Step 1: Identify data types and their gas costs
Smaller data types likeuint8use less storage and gas than larger types likeuint256.Step 2: Compare options for gas efficiency
Usinguint8for small numbers saves gas compared to storing numbers as strings or using inefficient loops.Final Answer:
Usinguint8instead ofuint256for small numbers -> Option DQuick Check:
Smaller data types = less gas [OK]
- Using strings to store numbers wastes gas
- Multiple require statements add unnecessary gas
- Large loops increase gas cost
function add(uint256 a, uint256 b) public pure returns (uint256) {
uint256 c = a + b;
return c;
}If you replace
uint256 with uint8 for variables a, b, and c, what is the main effect on gas usage?Solution
Step 1: Understand gas cost of data types
Smaller data types likeuint8use less gas for storage and operations thanuint256.Step 2: Consider the effect on gas usage
Replacinguint256withuint8reduces gas because less storage and computation is needed.Final Answer:
Gas usage will decrease because smaller types use less storage -> Option AQuick Check:
Smaller type = less gas [OK]
- Assuming smaller types slow down code
- Ignoring gas savings from smaller storage
- Confusing overflow errors with gas usage
uint8 but causes an error:function multiply(uint8 a, uint8 b) public pure returns (uint8) {
uint8 result = a * b;
require(result >= a, "Overflow");
return result;
}What is the main problem causing the error?
Solution
Step 1: Analyze the overflow check logic
The conditionresult >= ais not a reliable way to detect overflow in multiplication.Step 2: Understand why this causes errors
If overflow occurs, the check might pass incorrectly or fail, causing unexpected errors.Final Answer:
Therequirecondition does not correctly detect overflow -> Option BQuick Check:
Incorrect overflow check causes errors [OK]
- Assuming
uint8causes syntax errors - Believing multiplication is disallowed on
uint8 - Ignoring overflow risks in small types
Solution
Step 1: Identify the best data structure and type for gas efficiency
Using amappingwithuint8saves gas by using less storage and avoiding loops.Step 2: Compare other options for gas cost
Usinguint256wastes storage if values are small; strings and arrays increase gas due to size and looping.Final Answer:
Usemapping(address => uint8)if balances never exceed 255 -> Option AQuick Check:
Smaller types + mappings = gas savings [OK]
- Using large types unnecessarily wastes gas
- Storing numbers as strings is inefficient
- Looping over arrays increases gas cost
