Event filtering in Blockchain / Solidity - Mini Project: Build & Apply
events with these exact dictionaries: {'user': '0x123', 'action': 'deposit', 'amount': 100}, {'user': '0x456', 'action': 'withdraw', 'amount': 50}, {'user': '0x123', 'action': 'transfer', 'amount': 30}Use a list with dictionaries exactly as shown.
filter_user and set it to the string '0x123'Set the variable exactly as shown.
filtered_events using a list comprehension that includes only events where event['user'] == filter_userUse a list comprehension with the condition event['user'] == filter_user.
print statement to display the filtered_events listUse print(filtered_events) to show the filtered list.
Practice
What is the main purpose of event filtering in blockchain applications?
Solution
Step 1: Understand event filtering concept
Event filtering allows you to listen only to events that match specific parameters or conditions.Step 2: Identify the main purpose
This helps reduce unnecessary data processing and improves app performance by focusing on relevant events.Final Answer:
To listen only to specific events that match certain criteria -> Option DQuick Check:
Event filtering = selective listening [OK]
- Confusing event filtering with event creation
- Thinking event filtering speeds up mining
- Believing event filtering encrypts data
Which of the following is the correct syntax to filter events by a parameter named user in a blockchain event listener?
contract.events.Transfer({ filter: { ??? } })Solution
Step 1: Understand filter syntax
Filters use an object with key-value pairs where keys are parameter names and values are filter values.Step 2: Match correct syntax
The correct syntax is an object with the parameter name as key and the desired value, like { user: '0x123...' }.Final Answer:
{ user: '0x123...' } -> Option AQuick Check:
Filter = object with key-value pairs [OK]
- Using array or string instead of object for filters
- Writing filter as assignment instead of object
- Omitting quotes around string values
Given the following code snippet, what events will be received?
contract.events.Transfer({ filter: { from: '0xabc...' }, fromBlock: 100, toBlock: 200 })Assuming events with from address '0xabc...' occurred at blocks 90, 150, and 210.
Solution
Step 1: Analyze filter parameters
The filter listens for events where 'from' equals '0xabc...'. The block range is from 100 to 200.Step 2: Check event blocks against filter
Events at blocks 90 and 210 are outside the block range, so only the event at block 150 matches both filter and block range.Final Answer:
Only event at block 150 -> Option AQuick Check:
Filter + block range = event at block 150 only [OK]
- Ignoring block range and including all matching events
- Including events outside the block range
- Confusing filter parameter with block number
Identify the error in this event filter code snippet:
contract.events.Approval({ filter: { owner: 0xabc123 }, fromBlock: 'latest' })Solution
Step 1: Check filter parameter types
Filter values must be strings for addresses, but 0xabc123 is missing quotes, so it's treated as a variable or number.Step 2: Validate other parts
The event name and fromBlock usage are valid; fromBlock can be 'latest'. Filter should be an object, not an array.Final Answer:
The filter value 0xabc123 should be a string -> Option BQuick Check:
Address filter values must be strings [OK]
- Omitting quotes around address strings
- Thinking fromBlock 'latest' is invalid
- Using array instead of object for filter
You want to listen to Transfer events where the value is greater than 1000 tokens. Which approach correctly filters these events?
// Assume event signature: Transfer(address from, address to, uint256 value)
Solution
Step 1: Understand filter limitations
Event filters only support exact matches or arrays of values, not comparison operators like greater than.Step 2: Choose correct approach
To filter by value > 1000, you must receive events first and then check the value in your code logic.Final Answer:
Filter events after receiving all by checking value > 1000 in code -> Option CQuick Check:
Filters do exact matches; use code for range checks [OK]
- Trying to use comparison operators in filter
- Assuming string '>1000' works as filter
- Confusing block range with value filtering
Ready to prove it?
Pass the test and this pattern moves unknown
