trace_block
curl --request POST \
--url https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "trace_block",
"params": [
"0x3480c62"
]
}
'import requests
url = "https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "trace_block",
"params": ["0x3480c62"]
}
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: 'trace_block', params: ['0x3480c62']})
};
fetch('https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/', 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://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/",
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' => 'trace_block',
'params' => [
'0x3480c62'
]
]),
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://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_block\",\n \"params\": [\n \"0x3480c62\"\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://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_block\",\n \"params\": [\n \"0x3480c62\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/")
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\": \"trace_block\",\n \"params\": [\n \"0x3480c62\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"action": {
"from": "0x19d7cf8ea0ce468417d1eda365a222a9dcbc7d27",
"callType": "call",
"gas": "0x8d1c0",
"input": "0xb61d27f60000000000000000000000001ff9c167b50d05910ffdadb82d3d2da4508330ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040a617bee00000000000000000000000000000000000000000000000000000000",
"to": "0xd011948bd0d6d433d4ba6df9dc44eb9a2bfa555f",
"value": "0x0"
},
"blockHash": "0xa86891cc8ae2e3efe67b21e24f8f852e76a0875892e9e8c9a4c77aab8e2761cc",
"blockNumber": 55053410,
"error": "Reverted",
"result": {
"gasUsed": "0x6f50",
"output": "0x4e487b710000000000000000000000000000000000000000000000000000000000000012"
},
"subtraces": 1,
"traceAddress": [],
"transactionHash": "0xfc48f7c70e8ffaa46b1110dc43f32e90f65434a0949edab384d066c820c57ee2",
"transactionPosition": 0,
"type": "call"
},
{
"action": {
"from": "0xd011948bd0d6d433d4ba6df9dc44eb9a2bfa555f",
"callType": "delegatecall",
"gas": "0x89bee",
"input": "0xb61d27f60000000000000000000000001ff9c167b50d05910ffdadb82d3d2da4508330ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040a617bee00000000000000000000000000000000000000000000000000000000",
"to": "0xd206ac7fef53d83ed4563e770b28dba90d0d9ec8",
"value": "0x0"
},
"blockHash": "0xa86891cc8ae2e3efe67b21e24f8f852e76a0875892e9e8c9a4c77aab8e2761cc",
"blockNumber": 55053410,
"error": "Reverted",
"result": {
"gasUsed": "0x5c52",
"output": "0x4e487b710000000000000000000000000000000000000000000000000000000000000012"
},
"subtraces": 2,
"traceAddress": [
0
],
"transactionHash": "0xfc48f7c70e8ffaa46b1110dc43f32e90f65434a0949edab384d066c820c57ee2",
"transactionPosition": 0,
"type": "call"
},
{
"action": {
"from": "0xd011948bd0d6d433d4ba6df9dc44eb9a2bfa555f",
"callType": "staticcall",
"gas": "0x7530",
"input": "0x01ffc9a701ffc9a700000000000000000000000000000000000000000000000000000000",
"to": "0x1ff9c167b50d05910ffdadb82d3d2da4508330ca",
"value": "0x0"
},
"blockHash": "0xa86891cc8ae2e3efe67b21e24f8f852e76a0875892e9e8c9a4c77aab8e2761cc",
"blockNumber": 55053410,
"result": {
"gasUsed": "0xf1",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [
0,
0
],
"transactionHash": "0xfc48f7c70e8ffaa46b1110dc43f32e90f65434a0949edab384d066c820c57ee2",
"transactionPosition": 0,
"type": "call"
},
{
"action": {
"from": "0xd011948bd0d6d433d4ba6df9dc44eb9a2bfa555f",
"callType": "call",
"gas": "0x82a56",
"input": "0x0a617bee",
"to": "0x1ff9c167b50d05910ffdadb82d3d2da4508330ca",
"value": "0x0"
},
"blockHash": "0xa86891cc8ae2e3efe67b21e24f8f852e76a0875892e9e8c9a4c77aab8e2761cc",
"blockNumber": 55053410,
"error": "Reverted",
"result": {
"gasUsed": "0xb84",
"output": "0x4e487b710000000000000000000000000000000000000000000000000000000000000012"
},
"subtraces": 0,
"traceAddress": [
0,
1
],
"transactionHash": "0xfc48f7c70e8ffaa46b1110dc43f32e90f65434a0949edab384d066c820c57ee2",
"transactionPosition": 0,
"type": "call"
}
]
}Arc node API
trace_block | Arc
Arc API method that returns execution traces for all transactions in a block. Reference for trace_block on Arc via Chainstack.
POST
/
trace_block
curl --request POST \
--url https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "trace_block",
"params": [
"0x3480c62"
]
}
'import requests
url = "https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "trace_block",
"params": ["0x3480c62"]
}
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: 'trace_block', params: ['0x3480c62']})
};
fetch('https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/', 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://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/",
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' => 'trace_block',
'params' => [
'0x3480c62'
]
]),
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://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_block\",\n \"params\": [\n \"0x3480c62\"\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://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_block\",\n \"params\": [\n \"0x3480c62\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/")
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\": \"trace_block\",\n \"params\": [\n \"0x3480c62\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"action": {
"from": "0x19d7cf8ea0ce468417d1eda365a222a9dcbc7d27",
"callType": "call",
"gas": "0x8d1c0",
"input": "0xb61d27f60000000000000000000000001ff9c167b50d05910ffdadb82d3d2da4508330ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040a617bee00000000000000000000000000000000000000000000000000000000",
"to": "0xd011948bd0d6d433d4ba6df9dc44eb9a2bfa555f",
"value": "0x0"
},
"blockHash": "0xa86891cc8ae2e3efe67b21e24f8f852e76a0875892e9e8c9a4c77aab8e2761cc",
"blockNumber": 55053410,
"error": "Reverted",
"result": {
"gasUsed": "0x6f50",
"output": "0x4e487b710000000000000000000000000000000000000000000000000000000000000012"
},
"subtraces": 1,
"traceAddress": [],
"transactionHash": "0xfc48f7c70e8ffaa46b1110dc43f32e90f65434a0949edab384d066c820c57ee2",
"transactionPosition": 0,
"type": "call"
},
{
"action": {
"from": "0xd011948bd0d6d433d4ba6df9dc44eb9a2bfa555f",
"callType": "delegatecall",
"gas": "0x89bee",
"input": "0xb61d27f60000000000000000000000001ff9c167b50d05910ffdadb82d3d2da4508330ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040a617bee00000000000000000000000000000000000000000000000000000000",
"to": "0xd206ac7fef53d83ed4563e770b28dba90d0d9ec8",
"value": "0x0"
},
"blockHash": "0xa86891cc8ae2e3efe67b21e24f8f852e76a0875892e9e8c9a4c77aab8e2761cc",
"blockNumber": 55053410,
"error": "Reverted",
"result": {
"gasUsed": "0x5c52",
"output": "0x4e487b710000000000000000000000000000000000000000000000000000000000000012"
},
"subtraces": 2,
"traceAddress": [
0
],
"transactionHash": "0xfc48f7c70e8ffaa46b1110dc43f32e90f65434a0949edab384d066c820c57ee2",
"transactionPosition": 0,
"type": "call"
},
{
"action": {
"from": "0xd011948bd0d6d433d4ba6df9dc44eb9a2bfa555f",
"callType": "staticcall",
"gas": "0x7530",
"input": "0x01ffc9a701ffc9a700000000000000000000000000000000000000000000000000000000",
"to": "0x1ff9c167b50d05910ffdadb82d3d2da4508330ca",
"value": "0x0"
},
"blockHash": "0xa86891cc8ae2e3efe67b21e24f8f852e76a0875892e9e8c9a4c77aab8e2761cc",
"blockNumber": 55053410,
"result": {
"gasUsed": "0xf1",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [
0,
0
],
"transactionHash": "0xfc48f7c70e8ffaa46b1110dc43f32e90f65434a0949edab384d066c820c57ee2",
"transactionPosition": 0,
"type": "call"
},
{
"action": {
"from": "0xd011948bd0d6d433d4ba6df9dc44eb9a2bfa555f",
"callType": "call",
"gas": "0x82a56",
"input": "0x0a617bee",
"to": "0x1ff9c167b50d05910ffdadb82d3d2da4508330ca",
"value": "0x0"
},
"blockHash": "0xa86891cc8ae2e3efe67b21e24f8f852e76a0875892e9e8c9a4c77aab8e2761cc",
"blockNumber": 55053410,
"error": "Reverted",
"result": {
"gasUsed": "0xb84",
"output": "0x4e487b710000000000000000000000000000000000000000000000000000000000000012"
},
"subtraces": 0,
"traceAddress": [
0,
1
],
"transactionHash": "0xfc48f7c70e8ffaa46b1110dc43f32e90f65434a0949edab384d066c820c57ee2",
"transactionPosition": 0,
"type": "call"
}
]
}Arc API method that returns execution traces for all transactions in a block. This provides detailed call-level traces using the Parity/OpenEthereum trace format.
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
blockParameter— the block number (hex) or tag (latest,earliest,pending)
Response
result— array of trace objects for all transactions in the block:action— the action object:from— sender addressto— recipient addresscallType— type of call (call, delegatecall, staticcall, etc.)gas— gas providedinput— call datavalue— value transferred
blockHash— hash of the blockblockNumber— block numberresult— the result object:gasUsed— gas consumedoutput— return data
subtraces— number of child tracestraceAddress— position in the trace treetransactionHash— hash of the transactiontransactionPosition— index of the transaction in the blocktype— trace type (call, create, suicide, reward)
trace_block code examples
const ethers = require('ethers');
const NODE_URL = "CHAINSTACK_NODE_URL";
const provider = new ethers.JsonRpcProvider(NODE_URL);
const traceBlock = async (blockNumber) => {
const traces = await provider.send("trace_block", [blockNumber]);
console.log(`Block has ${traces.length} traces`);
// Group traces by transaction
const txTraces = {};
for (const trace of traces) {
const txHash = trace.transactionHash;
if (!txTraces[txHash]) {
txTraces[txHash] = [];
}
txTraces[txHash].push(trace);
}
console.log(`Across ${Object.keys(txTraces).length} transactions`);
for (const [txHash, txTrace] of Object.entries(txTraces)) {
console.log(`\nTx: ${txHash}`);
for (const trace of txTrace) {
const indent = " ".repeat(trace.traceAddress.length);
console.log(`${indent}${trace.action.callType}: ${trace.action.from} -> ${trace.action.to}`);
}
}
};
traceBlock("latest");
from web3 import Web3
from collections import defaultdict
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))
result = web3.provider.make_request("trace_block", ["latest"])
traces = result['result']
print(f"Block has {len(traces)} traces")
# Group traces by transaction
tx_traces = defaultdict(list)
for trace in traces:
tx_hash = trace['transactionHash']
tx_traces[tx_hash].append(trace)
print(f"Across {len(tx_traces)} transactions")
for tx_hash, tx_trace in tx_traces.items():
print(f"\nTx: {tx_hash}")
for trace in tx_trace:
indent = " " * len(trace['traceAddress'])
call_type = trace['action'].get('callType', trace['type'])
from_addr = trace['action']['from']
to_addr = trace['action'].get('to', 'Contract Creation')
print(f"{indent}{call_type}: {from_addr} -> {to_addr}")
curl -X POST "CHAINSTACK_NODE_URL" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "trace_block",
"params": ["latest"],
"id": 1
}'
Last modified on August 3, 2026
Was this page helpful?
⌘I