Bird
Raised Fist0
Blockchain / Solidityprogramming~5 mins

Gas optimization with storage in Blockchain / Solidity - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Gas optimization with storage
O(n)
Understanding Time Complexity

When working with blockchain, saving and reading data from storage costs gas, which affects how fast and cheap your code runs.

We want to understand how the number of storage operations changes as the data size grows.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


contract StorageExample {
    uint[] public data;

    function addData(uint[] memory newData) public {
        for (uint i = 0; i < newData.length; i++) {
            data.push(newData[i]);
        }
    }
}
    

This code adds each item from a new array into storage one by one.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Loop that pushes each item into storage.
  • How many times: Once for each item in the input array.
How Execution Grows With Input

Each new item causes one storage write, so more items mean more writes.

Input Size (n)Approx. Operations
1010 storage writes
100100 storage writes
10001000 storage writes

Pattern observation: The number of operations grows directly with input size.

Final Time Complexity

Time Complexity: O(n)

This means the time and gas cost grow in a straight line as you add more data.

Common Mistake

[X] Wrong: "Adding many items at once costs the same as adding one item."

[OK] Correct: Each storage write costs gas, so more items mean more cost and longer execution.

Interview Connect

Understanding how storage operations scale helps you write efficient smart contracts that save gas and run smoothly on blockchain.

Self-Check

"What if we batch multiple items into one storage slot? How would the time complexity change?"

Practice

(1/5)
1. Why is it important to optimize storage usage in blockchain smart contracts?
easy
A. Because storage is unlimited and free to use
B. Because storage variables are faster to access than memory variables
C. Because storage operations consume more gas, increasing transaction costs
D. Because storage variables do not affect gas costs

Solution

  1. Step 1: Understand gas cost of storage

    Storage operations in blockchain smart contracts consume significant gas compared to memory or stack operations.
  2. Step 2: Impact on transaction cost

    Higher gas consumption means higher transaction fees for users interacting with the contract.
  3. Final Answer:

    Because storage operations consume more gas, increasing transaction costs -> Option C
  4. Quick Check:

    Storage gas cost = higher fees [OK]
Hint: Remember: storage costs gas, so optimize to save money [OK]
Common Mistakes:
  • Thinking storage is free
  • Confusing storage with memory gas costs
  • Assuming storage is faster than memory
2. Which of the following Solidity declarations helps reduce gas by optimizing storage usage?
easy
A. uint8 public smallNumber; uint8 public anotherSmallNumber;
B. constant uint256 public MAX_VALUE = 1000;
C. uint256 public data;
D. string public name;

Solution

  1. Step 1: Identify constant usage

    Declaring variables as constant stores their value in bytecode, not storage, saving gas.
  2. Step 2: Compare with other declarations

    Other options use storage variables which consume gas on read/write, unlike constants.
  3. Final Answer:

    constant uint256 public MAX_VALUE = 1000; -> Option B
  4. Quick Check:

    Constants reduce storage gas [OK]
Hint: Use constants to save storage gas costs [OK]
Common Mistakes:
  • Assuming all variables cost the same gas
  • Not knowing constants are stored differently
  • Ignoring variable size impact
3. Consider this Solidity snippet:
contract Test {
    uint8 a = 1;
    uint8 b = 2;
    uint16 c = 3;
}

How many storage slots does this contract use?
medium
A. 1 storage slot
B. 2 storage slots
C. 3 storage slots
D. 4 storage slots

Solution

  1. Step 1: Understand storage slot packing

    Solidity packs variables into 32-byte slots if their sizes fit together.
  2. Step 2: Calculate combined size

    uint8 + uint8 + uint16 = 1 + 1 + 2 = 4 bytes, which fits into one 32-byte slot.
  3. Final Answer:

    1 storage slot -> Option A
  4. Quick Check:

    Small types packed = 1 slot [OK]
Hint: Pack small variables to fit one storage slot [OK]
Common Mistakes:
  • Assuming each variable uses one slot
  • Ignoring variable size packing
  • Confusing bytes with slots
4. Identify the gas optimization mistake in this Solidity code:
contract Example {
    uint256 public count;
    function increment() public {
        count = count + 1;
    }
}
medium
A. Using uint256 instead of uint8 for small counters
B. Not marking count as immutable
C. Using count = count + 1; instead of ++count;
D. Not using constant for count

Solution

  1. Step 1: Analyze variable type choice

    Using uint256 for a small counter wastes storage space and gas.
  2. Step 2: Suggest smaller type

    Using uint8 or smaller type packs better and reduces gas cost.
  3. Final Answer:

    Using uint256 instead of uint8 for small counters -> Option A
  4. Quick Check:

    Smaller types save gas [OK]
Hint: Use smallest uint type needed for counters [OK]
Common Mistakes:
  • Thinking increment syntax affects gas
  • Confusing constant and immutable usage
  • Ignoring variable size impact
5. You want to store multiple boolean flags in a contract efficiently. Which approach optimizes gas usage best?
hard
A. Use separate bool variables for each flag
B. Use multiple uint256 variables for each flag
C. Use an array of bool variables
D. Use a single uint8 variable and bitwise operations to store flags

Solution

  1. Step 1: Understand storage cost of booleans

    Each bool uses a full storage slot if declared separately, wasting gas.
  2. Step 2: Use bit packing with uint8

    Storing multiple flags as bits in a single uint8 packs them efficiently, reducing storage slots and gas.
  3. Step 3: Compare other options

    Arrays and multiple uint256 variables consume more storage and gas.
  4. Final Answer:

    Use a single uint8 variable and bitwise operations to store flags -> Option D
  5. Quick Check:

    Bit packing booleans saves gas [OK]
Hint: Pack booleans into bits using uint types [OK]
Common Mistakes:
  • Using separate bools wastes storage
  • Assuming arrays are cheaper
  • Ignoring bitwise operations benefits
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard