Indexed parameters in Blockchain / Solidity - Time & Space Complexity
When working with blockchain events, indexed parameters help filter data efficiently.
We want to understand how the cost of searching events grows as more data is added.
Analyze the time complexity of the following event filter code using indexed parameters.
event Transfer(address indexed from, address indexed to, uint256 amount);
function getTransfersBySender(address sender) public view returns (Transfer[] memory) {
// Filter events where 'from' equals sender
return filterEvents("Transfer", "from", sender);
}
This code filters blockchain Transfer events by the sender address using an indexed parameter.
Look for repeated checks or searches in the event logs.
- Primary operation: Searching event logs for matching indexed parameter values.
- How many times: Once per event stored in the blockchain logs.
As the number of events grows, the search cost changes depending on indexing.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: Without indexing, operations grow linearly with events; with indexed parameters, filtering is faster because the blockchain organizes data for quick lookup.
Time Complexity: O(n)
This means the time to find matching events grows in direct proportion to the number of events stored.
[X] Wrong: "Indexed parameters make event searches instant regardless of data size."
[OK] Correct: Indexed parameters speed up filtering but still require checking entries; the cost grows with more events.
Understanding how indexed parameters affect search cost shows you know how blockchain organizes data efficiently, a useful skill for real projects.
"What if we added multiple indexed parameters to the event? How would that affect the time complexity of filtering?"
Practice
What is the main purpose of indexed parameters in blockchain events?
Solution
Step 1: Understand the role of indexed parameters
Indexed parameters are used to tag event data so it can be searched quickly on the blockchain.Step 2: Compare with other options
Encryption, size limits, or automatic execution are not related to indexed parameters.Final Answer:
To tag event data for fast searching on the blockchain -> Option CQuick Check:
Indexed parameters = fast search tags [OK]
- Thinking indexed encrypts data
- Confusing indexing with size limits
- Assuming indexed triggers functions
Which of the following is the correct syntax to declare an indexed parameter in a Solidity event?
event Transfer(address ? from, address to, uint amount);Solution
Step 1: Recall Solidity event syntax
The keyword to mark a parameter as indexed is exactlyindexed.Step 2: Check other options
Other words likeindex,indexing, orindexedParamare invalid in Solidity event declarations.Final Answer:
indexed -> Option AQuick Check:
Use 'indexed' keyword for parameters [OK]
- Using 'index' instead of 'indexed'
- Adding extra words like 'indexedParam'
- Omitting the keyword entirely
Given the Solidity event declaration:
event Approval(address indexed owner, address indexed spender, uint256 value);
Which parameters are indexed and can be filtered in event logs?
Solution
Step 1: Identify indexed parameters in the event
The event declaresownerandspenderas indexed parameters.Step 2: Understand filtering capability
Only indexed parameters can be filtered in event logs, soownerandspenderare filterable.Final Answer:
owner and spender -> Option AQuick Check:
Indexed parameters = owner, spender [OK]
- Assuming all parameters are indexed
- Including non-indexed 'value' as filterable
- Confusing parameter order with indexing
What is wrong with this Solidity event declaration?
event Deposit(address indexed from, uint indexed amount, uint indexed message, uint indexed timestamp);
Solution
Step 1: Count indexed parameters
The event has four indexed parameters:from,amount,message, andtimestamp.Step 2: Recall indexing limit
Solidity allows a maximum of 3 indexed parameters per event. This declaration exceeds that limit.Final Answer:
More than 3 parameters are indexed -> Option DQuick Check:
4 indexed > max 3 [OK]
- Thinking 4 indexed parameters are allowed
- Ignoring the 3 indexed parameter limit
- Confusing event name rules
You want to create an event to track token transfers with these details: sender address, receiver address, amount, and a note message. You want to filter events by sender and receiver. Which event declaration is correct?
Solution
Step 1: Identify which parameters need indexing
Sender and receiver addresses must be indexed for filtering.Step 2: Check indexing limits and types
Only 3 parameters can be indexed. Amount can be indexed but note (string) cannot be indexed.Step 3: Evaluate each option
event Transfer(address indexed sender, address indexed receiver, uint amount, string note); indexes sender and receiver only, which is correct. event Transfer(address sender, address receiver, uint indexed amount, string indexed note); indexes amount and note incorrectly. event Transfer(address indexed sender, address receiver, uint indexed amount, string note); indexes amount but not receiver. event Transfer(address indexed sender, address indexed receiver, uint indexed amount, string indexed note); indexes 4 parameters which is invalid and string cannot be indexed.Final Answer:
event Transfer(address indexed sender, address indexed receiver, uint amount, string note); -> Option BQuick Check:
Index sender and receiver only; string can't be indexed [OK]
- Indexing string parameters
- Indexing more than 3 parameters
- Not indexing all filterable parameters
Ready to prove it?
Pass the test and this pattern moves unknown
