In Ethers.js, you can listen for events emitted by a smart contract using the on method. This allows your application to react to specific events emitted by the contract, such as state changes or important actions.

Understanding Events in Smart Contracts

  • Events: Events are a way for smart contracts to communicate that something has happened on the blockchain. They are logged in the transaction receipt and can be listened to by applications.
  • Indexed Parameters: Events can have indexed parameters, which allow for efficient filtering of events when querying.

Setting Up Ethers.js

Before you can listen for events, ensure you have Ethers.js installed in your project. You can install it using npm:


npm install ethers

Sample Smart Contract


pragma solidity ^0.8.0;

contract SimpleStorage {
event ValueChanged(address indexed author, string oldValue, string newValue);
string private _value;

constructor(string memory initialValue) {
_value = initialValue;
emit ValueChanged(msg.sender, "", initialValue);
}

function setValue(string memory newValue) public {
emit ValueChanged(msg.sender, _value, newValue);
_value = newValue;
}

function getValue() public view returns (string memory) {
return _value;
}
}

Listening for Events

To listen for events emitted by the SimpleStorage contract, follow these steps:

  1. Connect to the Ethereum Network: Use a provider to connect to the Ethereum network.
  2. Instantiate the Contract: Create an instance of the contract using its address and ABI.
  3. Set Up the Listener: Use the on method to listen for the ValueChanged event.

Sample Code to Listen for Events


const { ethers } = require('ethers');

// Connect to the Ethereum network
const provider = new ethers.providers.JsonRpcProvider('https://your.ethereum.node');

// Contract ABI and address
const abi = [
"event ValueChanged(address indexed author, string oldValue, string newValue)",
"function setValue(string value)",
"function getValue() view returns (string)"
];
const contractAddress = '0xYourContractAddress';

// Create a contract instance
const contract = new ethers.Contract(contractAddress, abi, provider);

// Listen for the ValueChanged event
contract.on("ValueChanged", (author, oldValue, newValue) => {
console.log(`Value changed by ${author}: from "${oldValue}" to "${newValue}"`);
});

Conclusion

Listening for events in Ethers.js is a powerful way to interact with smart contracts. By setting up event listeners, your application can respond to changes in the blockchain state in real-time, enhancing user experience and functionality.