eth_getBlockReceipts | Ethereum

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

Ethereum API method that retrieves all transaction receipts for a given block. Transaction receipts contain information about the execution status of a transaction and can be useful for monitoring the status of transfers or contract execution on the blockchain.

📘

This method is available on both the Geth and Erigon clients.

👍

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

  • quantity or tag — the integer of a block encoded as hexadecimal or the string with:

    • latest — the most recent block in the blockchain and the current state of the blockchain at the most recent block. A chain reorganization is to be expected.

    • safe — the block that received justification from the beacon chain. Although this block could be involved in a chain reorganization, it would necessitate either a coordinated attack by the majority of validators or an instance of severe propagation latency.

    • finalized — the block accepted as canonical by more than 2/3 of the validators. A chain reorganization is extremely unlikely, and it would require at least 1/3 of the staked ETH to be burned.

    • earliest — the earliest available or genesis block

    • pending — the pending state and transactions block. The current state of transactions that have been broadcast to the network but have not yet been included in a block.

      📘

      See the default block parameter and How The Merge Impacts Ethereum’s Application Layer.

Response

  • result — an array of objects with the following fields:
    • Transaction receipt — the object with:
      • blockHash — the block hash. Identifies the block in which the transaction was included. This field is null for transactions that have not yet been included in a block.
      • blockNumber — the number of the block in which the transaction was included. This field is null for transactions that have not yet been included in a block.
      • contractAddress — the address of the contract created by the transaction if it was a contract creation transaction. Otherwise, the value is null.
      • cumulativeGasUsed — the total amount of gas used in the block until this transaction was executed.
      • effectiveGasPrice — the actual value deducted from the sender's account for this transaction.
      • from — the address of the sender who initiated the transaction.
      • gasUsed — the amount of gas used by this specific transaction alone.
      • logs — an array of log objects generated by this transaction, if any. Logs are generated by smart contracts.
      • logsBloom — the bloom filter used by light clients to quickly retrieve logs related to the transaction.
      • status — the success status of the transaction, represented as 1 for success or 0 for failure.
      • to — the address of the recipient of the transaction if it was a transaction to an address. For contract creation transactions, this field is null.
      • transactionHash — the hash that uniquely identifies the transaction.
      • transactionIndex — the index of the transaction within the block.
      • type — the type of the transaction. 0 indicates a regular transfer; 2 indicates a contract creation or smart contract function call.

eth_getBlockReceipts 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_getBlockReceipts = async () => {
  const BlockReceipts = await chainstack.send("eth_getBlockReceipts", [
    "latest",
  ]);
  console.log(BlockReceipts);
};

eth_getBlockReceipts();

/* 
eth_getBlockReceipts is not available in Web3.js
Create a custom class using Web3PluginBase to implement it
*/

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

// Define the ExtraMethods class
class ExtraMethods extends Web3PluginBase {
    pluginNamespace = 'extra';

    async getBlockReceipts(blockNumber) {
        return this.requestManager.send({
            method: 'eth_getBlockReceipts',
            params: [blockNumber],
        });
    }
}

web3.registerPlugin(new ExtraMethods());

// Function to get block receipts using the custom plugin
async function getBlockReceipts(blockId) {
    try {
        const receipts = await web3.extra.getBlockReceipts(blockId);
        console.log(receipts);
    } catch (error) {
        console.error("Error fetching block receipts:", error);
    }
}

// Call the function with "latest" block
getBlockReceipts("latest");
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3.HTTPProvider(node_url)

block_receipts = web3.make_request('eth_getBlockReceipts', ['latest'])
print(block_receipts)

Use case

The eth_getBlockReceipts allows you to retrieve the receipts for all transactions in a specific block. A practical use case can be to retrieve all of the logs emitted from the transactions in a block. The method returns an array of transaction receipts containing information about the transaction and any logs generated due to the transaction execution, so the logs can be isolated.

📘

Read Uncovering the power of eth_getBlockReceipts to learn more about transactions receipts and how to use the eth_getBlockReceipts method.

Here is an example of how to use eth_getBlockReceipts in ethers.js using the ChainstackProvider to extract all of the logs in a specific block and return them in an array:

const ethers = require("ethers");

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

async function retrieveTransactionLogs(blockNumber) {
  // Call the eth_getBlockReceipts method to retrieve the receipts for all transactions in the block
  let receipts = await chainstack.send("eth_getBlockReceipts", [blockNumber]);

  // Flatten the receipts array into a single array of logs
  let logs = receipts.flatMap((receipt) => receipt.logs);

  // Return the logs
  return logs;
}

// call retrieveTransactionLogs on the latest block of the chain
async function main() {
  const blockNumber = "latest";
  const logs = await retrieveTransactionLogs(blockNumber);
  console.log(logs);
}

main();

In this example, the retrieveTransactionLogs function takes a block identifier as an input and returns an array of logs. The function first calls the eth_getBlockReceipts method using the provider.send method and passes in the block identifier as an argument. The result is an array of receipts, then flattened into a single array of logs using the flatMap function.

Try the eth_getBlockReceipts RPC method yourself

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