An important a part of blockchain improvement revolves round interacting with and listening to decentralized networks. One of the vital environment friendly methods to take action is thru blockchain listeners that obtain alerts relating to sensible contract occasions in actual time. However how do you arrange blockchain listeners? One different is ethers.js, which is a distinguished JavaScript library making it extra accessible to work together with the Ethereum community. If you wish to be taught extra about how this library works, be a part of us on this tutorial as we illustrate methods to take heed to sensible contract occasions utilizing ethers.js!
Together with exhibiting you methods to take heed to sensible contract occasions utilizing ethers.js, the article initially covers the intricacies of each sensible contract occasions and this library. Nonetheless, if you’re already accustomed to these ideas, be happy to skip straight into the ”Take heed to Good Contract Occasions Utilizing Ethers.js” part. From there, we study the variations between working with ethers.js and the Moralis Web3 Streams API to arrange blockchain listeners. Moreover, the Streams API is considered one of a number of Web3 APIs featured by Moralis that may assist your improvement endeavors. Furthermore, if you wish to turn into a blockchain developer, we suggest taking a better have a look at different Moralis Web3 improvement instruments. As an example, try the NFT API permitting you to, for instance, get all transfers of an NFT with just a few strains of code!
Nonetheless, it doesn’t matter if you wish to arrange streams or have a basic curiosity in Web3 improvement; enroll with Moralis now to completely leverage the ability of the blockchain business!
Good Contract Occasions and Ethers.js
Earlier than exhibiting you methods to take heed to sensible contract occasions utilizing ethers.js, we are going to dedicate the next two sections to exploring the intricacies of sensible contract occasions and ethers.js. As such, when you already know what they entail, be happy to skip proper into the ”Take heed to Good Contract Occasions Utilizing Ethers.js” part. In any other case, be a part of us as we begin by answering the query, ”what are sensible contract occasions?”.
What are Good Contract Occasions?
All Web3 contracts emit so-called ”sensible contract occasions” when one thing related occurs inside them primarily based on their code. In brief, these occasions are a kind of sign emitted by sensible contracts to inform builders and software program programs that one thing significant has occurred. Furthermore, functions and different platforms use these alerts to speak.
Allow us to use the ERC-20 token commonplace for instance to make clear this additional. All sensible contracts implementing this commonplace mechanically emit a ”switch” occasion at any time when somebody trades a token. Furthermore, along with a notification, these occasions typically include extra particulars relating to the transactions.
As you may need already concluded, it’s important to have the ability to take heed to occasions like these in actual time when constructing Web3 tasks. With that stated, you require a seamless workflow for establishing blockchain listeners that may provide you with a warning and your tasks at any time when one thing related happens on-chain, and that is the place ethers.js enters the equation!
Exploring Ethers.js
Ethers.js is a blockchain JavaScript (JS) library launched in 2016. It is among the hottest open-source Ethereum JS libraries up to now, that includes thousands and thousands and thousands and thousands of downloads. Like standard programming libraries, ethers.js is a set of prewritten snippets of code that builders can use and reuse to carry out widespread capabilities. Nonetheless, in comparison with conventional libraries, ethers.js is Web3-based. As such, builders use this library to speak and work together with the Ethereum community extra seamlessly.

