Web3

Ultimate Guide to getLogs and How to Use the getLogs Method

As we speak’s information will dive into the intricacies of ETH getLogs and present you ways to use this JSON-RPC technique in apply. Nevertheless, there are a number of methods to get Ethereum logs, and whereas our focus is on getLogs, we’re additionally going to examine this technique to Moralis’ getContractLogs() endpoint. For a fast begin, listed here are two examples of what each of them appear to be in motion:

{
  "jsonrpc": "2.0",
  "id": 0,
  "method": "eth_getLogs",
  "params": [
    {
      "fromBlock": "0x429d3b",
      "toBlock": "0x429d3b",
      "address": "0xb59f67a8bff5d8cd03f6ac17265c550ed8f33907",
      "topics": [
      "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
      "0x00000000000000000000000000b46c2526e227482e2ebb8f4c69e4674d262e75",
      "0x00000000000000000000000054a2d42a40f51259dedd1978f6c118a0f0eff078"
      ]
    }
  ]
}
{
  "id": 0,
  "jsonrpc": "2.0",
  "result": [
    {
      "address": "0xb59f67a8bff5d8cd03f6ac17265c550ed8f33907",
      "blockHash": "0x8243343df08b9751f5ca0c5f8c9c0460d8a9b6351066fae0acbd4d3e776de8bb",
      "blockNumber": "0x429d3b",
      "data": "0x000000000000000000000000000000000000000000000000000000012a05f200",
      "logIndex": "0x56",
      "removed": false,
      "topics": [
      "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
      "0x00000000000000000000000000b46c2526e227482e2ebb8f4c69e4674d262e75",
      "0x00000000000000000000000054a2d42a40f51259dedd1978f6c118a0f0eff078"
      ],
      "transactionHash": "0xab059a62e22e230fe0f56d8555340a29b2e9532360368f810595453f6fdd213b",
      "transactionIndex": "0xac"
    }
  ]
}
  • Instance of getContractLogs():
const response = await Moralis.EvmApi.occasions.getContractLogs({
  "chain": "0x1",
  "topic0": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
  "address": "0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB"
});
//…
  "result": {
    "transaction_hash": "0x2d30ca6f024dbc1307ac8a1a44ca27de6f797ec22ef20627a1307243b0ab7d09",
    "address": "0x057Ec652A4F150f7FF94f089A38008f49a0DF88e",
    "block_timestamp": "2021-04-02T10:07:54.000Z",
    "block_number": 12526958,
    "block_hash": "0x0372c302e3c52e8f2e15d155e2c545e6d802e479236564af052759253b20fd86",
    "data": "0x00000000000000000000000000000000000000000000000de05239bccd4d537400000000000000000000000000024dbc80a9f80e3d5fc0a0ee30e2693781a443",
    "topic0": "0x2caecd17d02f56fa897705dcc740da2d237c373f70686f4e0d9bd3bf0400ea7a",
    "topic1": "0x000000000000000000000000031002d15b0d0cd7c9129d6f644446368deae391",
    "topic2": "0x000000000000000000000000d25943be09f968ba740e0782a34e710100defae9",
    "transaction_index": 12,
    "log_index": 15
  }

If you want to be taught extra about getLogs and the getContractLogs() endpoint, learn on or take a look at our official eth_getLogs documentation! 

Overview

In as we speak’s article, we’ll begin by protecting the fundamentals and explaining the ins and outs of Ethereum logs. In doing so, we’re going to discover the central parts of all Ethereum logs and the place they’re saved. From there, we’ll dive into ETH getLogs and provide you with a sensible instance of how this technique works. We’ll then cowl some outstanding getLogs use instances to provide you with an concept of how to use Ethereum logs in your improvement endeavors. Lastly, to high issues off, we’ll dive into Moralis and the getContractLogs() endpoint, as that is an much more handy different for fetching Ethereum logs! 

Moreover, getting Ethereum logs is just one facet of blockchain improvement. So, if you happen to’re severe about constructing Web3 tasks, we urge you to take a look at extra improvement instruments, together with Moralis’ industry-leading Web3 API suite, to enable you to construct quicker and extra successfully. For instance, when you’ve got ambitions to construct NFT-based platforms, you possibly can reap the benefits of the Moralis NFT API. With this programming interface, you possibly can effortlessly get all NFT tokens owned by a consumer handle, get ERC-721 on-chain metadata, and many others., with solely single strains of code! 

When working with Moralis, it has by no means been simpler to construct Web3 tasks. So, earlier than you proceed, ensure that to enroll with Moralis. You’ll be able to create an account without spending a dime, and you’ll have the ability to instantly begin leveraging the full energy of blockchain expertise! 

