Efficient data structures help store and manage data quickly and save space. This is very important in blockchain because every byte and operation costs money and time.
Efficient data structures in Blockchain / Solidity
Start learning this pattern below
Jump into concepts and practice - no test required
struct DataStructureName {
// fields to store data
};
mapping(KeyType => ValueType) public dataMap;
// Example: Using arrays, mappings, structs, or trees depending on needIn blockchain, common data structures include mappings (like dictionaries), arrays, and structs to organize data.
Choosing the right data structure can save gas fees and speed up your smart contract.
struct User {
uint id;
string name;
}
User[] public users;mapping(address => uint) public balances;
mapping(bytes32 => bool) public dataExists;This smart contract uses a struct and an array to store users and a mapping to store balances. It shows how to add users and check balances efficiently.
pragma solidity ^0.8.0; contract EfficientData { struct User { uint id; string name; } User[] public users; mapping(address => uint) public balances; function addUser(uint _id, string memory _name) public { users.push(User(_id, _name)); balances[msg.sender] = 100; } function getUserCount() public view returns (uint) { return users.length; } function getBalance(address user) public view returns (uint) { return balances[user]; } }
Mappings do not store keys, so you cannot iterate over them directly.
Arrays allow iteration but can be costly if they grow too large.
Structs help group related data together for clarity and efficiency.
Efficient data structures save space and gas in blockchain apps.
Use mappings for fast lookups by key.
Use structs and arrays to organize complex data.
Practice
Solution
Step 1: Understand the need for quick lookup
We want to find a balance by address fast, so we need a structure that supports direct access by key.Step 2: Identify the best data structure
Mappings provide key-value pairs allowing O(1) access by address, unlike arrays or structs which require searching.Final Answer:
Mapping (key-value pairs) -> Option BQuick Check:
Fast key-based lookup = Mapping [OK]
- Choosing arrays which require looping to find an address
- Using structs alone without a key for lookup
- Thinking linked lists are efficient for random access
Solution
Step 1: Recall Solidity mapping syntax
Mappings use the syntax mapping(keyType => valueType) variableName;Step 2: Match the correct syntax
mapping(address => uint) balances; matches this exactly: mapping(address => uint) balances;Final Answer:
mapping(address => uint) balances; -> Option AQuick Check:
Correct mapping syntax uses '=>' [OK]
- Using commas instead of '=>' in mapping
- Using square brackets or curly braces incorrectly
- Omitting the semicolon at the end
struct User { uint id; string name; }
User[] users;
users.push(User(1, "Alice"));
users.push(User(2, "Bob"));
string memory name = users[1].name;Solution
Step 1: Understand array indexing
Arrays start at index 0, so users[0] is Alice, users[1] is Bob.Step 2: Identify the accessed element
The code accesses users[1].name, which is "Bob".Final Answer:
"Bob" -> Option DQuick Check:
Index 1 in array = "Bob" [OK]
- Confusing index 1 with index 0
- Assuming structs print as variable names
- Expecting compilation error due to string usage
mapping(address => uint) balances;
function addBalance(address user, uint amount) public {
balances[user] += amount;
}
Solution
Step 1: Check mapping usage
Mappings default to zero for uint values if key not set, so no initialization needed.Step 2: Verify function and operation
Using '+=' on balances[user] is valid; function has public visibility.Final Answer:
No initialization needed for mapping values -> Option CQuick Check:
Mapping uint defaults to 0, so '+=' works [OK]
- Thinking mapping values must be initialized before use
- Confusing visibility modifiers
- Assuming keys must be uint instead of address
Solution
Step 1: Analyze the need for quick lookup by id
Quick lookup by id requires direct access, which arrays or linked lists cannot provide efficiently.Step 2: Choose the best data structure
Mapping from id to struct allows O(1) access to user profiles by id, combining grouping (struct) and fast lookup (mapping).Final Answer:
Mapping from id to struct -> Option AQuick Check:
Fast key access + grouped data = mapping to struct [OK]
- Using arrays which require looping to find id
- Using linked lists which are slow for random access
- Embedding arrays inside structs without mapping
