Storage and Memory Management

Gas Optimization Techniques for Storage

Beginner Level

Since storage operations are costly in Solidity, optimizing how and when storage is used can save a significant amount of gas. Below are best practices developers should follow to build efficient smart contracts.

1. Use Memory or Calldata for Temporary Variables

  • Avoid unnecessary storage writes for temporary data.
  • Use memory or calldata for function parameters and local variables.

Example: Using memory instead of copying data to storage.


function process(uint256[] memory arr) public pure returns (uint256) {
    return arr.length;
}

2. Pack Variables

Solidity stores variables in 32-byte storage slots. Packing smaller variables together can significantly reduce storage usage.


struct Packed {
    uint8 a;
    uint8 b;
    uint16 c; // All fit in one 32-byte slot
}

This approach reduces the number of storage slots used and lowers gas costs.

3. Minimize Storage Writes

Reading and writing to storage multiple times is expensive. Instead, read once, operate in memory, and write back once.


function increment() public {
    uint256 temp = storedData; // Read once
    temp += 1;
    storedData = temp; // Write once
}

4. Use Immutable and Constants

Variables marked as constant or immutable do not occupy storage slots, making them much cheaper.


uint256 public constant MAX = 100; // No storage cost

5. Delete Unused Storage

Using the delete keyword clears storage slots and refunds some gas.


delete storedData;

Summary Table

Feature Storage Memory Calldata
Persistence Permanent Temporary Temporary
Modifiable Yes Yes No
Cost High Medium Low
Use Case State variables Local variables External parameters

Key Takeaway: Thoughtful storage usage and optimization techniques can drastically reduce gas costs and improve smart contract efficiency.

Continue Learning

Explore more topics in Solidity or browse other tutorials.