Develop on Ethereum - Sign Up with Moralis and Use ETH getLogs

Nonetheless, with out additional ado, let’s leap straight into this text and discover the intricacies of Ethereum logs!

Understanding getLogs – What are Ethereum Logs?

Ethereum sensible contracts retailer data in two distinct methods: account storage and logs. The account storage accommodates all the knowledge defining the sensible contract state, whereas logs retailer data that isn’t required by the contract however could be accessed by different off-chain programs like internet purposes. 

However what precisely are Ethereum logs? And the way do they work?

Marketing Banner Graphical Art Image - What are ETH getLogs?

Most Ethereum sensible contracts emit occasions every time they execute. When this happens, the contracts moreover generate logs appertaining to the occasions in query. These logs present invaluable perception into every occasion, making them essential for Web3 improvement. 

Listed below are the main parts of an Ethereum occasion log: 

  • Occasion Signature: A novel identifier for the log’s occasion. It’s generated by hashing the occasion’s identify and its parameter sorts utilizing the Keccak-256 hash operate. 
  • Contract Handle: The handle of the sensible contract that emitted the occasion.
  • Matters: An array of listed parameters offering particulars concerning the occasion. Ethereum logs can have a most of 4 subjects. The primary one is required, and it at all times accommodates the occasion signature. The remaining three are elective and are usually used for indexing and offering quicker lookup occasions. 
  • Knowledge: An infinite discipline for encoded hex knowledge related to the occasion. If the data doesn’t get listed into the subjects array, it can, by default, robotically find yourself in the knowledge discipline. The info discipline can include any knowledge kind, together with strings, integers, and arrays.
  • Block Quantity: The variety of blocks in the blockchain the place the occasion was triggered.
  • Transaction Hash: The hash of the transaction that triggered the occasion.

If you’d like to dive deeper into this matter, take a look at our article on Ethereum logs and occasions! 

The place are Ethereum Logs Saved? 

Each time Ethereum sensible contracts emit occasions, the logs are written and saved in so-called transaction receipts. Every transaction has just one receipt, and as well as to an Ethereum occasion log, it additionally consists of different knowledge like standing, gasoline used for the transaction, log blooms, and many others. 

Now, with a quick overview of Ethereum logs and the place they’re saved, let’s take a better have a look at how one can purchase them! 

What’s ETH getLogs?

ETH getLogs is the gateway to Ethereum occasions, and it’s a JSON-RPC technique returning an array of all logs matching a specified filter. Using eth_getLogs performs an integral function in the blockchain {industry}, empowering builders by offering a invaluable instrument for monitoring and analyzing occasions that happen on the Ethereum blockchain. 

Ethereum Logo with Title in Black

With this technique, you get a seamless means to entry data similar to the subjects and knowledge of Ethereum logs. As you possibly can think about, that is very important data when constructing decentralized purposes (dapps) interacting with sensible contracts. 

To get a extra in-depth understanding of the eth_getLogs technique, let’s have a look at a sensible instance in the subsequent part! 

Instance: How to Use ETH getLogs Throughout Ethereum Improvement

On this part, we’ll cowl a quick instance the place we make an eth_getLogs request for a hypothetical sensible contract. The sensible contract has a simple switch occasion that appears like this: Switch(handle,handle,unit256). Right here’s an instance of what the request may appear to be: 

{
  "jsonrpc": "2.0",
  "id": 0,
  "method": "eth_getLogs",
  "params": [
    {
      "fromBlock": "0x429d3b",
      "toBlock": "0x429d3b",
      "address": "0xb59f67a8bff5d8cd03f6ac17265c550ed8f33907",
      "topics": [
      "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
      "0x00000000000000000000000000b46c2526e227482e2ebb8f4c69e4674d262e75",
      "0x00000000000000000000000054a2d42a40f51259dedd1978f6c118a0f0eff078"
      ]
    }
  ]
}

In the code above, we make an eth_getLogs request with 4 parameters: fromBlock, toBlock, handle, and subjects. The fromBlock and toBlock parameters specify the blocks we would like to limit our question to; in the meantime, handle specifies the handle of the sensible contract we would like to get the log for. 

The subjects array, on this case, accommodates three parts. The primary one is the occasion signature of the sensible contract’s switch occasion. The second and third parts specify two addresses, and we’re particularly querying for switch occasions between them. 

Now, let’s take a better have a look at the response of our eth_getLogs request: 