Ethers.js options 4 core modules: ”ethers.contract“, “ethers.utils“, “ethers.wallets“, and “ethers.supplier“. These 4 modules are on the very middle of the library’s software programming interface (API). Nonetheless, for extra detailed details about them and the library on the whole, try our article answering the query, ”what’s ethers.js?”.
Now, with this temporary overview of the intricacies of ethers.js, allow us to discover among the library’s most distinguished advantages within the following sub-section!
Advantages of Ethers.js
In an effort to higher perceive the utility of ethers.js and why you would possibly need to use the library, allow us to discover a few of its most distinguished advantages:
Safety – When working with ethers.js, you’ll be able to hold personal keys secure and safe.Dimension – Ethers.js is a small library, solely 88 KB compressed and 284 KB uncompressed. MIT Licence – Ethers.js is totally open-source, together with all dependencies.ENS – The library options Ethereum Title Service (ENS) assist. As such, ENS names are dealt with as first-class residents. Check Circumstances – Ethers.js supplies a major assortment of take a look at circumstances actively maintained and up to date.
The bullet factors above are solely 5 examples; there’s far more so that you can uncover! Nonetheless, with a extra profound understanding of ethers.js, the library’s advantages, and sensible contract occasions, we’ll check out the central a part of this tutorial, methods to take heed to sensible contract occasions utilizing ethers.js!
Take heed to Good Contract Occasions Utilizing Ethers.js
On this part, we’ll present you methods to take heed to sensible contract occasions utilizing ethers.js. Extra particularly, we are going to rapidly present you methods to arrange a blockchain listener for monitoring switch occasions of the USD coin (USDC) sensible contract. Nonetheless, earlier than dividing deeper into the central script, it is advisable cope with just a few stipulations!
To start with, it is advisable arrange a brand new NodeJS undertaking and create two recordsdata: ”abi.json” and ”.env”. To the ”abi.json” file, add the USDC sensible contract software binary interface (ABI). From there, it is advisable add the important thing of a sound node supplier to the ”.env” file. On this occasion, we are going to present you methods to take heed to sensible contract occasions utilizing ethers.js and Alchemy. So, add a brand new surroundings variable known as ”ALCHEMY_KEY” to the file and embrace your key.
For the reason that core focus of this text is on methods to take heed to sensible contract occasions utilizing ethers.js, we is not going to dive into any extra element on establishing the ”abi.json” and ”.env” recordsdata however moderately direct our consideration towards the script itself. Nonetheless, earlier than doing so, you will need to set up a few dependencies. To take action, open a brand new terminal and run the command under:
npm i ethers dotenv
The “index.js” File
When you find yourself achieved establishing the ”abi.json” and ”.env” recordsdata, the following step is to create an ”index.js” file, to which we are going to add the code for the blockchain listener. As such, with a brand new file at your disposal, the very first thing you need to add is the next snippet on the high of ”index.js”:
const ethers = require(“ethers”);
const ABI = require(“./abi.json”);
require(“dotenv”).config();
The code above specifies that ”index.js” makes use of ethers.js, imports the contract ABI, and supplies entry to the important thing from the ”.env” file. From there, you will need to create a brand new asynchronous operate known as ”getTransfers()”:
async operate getTransfer(){
const usdcAddress = “0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48”; ///USDC Contract
const supplier = new ethers.suppliers.WebSocketProvider(
`wss://eth-mainnet.g.alchemy.com/v2/${course of.env.ALCHEMY_KEY}`
);
const contract = new ethers.Contract(usdcAddress, ABI, supplier);
contract.on(“Switch”, (from, to, worth, occasion)=>{
let transferEvent ={
from: from,
to: to,
worth: worth,
eventData: occasion,
}
console.log(JSON.stringify(transferEvent, null, 4))
})
}
The operate above is comparatively simple; nonetheless, allow us to break it down from high to backside. To start with, the preliminary two strains throughout the operate’s curly brackets create two variables: ”usdcAddress” and ”supplier”.
To the previous, specify the contract handle that you simply want to monitor. For the latter, add the node supplier utilizing considered one of ethers.js’ modules and the important thing from the ”.env” file.
From there, you create a brand new ”contract” object by passing the ”usdcAddress”, ”ABI”, and ”supplier” variables as arguments when calling the ”ethers.Contract()” operate. You then use the ”contract” object to set the listener, specifying that it’s switch occasions that you’re concerned with.
Lastly, you guarantee that the outcomes are returned to the console. All in all, your ”index.js” file ought to now appear like this:
const ethers = require(“ethers”);
const ABI = require(“./abi.json”);
require(“dotenv”).config();
async operate getTransfer(){
const usdcAddress = “0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48”; ///USDC Contract
const supplier = new ethers.suppliers.WebSocketProvider(
`wss://eth-mainnet.g.alchemy.com/v2/${course of.env.ALCHEMY_KEY}`
);
const contract = new ethers.Contract(usdcAddress, ABI, supplier);
contract.on(“Switch”, (from, to, worth, occasion)=>{
let transferEvent ={
from: from,
to: to,
worth: worth,
eventData: occasion,
}
console.log(JSON.stringify(transferEvent, null, 4))
})
}
getTransfer()
Operating the Script
Now that you’ve accomplished all the script used to take heed to sensible contract occasions utilizing ethers.js, the very last thing remaining is operating the code. As such, open a brand new terminal, enter the command under, and hit enter:
node index.js
Operating this command will return new transactions related to the USDC sensible contract. To offer you an concept of what it could possibly appear like, you’ll discover a print display of an instance down under:

