Gas is the fee required to perform operations on a blockchain like Ethereum. It measures the computational effort needed to execute transactions or smart contracts.
Click to reveal answer
beginner
Why is storage expensive in smart contracts?
Storing data on the blockchain uses permanent space and requires more gas because it affects all nodes. Reading and writing storage costs more gas than using temporary memory.
Click to reveal answer
intermediate
How can packing variables reduce gas costs?
Packing multiple smaller variables into a single storage slot reduces the number of storage slots used, lowering gas costs because fewer storage operations are needed.
Click to reveal answer
intermediate
What is the benefit of using 'calldata' instead of 'memory' for function parameters?
Using 'calldata' for external function parameters avoids copying data into memory, saving gas because calldata is read-only and cheaper to access.
Click to reveal answer
beginner
Explain why minimizing storage writes saves gas.
Each write to storage costs a lot of gas. Minimizing writes by updating storage only when necessary or batching changes reduces gas consumption significantly.
Click to reveal answer
Which operation generally costs the most gas in a smart contract?
AWriting data to storage
BReading data from memory
CCalling a view function
DUsing local variables
✗ Incorrect
Writing data to storage is the most expensive operation because it permanently changes the blockchain state.
What does 'packing variables' mean in gas optimization?
ACombining multiple small variables into one storage slot
BCompressing data before storing
CUsing fewer functions
DStoring variables in memory instead of storage
✗ Incorrect
Packing variables means placing multiple small variables into a single 32-byte storage slot to reduce storage usage.
Why is 'calldata' cheaper than 'memory' for function inputs?
ACalldata uses less gas to write
BCalldata is stored off-chain
CMemory is slower to access
DCalldata is read-only and does not require copying
✗ Incorrect
Calldata is cheaper because it is read-only and does not require copying data into memory.
Which of these reduces gas cost when updating storage?
AWriting to storage multiple times separately
BUsing global variables instead of local
CBatching multiple updates into one transaction
DAvoiding function modifiers
✗ Incorrect
Batching updates reduces the number of storage writes, saving gas.
What is a common practice to save gas when dealing with boolean variables?
AStore booleans in memory only
BPack multiple booleans into one byte
CConvert booleans to strings
DUse separate storage slots for each boolean
✗ Incorrect
Packing multiple booleans into one byte reduces storage slots used and saves gas.
Describe three ways to optimize gas costs related to storage in smart contracts.
Think about how data is stored and accessed in smart contracts.
You got /3 concepts.
Explain why storage operations are more expensive than memory operations in blockchain smart contracts.
Consider the difference between temporary and permanent data.
You got /3 concepts.
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
Step 1: Understand gas cost of storage
Storage operations in blockchain smart contracts consume significant gas compared to memory or stack operations.
Step 2: Impact on transaction cost
Higher gas consumption means higher transaction fees for users interacting with the contract.
Final Answer:
Because storage operations consume more gas, increasing transaction costs -> Option C
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
Step 1: Identify constant usage
Declaring variables as constant stores their value in bytecode, not storage, saving gas.
Step 2: Compare with other declarations
Other options use storage variables which consume gas on read/write, unlike constants.
Final Answer:
constant uint256 public MAX_VALUE = 1000; -> Option B
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
Step 1: Understand storage slot packing
Solidity packs variables into 32-byte slots if their sizes fit together.
Step 2: Calculate combined size
uint8 + uint8 + uint16 = 1 + 1 + 2 = 4 bytes, which fits into one 32-byte slot.
Final Answer:
1 storage slot -> Option A
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
Step 1: Analyze variable type choice
Using uint256 for a small counter wastes storage space and gas.
Step 2: Suggest smaller type
Using uint8 or smaller type packs better and reduces gas cost.
Final Answer:
Using uint256 instead of uint8 for small counters -> Option A
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
Step 1: Understand storage cost of booleans
Each bool uses a full storage slot if declared separately, wasting gas.
Step 2: Use bit packing with uint8
Storing multiple flags as bits in a single uint8 packs them efficiently, reducing storage slots and gas.
Step 3: Compare other options
Arrays and multiple uint256 variables consume more storage and gas.
Final Answer:
Use a single uint8 variable and bitwise operations to store flags -> Option D
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 unknownstrongwhile earning +1 Grip toward your certificate.