trace_replayTransaction
curl --request POST \
--url https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/ \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": [
"0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035",
[
"trace"
]
],
"id": 1
}
'import requests
url = "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload = {
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": ["0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035", ["trace"]],
"id": 1
}
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({
jsonrpc: '2.0',
method: 'trace_replayTransaction',
params: [
'0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035',
['trace']
],
id: 1
})
};
fetch('https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/', 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://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/",
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([
'jsonrpc' => '2.0',
'method' => 'trace_replayTransaction',
'params' => [
'0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035',
[
'trace'
]
],
'id' => 1
]),
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://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035\",\n [\n \"trace\"\n ]\n ],\n \"id\": 1\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://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035\",\n [\n \"trace\"\n ]\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
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 \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035\",\n [\n \"trace\"\n ]\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": {}
}Tempo node API
trace_replayTransaction | Tempo
Tempo API method that replays a specific transaction and returns detailed execution traces. trace_replayTransaction on Tempo via Chainstack.
POST
/
trace_replayTransaction
curl --request POST \
--url https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/ \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": [
"0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035",
[
"trace"
]
],
"id": 1
}
'import requests
url = "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload = {
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": ["0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035", ["trace"]],
"id": 1
}
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({
jsonrpc: '2.0',
method: 'trace_replayTransaction',
params: [
'0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035',
['trace']
],
id: 1
})
};
fetch('https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/', 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://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/",
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([
'jsonrpc' => '2.0',
'method' => 'trace_replayTransaction',
'params' => [
'0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035',
[
'trace'
]
],
'id' => 1
]),
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://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035\",\n [\n \"trace\"\n ]\n ],\n \"id\": 1\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://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035\",\n [\n \"trace\"\n ]\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
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 \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035\",\n [\n \"trace\"\n ]\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": {}
}Tempo API method that replays a specific transaction and returns detailed execution traces. This is useful for debugging transaction behavior with customizable trace options.
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
transactionHash— the hash of the transaction to replaytraceTypes— array of trace types to include:trace— basic execution tracevmTrace— full VM execution tracestateDiff— state changes
Response
result— trace result object:output— return data from the transactiontrace— array of trace objects (if requested)vmTrace— VM execution trace (if requested)stateDiff— state differences (if requested)
trace_replayTransaction code examples
const ethers = require('ethers');
const NODE_URL = "CHAINSTACK_NODE_URL";
const provider = new ethers.JsonRpcProvider(NODE_URL);
const replayTransaction = async (txHash) => {
// Replay with all trace types
const result = await provider.send("trace_replayTransaction", [
txHash,
["trace", "stateDiff"]
]);
console.log("Transaction Output:", result.output);
console.log("Traces:", result.trace?.length || 0);
if (result.trace) {
for (const trace of result.trace) {
const callType = trace.action.callType || trace.type;
const to = trace.action.to || "Contract Creation";
console.log(` ${callType}: ${trace.action.from} -> ${to}`);
}
}
if (result.stateDiff) {
console.log("\nState changes:");
for (const [address, diff] of Object.entries(result.stateDiff)) {
console.log(` ${address}:`);
if (diff.balance) {
console.log(` Balance: ${diff.balance['*']?.from || 'new'} -> ${diff.balance['*']?.to || diff.balance['+']}`);
}
}
}
};
replayTransaction("0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035");
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))
result = web3.provider.make_request("trace_replayTransaction", [
"0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035",
["trace", "stateDiff"]
])
trace_result = result['result']
print(f"Transaction Output: {trace_result['output']}")
print(f"Traces: {len(trace_result.get('trace', []))}")
for trace in trace_result.get('trace', []):
call_type = trace['action'].get('callType', trace['type'])
to = trace['action'].get('to', 'Contract Creation')
print(f" {call_type}: {trace['action']['from']} -> {to}")
if trace_result.get('stateDiff'):
print("\nState changes:")
for address, diff in trace_result['stateDiff'].items():
print(f" {address}")
curl -X POST "CHAINSTACK_NODE_URL" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": ["0xb3e821e696897b02283b7b2d602941b1d3cb08448d3a204bab05955215fc2035", ["trace", "stateDiff"]],
"id": 1
}'
Body
application/json
Last modified on June 22, 2026
Was this page helpful?
⌘I