{
  "id": 0,
  "jsonrpc": "2.0",
  "result": [
    {
      "address": "0xb59f67a8bff5d8cd03f6ac17265c550ed8f33907",
      "blockHash": "0x8243343df08b9751f5ca0c5f8c9c0460d8a9b6351066fae0acbd4d3e776de8bb",
      "blockNumber": "0x429d3b",
      "data": "0x000000000000000000000000000000000000000000000000000000012a05f200",
      "logIndex": "0x56",
      "removed": false,
      "topics": [
      "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
      "0x00000000000000000000000000b46c2526e227482e2ebb8f4c69e4674d262e75",
      "0x00000000000000000000000054a2d42a40f51259dedd1978f6c118a0f0eff078"
      ],
      "transactionHash": "0xab059a62e22e230fe0f56d8555340a29b2e9532360368f810595453f6fdd213b",
      "transactionIndex": "0xac"
    }
  ]
}

As you possibly can see, the response offers a whole lot of data. Nevertheless, on this case, we’re primarily all for the subjects and knowledge fields. As you’ll rapidly discover, the subjects array stays the identical as in our eth_getLogs request. Consequently, the first matter is the occasion signature, whereas the remaining two are the from and to addresses of the switch. 

The opposite discipline of curiosity is knowledge, which accommodates all the extra data that hasn’t been listed. On this case, it’s the uint256 parameter of the occasion, and it represents the transaction’s switch quantity.

You’ll be able to be taught extra about every contract and what the knowledge in the response means by learning the contract’s ABI. As an illustration, that is what the switch occasion ABI reference seems to be like for our instance contract:

{
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },

That’s it! This covers our easy instance of how to use getLogs throughout Ethereum improvement! 

Use Circumstances for ETH getLogs 

Now, with an summary of Ethereum logs and how the ETH getLogs technique works, let’s take a better have a look at what it’s used for in Web3 improvement. There are a number of use instances for the Ethereum getLogs technique, and we received’t have time to cowl all of them on this tutorial. Subsequently, we’ll slim it down to the following three examples:

  • Asynchronous Triggers: When constructing Web3 tasks, your platforms typically want to monitor related Ethereum sensible contract occasions. Through the use of the getLogs technique, you possibly can leverage Ethereum logs as a type of asynchronous triggers containing knowledge. This may permit your dapps to work together with sensible contracts to show sure messages, carry out actions, or every other related duties. 
  • Debugging: The ETH getLogs technique can be utilized for debugging sensible contracts. As an illustration, if a sensible contract isn’t working as supposed, you possibly can leverage the getLogs technique to retrieve the occasions and logs emitted by the contract to determine why the difficulty is happening. 
Example Contract Using the getLogs Method for Ethereum
  • Analytics: You too can leverage the ETH getLogs technique to get and analyze sensible contract knowledge. An instance right here is that you should utilize getLogs to analyze the quantity of trades on a DEX like Uniswap. 

Nevertheless, the three use instances above are just some outstanding examples, and you are able to do much more with getLogs!

An Ethereum getLogs Different 

Considered one of the drawbacks of the ETH getLogs technique is that it requires sophisticated and detailed setups with JSON RPC calls, which may develop into fairly complicated. As such, on this part, we’ll discover Moralis and one among its well-liked APIs from its Web3 knowledge API suite, the Block API – a extra handy different to getLogs

Moralis  - A Superior ETH getLogs Alternative

With the Moralis Block API, you possibly can seamlessly retrieve and analyze Ethereum occasion logs with a single line of code. The getContractLogs() endpoint stands out as a trademark of comfort, providing you with, as a developer, a simpler means to entry Ethereum logs. 

For instance the accessibility of this instrument, we’ll present a three-step tutorial on how to get Ethereum logs: 

1. Get a Moralis API Key
2. Write a Script
3. Execute the Code

Nevertheless, you will need to deal with a number of conditions earlier than you possibly can proceed!

Conditions 

On this transient tutorial, we’ll present you ways to get Ethereum occasion logs utilizing JavaScript. As such, you want to have the following prepared earlier than you possibly can proceed: 

Step 1: Get a Moralis API Key 

To have the ability to name the getContractLogs() endpoint, you want a Moralis API key. As such, if you happen to don’t have already got one, create your Moralis account instantly by clicking the ”Begin for Free” button at the high proper: 

getLogs Tutorial - Start for Free Button

After getting a Moralis account, you could find your key by navigating to the ”Settings” tab and scrolling down to the ”Secrets and techniques” part: 

Copying API Key on the User Dashboard

Go forward and copy your API key, as you’ll want it in the subsequent part. 

Step 2: Write a Script 

