📖 Scenario: You are creating a simple blockchain event logger. In blockchain systems, events like new blocks or transactions are emitted and other parts of the system listen and react to these events. This helps keep the system organized and responsive.Imagine you want to track when new blocks are added and when transactions happen, and log these events.
🎯 Goal: Build a simple event-driven system that listens for blockchain events and logs messages when new blocks or transactions occur.
📋 What You'll Learn
Create a dictionary called blockchain_events to hold event names and their listeners
Create a variable called new_block with the value 'block_added'
Write a function called emit_event that takes an event name and calls all listeners for that event
Print the log messages when events are emitted
💡 Why This Matters
🌍 Real World
Event-driven architecture is common in blockchain systems to handle asynchronous events like new blocks, transactions, or network changes efficiently.
💼 Career
Understanding event-driven patterns is important for blockchain developers to build scalable and maintainable decentralized applications and services.
Progress0 / 4 steps
1
Create the event listeners dictionary
Create a dictionary called blockchain_events with two keys: 'block_added' and 'transaction_made'. Each key should have an empty list as its value.
Blockchain / Solidity
Hint
Use curly braces {} to create a dictionary. Each key should be a string and the value an empty list [].
2
Define the event name variable
Create a variable called new_block and set it to the string 'block_added'.
Blockchain / Solidity
Hint
Assign the string 'block_added' to the variable new_block.
3
Write the event emitter function
Write a function called emit_event that takes one parameter event_name. Inside the function, use a for loop with variables listener to iterate over blockchain_events[event_name] and call each listener().
Blockchain / Solidity
Hint
Use a for loop to go through each listener in the list for the event and call it like a function.
4
Add listeners and print event logs
Define two functions: log_block_added that prints 'New block added to the blockchain.' and log_transaction_made that prints 'New transaction recorded.'. Add log_block_added to blockchain_events['block_added'] and log_transaction_made to blockchain_events['transaction_made']. Then call emit_event(new_block) and emit_event('transaction_made') to print the logs.
Blockchain / Solidity
Hint
Define functions that print the messages, add them to the correct event lists, then call emit_event with the event names.
Practice
(1/5)
1. What is the main purpose of event-driven architecture in blockchain applications?
easy
A. To allow smart contracts to emit events that trigger automatic responses
B. To store large amounts of data on the blockchain
The code uses value.toString without parentheses, so it logs the function reference, not the string.
Step 2: Correct usage requires parentheses
It should be value.toString() to convert the value to a string for logging.
Final Answer:
Missing parentheses after value.toString -> Option D
Quick Check:
toString() needs () to call method [OK]
Hint: Call toString() with parentheses to convert value [OK]
Common Mistakes:
Forgetting () after toString
Assuming event name is wrong
Misunderstanding callback parameters
5. You want to build a blockchain app that updates user balances automatically when a BalanceUpdated event is emitted by a smart contract. Which event-driven pattern best fits this use case?
hard
A. Event Listener pattern to react and update balances on event emission
B. Command Query Responsibility Segregation (CQRS) to separate reads and writes
C. Event Sourcing to store all balance changes as events
D. Batch Processing to update balances periodically
Solution
Step 1: Understand the requirement
The app must update balances automatically when an event occurs.
Step 2: Match the pattern to the need
The Event Listener pattern listens for events and triggers immediate updates, fitting this use case perfectly.
Final Answer:
Event Listener pattern to react and update balances on event emission -> Option A
Quick Check:
Use Event Listener for automatic reaction to events [OK]
Hint: Use Event Listener to react instantly to blockchain events [OK]
Common Mistakes:
Confusing Event Sourcing with immediate updates
Choosing CQRS which separates reads/writes but not event reaction
Using Batch Processing which delays updates
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.