0
0
Blockchain / Solidityprogramming~20 mins

Listening to events (frontend) in Blockchain / Solidity - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Event Listener Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output when listening to a smart contract event?
Consider the following code snippet that listens to a smart contract event using ethers.js. What will be logged to the console when the event is emitted?
Blockchain / Solidity
const { ethers } = require('ethers');

const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_PROJECT_ID');
const contractAddress = '0x1234567890abcdef1234567890abcdef12345678';
const abi = [
  'event Transfer(address indexed from, address indexed to, uint256 value)'
];

const contract = new ethers.Contract(contractAddress, abi, provider);

contract.on('Transfer', (from, to, value, event) => {
  console.log(`Transfer from ${from} to ${to} of ${value.toString()} tokens`);
});

// Assume the Transfer event is emitted with from='0xabc...', to='0xdef...', value=1000
ATransfer from undefined to undefined of undefined tokens
BTransfer from 0xabc... to 0xdef... of 1000 tokens
CSyntaxError: Unexpected token 'on'
DTypeError: contract.on is not a function
Attempts:
2 left
💡 Hint
Remember that ethers.js contract objects have an 'on' method to listen to events.
🧠 Conceptual
intermediate
1:30remaining
Which statement about event listeners in blockchain frontend is true?
Select the correct statement about listening to blockchain events in a frontend application.
AEvent listeners require the contract ABI and provider to work properly.
BEvent listeners can only listen to events after the listener is set up, not past events.
CEvent listeners automatically fetch past events without extra configuration.
DEvent listeners do not need the contract address to listen to events.
Attempts:
2 left
💡 Hint
Think about what information is needed to decode and listen to events.
🔧 Debug
advanced
2:00remaining
Why does this event listener code fail to log events?
The following code is intended to listen to a smart contract event but does not log anything when the event is emitted. What is the most likely cause?
Blockchain / Solidity
const contract = new ethers.Contract(contractAddress, abi, provider);

contract.once('MyEvent', (data) => {
  console.log('Event data:', data);
});

// Event 'MyEvent' is emitted multiple times after this code runs
AThe event name is case-sensitive and 'MyEvent' does not match the emitted event.
BThe contract ABI is missing the event definition, so no events are decoded.
CThe provider is not connected to the correct network.
DThe 'once' method listens only for the first event and ignores subsequent ones.
Attempts:
2 left
💡 Hint
Check the difference between 'on' and 'once' methods.
📝 Syntax
advanced
1:30remaining
Identify the syntax error in this event listener code
Which option contains the correct syntax to listen to a smart contract event named 'Approval' using ethers.js?
Acontract.on('Approval', (owner, spender, value) => { console.log(owner, spender, value); });
Bcontract.on('Approval', function owner, spender, value { console.log(owner, spender, value); });
Ccontract.on['Approval', (owner, spender, value) => { console.log(owner, spender, value); }];
Dcontract.on('Approval' (owner, spender, value) => { console.log(owner, spender, value); });
Attempts:
2 left
💡 Hint
Check the parentheses and brackets usage in function calls.
🚀 Application
expert
2:30remaining
How to efficiently update UI on multiple event emissions?
You have a frontend app listening to a 'NewBid' event emitted frequently by a smart contract. To avoid UI lag, which approach is best to update the UI efficiently?
AUpdate the UI immediately inside the event listener callback for every event.
BIgnore some events to reduce updates and only show the latest event.
CBatch event data in an array and update the UI periodically using a timer.
DUse synchronous blocking code inside the event listener to ensure order.
Attempts:
2 left
💡 Hint
Think about how to reduce frequent UI re-renders while keeping data fresh.