Begin by organising a brand new undertaking and set up the Moralis SDK by working the following terminal command in the root folder: 

npm set up moralis @moralisweb3/common-evm-utils

Subsequent, create a brand new ”index.js” file and add the following code: 

const Moralis = require("moralis").default;
const { EvmChain } = require("@moralisweb3/common-evm-utils");

const runApp = async () => {
  await Moralis.begin({
    apiKey: "YOUR_API_KEY",
    // ...and every other configuration
  });

  const handle = "0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB";

  const chain = EvmChain.ETHEREUM;

  const topic0 = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"

  const response = await Moralis.EvmApi.occasions.getContractLogs({
    handle,
    chain,
    topic0,
  });

  console.log(response.toJSON());
};

runApp();

From right here, add the API key you copied in the earlier step by changing YOUR_API_KEY

Code editor interface, showing where to paste the API key

You’ll be able to then configure the chain, handle, and topic0 variables to suit your question. On this case, we merely embrace the first matter, which, as you may bear in mind, is the occasion signature:

Configuring the chain, address, and topic0 variables to fit query for ETH getLogs

We then take chain, handle, and topic0, and cross them as parameters when calling the getContractLogs() endpoint: 

Chain, address, and topic0 parameters for the getLogs ETH method

That’s it for the code; you’re now prepared to execute the script.

Step 3: Execute the Code 

To run the code, merely open a brand new terminal, cd into the undertaking’s root folder, and run the following command: 

node index.js

In return, you’ll get all Ethereum logs based mostly in your request. In our case, the response will look one thing like this: 

//…
  "result": {
    "transaction_hash": "0x2d30ca6f024dbc1307ac8a1a44ca27de6f797ec22ef20627a1307243b0ab7d09",
    "address": "0x057Ec652A4F150f7FF94f089A38008f49a0DF88e",
    "block_timestamp": "2021-04-02T10:07:54.000Z",
    "block_number": 12526958,
    "block_hash": "0x0372c302e3c52e8f2e15d155e2c545e6d802e479236564af052759253b20fd86",
    "data": "0x00000000000000000000000000000000000000000000000de05239bccd4d537400000000000000000000000000024dbc80a9f80e3d5fc0a0ee30e2693781a443",
    "topic0": "0x2caecd17d02f56fa897705dcc740da2d237c373f70686f4e0d9bd3bf0400ea7a",
    "topic1": "0x000000000000000000000000031002d15b0d0cd7c9129d6f644446368deae391",
    "topic2": "0x000000000000000000000000d25943be09f968ba740e0782a34e710100defae9",
    "transaction_index": 12,
    "log_index": 15
  }
//…

Congratulations! That’s how straightforward it’s to get Ethereum occasion logs when working with Moralis and the Block API! 

Leveraging Morails and the getContractLogs() endpoint not solely simplifies the strategy of getting Ethereum logs considerably but additionally enhances effectivity, enabling you to concentrate on constructing the finest dapps attainable! 

Abstract: What are ETH getLogs? 

In as we speak’s article, we kicked issues off by exploring the ins and outs of Ethereum logs. In doing so, we discovered that every log has the following core parts:

  • Occasion Signature
  • Contract Handle
  • Matters
  • Knowledge
  • Block Quantity
  • Transaction Hash

From there, we confirmed you ways to get Ethereum logs utilizing the Web3 get occasion logs technique: getLogs. As such, when you’ve got adopted alongside this far, you now understand how the technique works and can be ready to combine Ethereum occasion logs knowledge into your future tasks very quickly! 

Additionally, as well as to exhibiting you ways getLogs works, we supplied you with an alternate in the type of Moralis’ getContractLogs() endpoint, which is an much more handy means to get Ethereum logs. The truth is, we may fetch the knowledge we wanted in three easy steps: 

1. Get a Moralis API Key
2. Write a Script
3. Execute the Code

If you happen to discovered this text fascinating, take into account trying out extra guides and tutorials right here on the Moralis Web3 weblog. As an illustration, learn the way to test pockets exercise, examine account abstraction, or discover the #1 crypto Market Knowledge API!

Additionally, earlier than you go, bear in mind to enroll with Moralis. You’ll be able to create an account fully free and begin leveraging the full energy of Web3 expertise instantly. So, you don’t have anything to lose! 

DailyBlockchain.News Admin

Our Mission is to bridge the knowledge gap and foster an informed blockchain community by presenting clear, concise, and reliable information every single day. Join us on this exciting journey into the future of finance, technology, and beyond. Whether you’re a blockchain novice or an enthusiast, DailyBlockchain.news is here for you.
Back to top button