As you’ll be able to see, the ”getTransfers()” operate returns a bunch of data, such because the “to” and “from” addresses, occasion knowledge just like the block quantity, block hash, transaction index, and far more.
That’s it! You now know methods to take heed to sensible contract occasions utilizing ethers.js! Now, whereas ethers.js is a superb improvement device, there’s an alternate many builders have discovered to be far more useful. Thus, within the subsequent part, we are going to current an ethers.js different!
An Ethers.js Various
Despite the fact that ethers.js is a superb library and gear for establishing blockchain listeners, it’s all the time price wanting over different distinguished alternate options, and a tremendous instance is Moralis’ Streams API! With this software programming interface, you’ll be able to simply stream on-chain knowledge into the backend of your blockchain tasks utilizing Moralis webhooks!

What’s extra, with the accessibility of Moralis, you’ll be able to arrange streams or blockchain listeners in solely 5 easy steps:
Provide an handle Apply filters to specify once you need to obtain webhooks Choose the chain(s) you have an interest in monitoringAdd a webhook URLReceive webhooks
It doesn’t need to be extra difficult than that! Nonetheless, allow us to additionally intently study among the fundamental benefits of utilizing Moralis’ Web3 Streams API!
Benefits of Moralis’ Streams API
Moralis’ Streams API options many distinguished benefits, and you will discover 5 examples down under:
100% Reliability – When working with Moralis’ Streams API, you do not want to hassle with unreliable node suppliers. As an alternative, through the use of Moralis, you get 100% reliability. A number of Contracts – With Moralis’ Streams API, you’ll be able to create one blockchain listener for a number of completely different sensible contract addresses.Filters – Moralis’ Streams API is versatile, permitting you to arrange streams to obtain Web3 webhooks solely when sure circumstances are met. No Pointless Abstractions – Moralis eliminates redundant processes comparable to constructing abstractions. Save Time – You do not need to waste time constructing difficult knowledge pipelines, which lets you save time with regards to listening to blockchain networks.
That covers some examples of the benefits that come from working with Moralis. With a extra profound understanding of sensible contract occasions, ethers.js, and Moralis, it’s time to leap into an action-packed part. As we achieve this, we get to take a seat ringside and watch ethers.js vs Moralis Streams!
Ethers.js vs Moralis Streams When Listening to Good Contract Occasions
The choice to take heed to sensible contract occasions utilizing ethers.js is an effective begin. Nonetheless, as you discovered within the ”Benefits of Moralis’ Streams API” part, Moralis’ Streams API supplies quite a few advantages. So, how do ethers.js and Moralis Streams evaluate? Let’s have a better have a look at the next picture:

Within the desk above, you’ll be able to see a quick abstract of the similarities and variations between them. With a fast look, you instantly discover that Moralis supplies all the things that ethers.js has to supply and extra. This consists of 100% reliability, the choice to filter occasions, use a number of addresses, get parsed knowledge, and so forth. Consequently, you would possibly need to contemplate Moralis instead for listening to sensible contract occasions.
Nonetheless, you do not need to take our phrase for it! Within the following sub-section, we are going to rapidly present you methods to arrange the identical blockchain listener. However as an alternative of using ethers.js, we’ll now use Moralis. Doing so highlights the benefits of working with Moralis in comparison with ethers.js!
Take heed to Good Contact Occasions with Moralis
Yow will discover all the code for establishing the blockchain listener with Moralis down under:
const Moralis = require(“moralis”).default;
const Chains = require(“@moralisweb3/common-evm-utils”);
const EvmChain = Chains.EvmChain;
const ABI = require(“./abi.json”);
require(“dotenv”).config();
const choices = {
chains: [EvmChain.ETHEREUM],
description: “USDC Transfers 100k”,
tag: “usdcTransfers100k”,
includeContractLogs: true,
abi: ABI,
topic0: [“Transfer(address,address,uint256)”],
webhookUrl: “https://22be-2001-2003-f58b-b400-f167-f427-d7a8-f84e.ngrok.io/webhook”,
advancedOptions: [
{
topic0: “Transfer(address,address,uint256)”,
filter: {
gt : [“value”, “100000”+””.padEnd(6,”0″)]
}
}
]
};
Moralis.begin({
apiKey: course of.env.MORALIS_KEY ,
}).then(async () => {
const stream = await Moralis.Streams.add(choices);
const { id } = stream.toJSON();
await Moralis.Streams.addAddress({
id: id,
handle: [“0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48”]
})
});
To briefly summarize, within the code above, we create an ”choices” object with just a few parameters. Furthermore, it’s handed as an argument when calling the ”Moralis.Streams.add()” operate. So, what are the primary variations between the 2 choices?
A major distinction between ethers.js and the Moralis Streams choices is the ”Moralis.Streams.AddAddress()” operate. As you’ll be able to see from the code above, we go an ”handle” array as a parameter. On this instance, we solely embrace the USDC contract handle. Nonetheless, you’ll be able to embrace as many addresses as you prefer to. Consequently, you should use the identical blockchain listener for a number of contracts with Moralis. That is, sadly, not attainable when working with ethers.js, as it will require you to arrange new listeners for various addresses. One other distinguished instance is which you can add the ”advancedOptions” parameter within the ”choices” object to create filters!
Lastly, allow us to check out the response from operating the streams-based script (earlier than executing the code, set up the required Moralis dependencies, along with “ethers” and “dotenv” put in earlier than, by operating ”npm i moralis @moralisweb3/common-evm-utils” in a brand new terminal):

Within the picture above, we’ve included one of many responses despatched to our webhooks server. That is considered one of many transactions which might be a part of a extra intensive array. Nonetheless, because the screenshot signifies, the stream’s response comprises parsed knowledge, together with a transaction hash, contract handle, log index, and so forth.
Would you want a extra detailed breakdown of the variations between the 2 choices we’ve in contrast? If that’s the case, try our article on ethers.js vs Web3 streams. What’s extra, you may also be taught extra about creating streams by way of the next video from the Moralis YouTube channel:
Take heed to Good Contract Occasions Utilizing Ethers.js – Abstract
On this article, we taught you methods to take heed to the blockchain with ether.js. In doing so, you found and discovered methods to create a blockchain listener for monitoring switch occasions. Moreover, we did so with those related to the USDC contract. Now you can apply the identical ideas to every other contracts to obtain real-time alerts for future tasks!
Furthermore, when you discovered this text useful, try extra Moralis content material on the Web3 weblog. As an example, be taught the distinction between Web3.js vs ethers.js, or try our tutorial that additional examines an ethers.js instance.
What’s extra, if you’re severe about entering into blockchain improvement, enroll with Moralis straight away! You may create an account totally free; it solely takes just a few seconds, so you don’t have anything to lose!