debug_preimage
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_preimage",
"params": [
"0x0000000000000000000000000000000000000000000000000000000000000000"
]
}
'import requests
url = "https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "debug_preimage",
"params": ["0x0000000000000000000000000000000000000000000000000000000000000000"]
}
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_preimage',
params: ['0x0000000000000000000000000000000000000000000000000000000000000000']
})
};
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_preimage',
'params' => [
'0x0000000000000000000000000000000000000000000000000000000000000000'
]
]),
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_preimage\",\n \"params\": [\n \"0x0000000000000000000000000000000000000000000000000000000000000000\"\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_preimage\",\n \"params\": [\n \"0x0000000000000000000000000000000000000000000000000000000000000000\"\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_preimage\",\n \"params\": [\n \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": "<string>"
}Arbitrum node API
debug_preimage | Arbitrum
Arbitrum API method that returns the preimage for a given Keccak-256 hash. In Ethereum’s state trie, account addresses are stored as their Keccak-256 hashes.
POST
/
66f812de2a6724a75a51f60dd6f2a154
debug_preimage
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_preimage",
"params": [
"0x0000000000000000000000000000000000000000000000000000000000000000"
]
}
'import requests
url = "https://nd-954-882-037.p2pify.com/66f812de2a6724a75a51f60dd6f2a154"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "debug_preimage",
"params": ["0x0000000000000000000000000000000000000000000000000000000000000000"]
}
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_preimage',
params: ['0x0000000000000000000000000000000000000000000000000000000000000000']
})
};
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_preimage',
'params' => [
'0x0000000000000000000000000000000000000000000000000000000000000000'
]
]),
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_preimage\",\n \"params\": [\n \"0x0000000000000000000000000000000000000000000000000000000000000000\"\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_preimage\",\n \"params\": [\n \"0x0000000000000000000000000000000000000000000000000000000000000000\"\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_preimage\",\n \"params\": [\n \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": "<string>"
}Arbitrum API method that returns the preimage for a given Keccak-256 hash. In Ethereum’s state trie, account addresses are stored as their Keccak-256 hashes. This method allows retrieving the original data (preimage) that was hashed. The node must have preimage recording enabled for this method to return results.
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.Preimage recording must be enabled on the node (
--cache.preimages). If preimages are not stored, this method returns an error.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 Keccak-256 hash to look up the preimage for, encoded as a hex string.
Response
data— the raw preimage bytes as a hex string. Returns an error if the preimage is not found.
debug_preimage code examples
const ethers = require('ethers');
const NODE_URL = "YOUR_CHAINSTACK_ENDPOINT";
const provider = new ethers.JsonRpcProvider(NODE_URL);
const debugPreimage = async (hash) => {
const result = await provider.send("debug_preimage", [hash]);
console.log(result);
};
debugPreimage("0x0000000000000000000000000000000000000000000000000000000000000000");
from web3 import Web3
node_url = "YOUR_CHAINSTACK_ENDPOINT"
web3 = Web3(Web3.HTTPProvider(node_url))
hash_value = "0x0000000000000000000000000000000000000000000000000000000000000000"
result = web3.provider.make_request('debug_preimage', [hash_value])
print(result)
Use case
Thedebug_preimage method is useful for resolving Keccak-256 hashes back to their original values. In the state trie, account addresses and storage keys are stored as hashes. This method allows developers building state analysis tools to reverse-lookup hashes to their original addresses or data, which is essential for tools like state diff visualizers and trie explorers.Last modified on June 22, 2026
Was this page helpful?