eth_getTransactionByBlockNumberAndIndex | Ethereum

Ethereum API method that retrieves information about a specific transaction based on the block number and the transaction index within the block. This information can be used to track transactions, debug issues, analyze data, and build decentralized applications on the Ethereum blockchain.

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.

  • quantity β€” the integer identifying the transaction index position within the block, encoded as hexadecimal.

Response

  • object β€” the transaction response object, or null if no transaction is found:
    • 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.
    • from β€” the address of the sender who initiated the transaction.
    • gas β€” the units of gas included in the transaction by the sender.
    • gasPrice β€” the price of gas in Wei included in the transaction by the sender.
    • maxFeePerGas β€” the maximum amount the sender of the transaction is willing to pay per unit of gas for the transaction to be executed.
    • maxPriorityFeePerGas β€” the maximum priority fee the sender of the transaction is willing to pay per unit of gas.
    • hash β€” the hash that uniquely identifies the transaction.
    • input β€” the optional input data sent with the transaction, usually used to interact with smart contracts.
    • nonce β€” a counter identifying the transaction's number sent by the sender wallet. It essentially identifies how many transactions an account has made. Used to ensure each transaction is executed only once.
    • 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.
    • transactionIndex β€” the index of the transaction within the block. It is null for transactions that have not yet been included in a block.
    • value β€” the value of the native token transferred along with the transaction, in Wei.
    • type β€” the type of the transaction. 0 indicates a regular transfer; 2 indicates a contract creation or smart contract function call.
    • accessList β€” a list of authorized addresses and storage keys the transaction plans to interact with.
    • v β€” the recovery parameter in the Ethereum Signature Algorithm (ECDSA).
    • r β€” the first component of the signature in the Ethereum Signature Algorithm (ECDSA).
    • s β€” the second component of the signature in the Ethereum Signature Algorithm (ECDSA).

eth_getTransactionByBlockNumberAndIndex code examples

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

async function getTransaction() {
  const transaction = await web3.eth.getTransactionFromBlock("16819758", 22);
  console.log(transaction);
}

getTransaction();
const ethers = require('ethers');
const NODE_URL = "CHAINSTACK_NODE_URL";
const provider = new ethers.JsonRpcProvider(NODE_URL);

const getTransaction = async (blocNumber, index) => {
    const transaction = await provider.send("eth_getTransactionByBlockNumberAndIndex", [blocNumber, index]);
    console.log(transaction);
  }
  
  getTransaction("latest", "0x1");
from web3 import Web3  
node_url = "CHAINSTACK_NODE_URL" 

web3 = Web3(Web3.HTTPProvider(node_url)) 
print(web3.eth.get_transaction_by_block(16819758, 22)) # Hex encoded parameters starting with "0x" are accepted as well.

Use case

The eth_getTransactionByBlockNumberAndIndex can be used to retrieve transaction details from a block. In the following example the getTypeInBlock function checks how many transactions exist in a block, then retrieves the type of each (type field), and displays it.

πŸ“˜

Note that there are simpler ways to get this information, and this is only a practical example of how to use eth_getTransactionByBlockNumberAndIndex, if the number of transactions in the block is already known, the first step can be skipped.

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

async function getTypeInBlock() {

  const latestBblock = await web3.eth.getBlockNumber();
  const block = await web3.eth.getBlock(latestBblock, false);
  const transactions = block.transactions;
  
  console.log(`The latest block is ${latestBblock} and contains ${transactions.length} transactions`);

  for (let i = 0; i < transactions.length; i++) {
    const transaction = await web3.eth.getTransactionFromBlock(latestBblock, i);
    console.log(`The type of transaction at index ${i}:`, transaction.type);
  }
}

getTypeInBlock();

The number of transactions in the block is determined using transactions.length and the total number of transactions logged to the console.

A for loop is then used to retrieve information about each transaction in the block. For each iteration of the loop, the code calls the web3.eth.getTransactionFromBlock method to retrieve information about the transaction at the current index. The type property of the returned transaction object is logged to the console to show the sender of the transaction.

Try the eth_getTransactionByBlockNumberAndIndex RPC method yourself

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