In the world of smart contracts, every byte matters and every gas unit is costly. Yet, most beginner Solidity developers unknowingly write code that wastes gas by misusing one core concept

Solidity’s data locations: storage, memory, and calldata.

Here’s your no-fluff guide to understanding how they work and how to save gas by choosing wisely.

Storage: Durable But Expensive

storage refers to data that persists on the blockchain. It’s what your smart contract keeps between transactions.

But it comes at a cost — literally.

  • Writes to storage cost thousands of gas.

  • Reads are cheaper, but still non-trivial.

uint256 public x; // stored in contract storage

Use storage only for state variables that truly need to live on-chain. Otherwise, you're paying rent for no reason.

Memory: Short-Lived and Mid-Cost

When you need temporary data — like working variables in a function — memory is your go-to.

It’s much cheaper than storage, and is reset every time the function ends.

function calc() public pure returns (uint256) {

uint256 ;

return nums.length;

}

This is perfect for data manipulation that doesn’t need to persist.

Calldata: Temporary and Cheapest

Here’s the pro tip most beginners miss:

calldata is the most gas-efficient location — especially for function inputs.

It’s read-only, lives for one function call, and doesn’t need to be copied like memory.

function sum(uint256[] calldata nums) external pure returns (uint256) {

return nums[0] + nums[1];

}

Want to optimize your contract?✅ Replace memory with calldata for input arrays and structs in external functions.

Real-World Impact

In 2024, a study of 100 top gas-optimized contracts on Ethereum L2s showed:

Projects that used calldata for external input arrays saved up to 35% in gas on average.

That’s a massive edge — especially in DeFi and high-frequency apps.

Bonus: ABI Encoding

Whenever users call your contract, the inputs are encoded in calldata. Solidity decodes them based on the function signature.

Knowing this low-level behavior helps when you start writing custom decoders or using assembly.

Takeaway

If you remember one thing from this:

Use storage only when necessary, memory when needed, and calldata by default for external inputs.

That alone can save you thousands in gas — and elevate your code from "just working" to production-grade.

Want more beginner-friendly Solidity deep dives? Follow along — next up: view vs pure, fallback functions, and function selectors.

Mirror文章信息

Mirror原文:查看原文

作者地址:0x484B86eED564355C0BE9b4470942043EEFF6c30A

内容类型:application/json

应用名称:MirrorXYZ

内容摘要:MdVZZbL9Siu7iWzlrlHuRHYuG4wK70rpp09TBMSmS80

原始内容摘要:iL7mWRz0MpKSDMot20FjCfL7P_YjSV33Bhj-ZN7GfSA

区块高度:1693134

发布时间:2025-06-17 15:37:46