eth_getBlockByHash | Ethereum

Recipes
🕵️
Identify if a block has been included in the main chain or was forked
Open Recipe

Ethereum API method that returns information about the block matching the given block hash. This method can be useful for analyzing a block and its transactions.

👍

Get you own node endpoint today

Start for free and get your app to production levels immediately. No credit card required.

You can sign up with your GitHub, X, Google, or Microsoft account.

Parameters

  • hash — the hash of the block
  • boolean — if true, it returns the detail of each transaction. If false, only the hashes of the transactions.

Response

  • object — block object, or null when no block was found.
    • number — the block number of the requested block, encoded as hexadecimal. null if the block is pending.
    • hash — the block hash of the requested block. null if the block pending.
    • parenthash — the hash of the previous block that was used to generate the current block. Also known as the 'parent block'.
    • nonce — the hash used to demonstrate proof-of-work. null if the block pending. It returns 0x0000000000000000 when the consensus is proof-of-stake.
    • sha3uncles — the hash of the list of uncles included in the block. It is used to identify the block uniquely and to verify the integrity of the block's data.
    • logsbloom — the bloom filter for the logs of the block, a data structure that allows for efficient membership testing of elements in a set, in this case, the logs included in the block. null if pending.
    • transactionsroot — the root of the transaction trie of the block. The transactionsRoot field allows Ethereum nodes to verify the integrity of the transactions in a block.
    • stateroot — the root of the final state trie of the block. The stateroot field is included in the block header and is used to verify the integrity of the state at the time the block was processed
    • receiptsroot — the root of the receipts trie of the block. A 32-byte hash of the root node of the receipts trie of all transactions in the block. It is used to verify the integrity of the receipts data for all transactions in the block.
    • miner — the address of the miner receiving the reward.
    • difficulty — a measure of how hard it is to find a valid block for the Ethereum blockchain. It is a number that increases as more miners join the network and more blocks are added to the chain. Encoded as hexadecimal.
    • totaldifficulty — the cumulative sum of the difficulty of all blocks that have been mined in the Ethereum network since the inception of the network. It measures the overall security and integrity of the Ethereum network.
    • extradata — the extra data included in a block by the miner who mined it. It often includes messages or other information related to the block.
    • size — the size of this block in bytes as an integer value, encoded as hexadecimal.
    • gaslimit — the maximum gas allowed in this block, encoded as hexadecimal.
    • gasused — the total used gas by all transactions in this block, encoded as hexadecimal.
    • timestamp — the Unix timestamp for when the block was collated.
    • transactions — array of transaction objects. See eth_getTransactionByHash for the exact shape.
    • uncles — the array of uncle hashes.

eth_getBlockByHash code examples


📘

Learn more about the ChainstackProvider in ethers.js: ethers ChainstackProvider Documentation.

const ethers = require("ethers");

// Create a ChainstackProvider instance for Ethereum mainnet
const chainstack = new ethers.ChainstackProvider("mainnet");

const eth_getBlockByHash = async () => {
  const blockByNumber = await chainstack.send("eth_getBlockByHash", [
    "0x5f9685380eb11efc8e965324a03ef0dac46f13d37e2dc0ac8763ce37c6fd6245",
    false,
  ]);
  console.log(blockByNumber);
};

eth_getBlockByHash();

const { Web3 } = require("web3");
const NODE_URL = "CHAINSTACK_NODE_URL";
const web3 = new Web3(NODE_URL);

async function getBlock(blockHash) {
    const block = await web3.eth.getBlock(blockHash, false);
    console.log(block);
  }
  
getBlock("0x5f9685380eb11efc8e965324a03ef0dac46f13d37e2dc0ac8763ce37c6fd6245")
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))

print(web3.eth.get_block("0x5f9685380eb11efc8e965324a03ef0dac46f13d37e2dc0ac8763ce37c6fd6245", False))

Use case

The eth_getBlockByHash is excellent for analytics purposes. For example, it can be used to quickly find out the hashes of transactions that create new smart contracts. The transactions field, an array of all the transactions within the block, is returned in the response. By iterating through this array and examining each transaction's to field, a user can determine which transactions in the block are creating new smart contracts.

The following example uses the web3.js library to create a function to extract this data:

const { Web3 } = require("web3");
const NODE_URL = "CHAINSTACK_NODE_URL"; // We used a sepolia node and block hash for this example
const web3 = new Web3(NODE_URL);

    // Retrieve the block using eth_getBlockByHash
    const block = await web3.eth.getBlock(blockHash, true);

    // Iterate over the transactions in the block
    for (const tx of block.transactions) {
      
      // Check if the transaction creates a contract (to field = null)
      if (tx.to === null) {
        
        // This is a contract creation transaction, print the hash of that transaction
        console.log(`This transaction deployed a smart contract: ${tx.hash}`);
      }
    }
  }
  
  // Use the block hash as parameter
  getSmartContractCreations("0xeca9d9d9b960893d4ef8e7d45e30b8d7a538a3c041a41da3c66c2e438b445940");

The previous example shows how the eth_getBlockByHash method might be used to know which transactions create a smart contract. When a new smart contract is created, the to field will be null. Running this function on a block hash with the transactions detail field set to true will inspect each transaction's to field. If the field is null, the transaction creates a smart contract, printing the transaction hash, which can then be used for further analysis.

Try the eth_getBlockByHash RPC method yourself

Language
Click Try It! to start a request and see the response here!