Bird
Raised Fist0
Blockchain / Solidityprogramming~20 mins

Event-driven architecture patterns in Blockchain / Solidity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Event-Driven Blockchain Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this event handler code snippet?
Consider a blockchain smart contract that emits an event when a token is transferred. What will be the output of the following event listener code when a transfer event is emitted?
Blockchain / Solidity
contract Token {
  event Transfer(address indexed from, address indexed to, uint amount);

  function transfer(address to, uint amount) public {
    emit Transfer(msg.sender, to, amount);
  }
}

// Event listener pseudocode
Token.on('Transfer', (from, to, amount) => {
  console.log(`Transfer from ${from} to ${to} of ${amount} tokens`);
});

// Simulate transfer
Token.transfer('0xABC', 100);
ATransfer from 0xSender to 0xABC of 100 tokens
BTransfer from 0xABC to 0xSender of 100 tokens
CTransfer from 0xSender to 0xABC of 0 tokens
DNo output, event listener not triggered
Attempts:
2 left
💡 Hint
Remember that the 'from' address is the sender of the tokens, usually msg.sender.
🧠 Conceptual
intermediate
1:30remaining
Which pattern best describes decoupling components in blockchain event-driven systems?
In blockchain event-driven architecture, which pattern helps to decouple the smart contract logic from off-chain services by using events?
AFactory pattern
BSingleton pattern
CObserver pattern
DDecorator pattern
Attempts:
2 left
💡 Hint
Think about how listeners subscribe to events emitted by contracts.
🔧 Debug
advanced
2:00remaining
Identify the error in this event subscription code
This code subscribes to a blockchain event but does not receive any events. What is the error?
Blockchain / Solidity
contract Token {
  event Approval(address indexed owner, address indexed spender, uint value);
}

// Subscription code
Token.on('approval', (owner, spender, value) => {
  console.log(`Approved ${value} tokens from ${owner} to ${spender}`);
});
AEvent name is case-sensitive; should be 'Approval' not 'approval'
BCallback function parameters are in wrong order
CMissing await keyword before Token.on
DEvent cannot have indexed parameters
Attempts:
2 left
💡 Hint
Check the exact event name spelling and casing.
📝 Syntax
advanced
1:30remaining
Which option correctly defines an event with multiple indexed parameters in Solidity?
Select the correct Solidity event declaration with two indexed parameters.
Aevent Transfer(indexed address from, indexed address to, uint amount);
Bevent Transfer(address indexed from, address indexed to, uint amount);
Cevent Transfer(address from, address to, uint indexed amount);
Devent Transfer(address from indexed, address to indexed, uint amount);
Attempts:
2 left
💡 Hint
Indexed keyword comes immediately after the type.
🚀 Application
expert
2:00remaining
How many events will be processed by the listener in this scenario?
A smart contract emits an event 'DataUpdated' every time data changes. The listener subscribes once and processes events from block 100 to 105. The contract emitted 'DataUpdated' events at blocks 101, 103, 103, 104, and 106. How many events will the listener process?
A6
B5
C3
D4
Attempts:
2 left
💡 Hint
Count only events emitted between blocks 100 and 105 inclusive.

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
C. To speed up the mining process
D. To encrypt transactions for security

Solution

  1. Step 1: Understand event-driven architecture basics

    Event-driven architecture means systems react automatically to events or actions.
  2. Step 2: Apply this to blockchain context

    In blockchain, smart contracts emit events that apps listen to and respond automatically.
  3. Final Answer:

    To allow smart contracts to emit events that trigger automatic responses -> Option A
  4. Quick Check:

    Event-driven architecture = automatic reactions to events [OK]
Hint: Event-driven means automatic reaction to smart contract events [OK]
Common Mistakes:
  • Confusing event-driven with data storage
  • Thinking it speeds up mining
  • Mixing encryption with event handling
2. Which of the following is the correct syntax to listen for an event named Transfer in a blockchain app using JavaScript?
easy
A. contract.listen('Transfer', function(from, to, amount) {});
B. contract.emit('Transfer', (from, to, amount) => {});
C. contract.on('Transfer', (from, to, amount) => { /* handle event */ });
D. contract.catch('Transfer', (from, to, amount) => {});

Solution

  1. Step 1: Identify correct event listening method

    In JavaScript blockchain libraries, on is used to listen for events.
  2. Step 2: Check syntax for event callback

    The callback receives event parameters like from, to, and amount.
  3. Final Answer:

    contract.on('Transfer', (from, to, amount) => { /* handle event */ }); -> Option C
  4. Quick Check:

    Use on to listen for events [OK]
Hint: Use .on() method to listen for blockchain events in JS [OK]
Common Mistakes:
  • Using .emit() instead of .on() to listen
  • Using .listen() which is invalid
  • Using .catch() which is for errors
3. Given this Solidity event and JavaScript listener:
event Deposit(address indexed user, uint amount);
contract.on('Deposit', (user, amount) => { console.log(amount.toString()); });

What will be printed if the event is emitted with amount = 500?
medium
A. 0x1f4
B. 500
C. undefined
D. Error: amount.toString is not a function

Solution

  1. Step 1: Understand event parameters

    The event emits amount as a number (uint) which is received in JS as a BigNumber or number.
  2. Step 2: Check the listener code

    The listener calls amount.toString() which converts the number 500 to string "500".
  3. Final Answer:

    500 -> Option B
  4. Quick Check:

    amount.toString() converts number 500 to string '500' [OK]
Hint: toString() converts number to string for console output [OK]
Common Mistakes:
  • Thinking amount prints as hex
  • Assuming amount is undefined
  • Confusing toString() usage
4. Identify the error in this JavaScript event listener code for a blockchain contract:
contract.on('Approval', (owner, spender, value) => {
console.log('Approved:', owner, spender, value.toString);
});
medium
A. contract.on is not a function
B. Wrong event name 'Approval'
C. Callback parameters are incorrect
D. Missing parentheses after value.toString

Solution

  1. Step 1: Check usage of toString method

    The code uses value.toString without parentheses, so it logs the function reference, not the string.
  2. Step 2: Correct usage requires parentheses

    It should be value.toString() to convert the value to a string for logging.
  3. Final Answer:

    Missing parentheses after value.toString -> Option D
  4. 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

  1. Step 1: Understand the requirement

    The app must update balances automatically when an event occurs.
  2. Step 2: Match the pattern to the need

    The Event Listener pattern listens for events and triggers immediate updates, fitting this use case perfectly.
  3. Final Answer:

    Event Listener pattern to react and update balances on event emission -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard