π Indexed Parameters: Searchable Event Data
Learn why indexed parameters make blockchain queries faster
Your Progress
0 / 5 completedβ
Previous Section
Event Anatomy
π·οΈ The Power of Indexed Parameters
Indexed parameters are the secret to efficient event filtering. They transform slow, expensive full-blockchain scans into lightning-fast queries using Bloom filters and topic indexing.
π― Interactive: Filter Performance Simulator
See how indexed parameters dramatically improve query speed:
No Filters
HIGH COSTQuery all Transfer events (expensive)
~8 events scanned
0xAliceβ0xBob
100 @ Block 1000
0xAliceβ0xCharlie
50 @ Block 1001
0xBobβ0xAlice
25 @ Block 1002
0xCharlieβ0xBob
75 @ Block 1003
0xAliceβ0xDave
200 @ Block 1004
0xDaveβ0xAlice
150 @ Block 1005
0xBobβ0xCharlie
30 @ Block 1006
0xCharlieβ0xAlice
60 @ Block 1007
Performance Analysis:
β οΈ Scans ALL events. Use indexed filters for better performance!
How Indexed Parameters Work
πΈBloom Filters
Ethereum uses Bloom filters in block headers to quickly check if a block contains events matching specific topicsβwithout scanning every transaction.
Block Header β Bloom Filter β "Does this block contain Transfer from 0xAlice?"
β If YES: Scan transactions
β If NO: Skip entire block instantlyπ―Topic Indexing
Each indexed parameter becomes a searchable topic. Nodes maintain indexes for efficient lookups.
Topic 1
from address
Topic 2
to address
Data
amount (not indexed)
β‘Query Speed Impact
No filters:
Scan millions of events
1 indexed:
~50% reduction
2 indexed:
~80% reduction
3 indexed:
~90% reduction
Best Practices for Indexed Parameters
β
DO Index These
- β’ Addresses (from, to, owner, spender)
- β’ Token IDs, NFT IDs
- β’ Order IDs, transaction IDs
- β’ Enum values, status codes
- β’ Bool flags (active, paused)
β
DON'T Index These
- β’ Large numbers rarely filtered
- β’ Strings (indexed = hash only)
- β’ Arrays (cannot be indexed)
- β’ Structs (cannot be indexed)
- β’ Data you'll never query by
Code Examples
β Good: Strategic Indexing
event OrderCreated(
uint256 indexed orderId, // β Will filter by ID
address indexed buyer, // β Will filter by buyer
address indexed seller, // β Will filter by seller
uint256 amount, // Data: rarely filtered
string metadata // Data: cannot index strings
);
event NFTTransfer(
address indexed from, // β Filter sender
address indexed to, // β Filter receiver
uint256 indexed tokenId, // β Filter specific NFT
string tokenURI // Data: metadata
);β Bad: Wasting Indexed Slots
event OrderCreated(
uint256 indexed timestamp, // β Rarely filter by exact timestamp
uint256 indexed amount, // β Filter by range, not exact value
uint256 indexed randomId, // β Never filter by random value
address buyer, // β Should be indexed!
address seller // β Should be indexed!
);
// Better: Index addresses, not numbers
event OrderCreated(
address indexed buyer,
address indexed seller,
uint256 indexed orderId,
uint256 amount,
uint256 timestamp
);π‘ The 3-Index Limit
Solidity allows maximum 3 indexed parameters per event. This is an EVM limitation due to:
- β’Topic 0: Reserved for event signature hash
- β’Topics 1-3: Available for indexed parameters
- β’4 topics total: Each 32 bytes in Bloom filter
- β’Balance: More indexes = better filtering but higher gas cost