Skip to main content
POST
/
66f812de2a6724a75a51f60dd6f2a154
debug_intermediateRoots
curl --request POST \
  --url https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154 \
  --header 'Content-Type: application/json' \
  --data '
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "debug_intermediateRoots",
  "params": [
    "0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758",
    {}
  ]
}
'
{
  "jsonrpc": "<string>",
  "id": 123,
  "result": [
    "<string>"
  ]
}
Arbitrum API method that computes the intermediate state roots for a given block by re-executing all transactions. For each transaction in the block, it returns the state root after that transaction was applied. This provides a detailed view of how the state trie evolves within a single block.
Learn how to deploy a node with the debug and trace API methods enabled.
This method is available for post-Nitro blocks only (block 22,207,815 and later). For pre-Nitro blocks, use the arbtrace_* methods instead.
This method re-executes all transactions in the block, which can be resource-intensive for blocks with many transactions.
Get you own node endpoint todayStart 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 to compute intermediate roots for.
  • object — (optional) tracing configuration:
    • timeout — the timeout for the computation. Defaults to 5s. See Go time format for accepted values.
    • reexec — the number of blocks to re-execute to reconstruct historical state. Defaults to 128.

Response

  • result — an array of state root hashes (as hex strings), one per transaction in the block. Each root represents the state after the corresponding transaction was executed.

debug_intermediateRoots code examples

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

const debugIntermediateRoots = async (blockHash) => {
  const result = await provider.send("debug_intermediateRoots", [blockHash, {}]);
  console.log(result);
};

debugIntermediateRoots("0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758");

Use case

The debug_intermediateRoots method is useful for verifying state transitions within a block. By computing the intermediate state root after each transaction, developers can identify exactly which transaction caused a state change and verify the correctness of state transitions. This is particularly valuable for building state verification tools and debugging state-related issues in smart contracts.

Body

application/json
id
integer
default:1
jsonrpc
string
default:2.0
method
string
default:debug_intermediateRoots
params
(string | Tracing options · object)[]

The hash of the block.

Response

200 - application/json

Returns intermediate state roots for each transaction in the block.

jsonrpc
string
id
integer
result
string[]
Last modified on March 13, 2026