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",
{}
]
}
'import requests
url = "https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "debug_intermediateRoots",
"params": ["0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758", {}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
id: 1,
jsonrpc: '2.0',
method: 'debug_intermediateRoots',
params: ['0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758', {}]
})
};
fetch('https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'jsonrpc' => '2.0',
'method' => 'debug_intermediateRoots',
'params' => [
'0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758',
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_intermediateRoots\",\n \"params\": [\n \"0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758\",\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_intermediateRoots\",\n \"params\": [\n \"0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758\",\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_intermediateRoots\",\n \"params\": [\n \"0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758\",\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": [
"<string>"
]
}Arbitrum node API
debug_intermediateRoots | Arbitrum
Arbitrum API method that computes the intermediate state roots for a given block by re-executing all transactions. Arbitrum via Chainstack.
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",
{}
]
}
'import requests
url = "https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "debug_intermediateRoots",
"params": ["0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758", {}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
id: 1,
jsonrpc: '2.0',
method: 'debug_intermediateRoots',
params: ['0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758', {}]
})
};
fetch('https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'jsonrpc' => '2.0',
'method' => 'debug_intermediateRoots',
'params' => [
'0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758',
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_intermediateRoots\",\n \"params\": [\n \"0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758\",\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_intermediateRoots\",\n \"params\": [\n \"0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758\",\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_intermediateRoots\",\n \"params\": [\n \"0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758\",\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"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 your 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 to5s. 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");
from web3 import Web3
node_url = "YOUR_CHAINSTACK_ENDPOINT"
web3 = Web3(Web3.HTTPProvider(node_url))
block_hash = "0x5765eab677d93b81a1c29de804e115d0e4db8dd40e0deabcf187e4e0d047c758"
result = web3.provider.make_request('debug_intermediateRoots', [block_hash, {}])
print(result)
Use case
Thedebug_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
Last modified on June 22, 2026
Was this page helpful?