trace_callMany
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "trace_callMany",
"params": [
[
[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0xde0b6b3a7640000",
"data": "0x"
},
[
"trace"
]
],
[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c",
"gas": "0x5208",
"gasPrice": "0x9184e72a000",
"value": "0x1bc16d674ec80000",
"data": "0x"
},
[
"trace"
]
]
],
"latest"
],
"id": 1
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload = {
"jsonrpc": "2.0",
"method": "trace_callMany",
"params": [[[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0xde0b6b3a7640000",
"data": "0x"
},
["trace"]
], [
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c",
"gas": "0x5208",
"gasPrice": "0x9184e72a000",
"value": "0x1bc16d674ec80000",
"data": "0x"
},
["trace"]
]], "latest"],
"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_callMany',
params: [
[
[
{
from: '0x69835D480110e4919B7899f465aAB101e21c8A87',
to: '0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5',
gas: '0x76c0',
gasPrice: '0x9184e72a000',
value: '0xde0b6b3a7640000',
data: '0x'
},
['trace']
],
[
{
from: '0x69835D480110e4919B7899f465aAB101e21c8A87',
to: '0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c',
gas: '0x5208',
gasPrice: '0x9184e72a000',
value: '0x1bc16d674ec80000',
data: '0x'
},
['trace']
]
],
'latest'
],
id: 1
})
};
fetch('https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm', 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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm",
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_callMany',
'params' => [
[
[
[
'from' => '0x69835D480110e4919B7899f465aAB101e21c8A87',
'to' => '0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5',
'gas' => '0x76c0',
'gasPrice' => '0x9184e72a000',
'value' => '0xde0b6b3a7640000',
'data' => '0x'
],
[
'trace'
]
],
[
[
'from' => '0x69835D480110e4919B7899f465aAB101e21c8A87',
'to' => '0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c',
'gas' => '0x5208',
'gasPrice' => '0x9184e72a000',
'value' => '0x1bc16d674ec80000',
'data' => '0x'
],
[
'trace'
]
]
],
'latest'
],
'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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_callMany\",\n \"params\": [\n [\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5\",\n \"gas\": \"0x76c0\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0xde0b6b3a7640000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ],\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c\",\n \"gas\": \"0x5208\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0x1bc16d674ec80000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ]\n ],\n \"latest\"\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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_callMany\",\n \"params\": [\n [\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5\",\n \"gas\": \"0x76c0\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0xde0b6b3a7640000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ],\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c\",\n \"gas\": \"0x5208\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0x1bc16d674ec80000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ]\n ],\n \"latest\"\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm")
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_callMany\",\n \"params\": [\n [\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5\",\n \"gas\": \"0x76c0\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0xde0b6b3a7640000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ],\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c\",\n \"gas\": \"0x5208\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0x1bc16d674ec80000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ]\n ],\n \"latest\"\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": [
[
{
"action": {
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
"value": "0xde0b6b3a7640000",
"gas": "0x76c0",
"input": "0x",
"callType": "call"
},
"result": {
"gasUsed": "0x5208",
"output": "0x"
},
"traceAddress": [],
"type": "call"
}
]
]
}Hyperliquid node API
trace_callMany | Hyperliquid EVM
The trace_callMany JSON-RPC method executes multiple calls and returns trace information for each call. Hyperliquid EVM via Chainstack.
POST
/
evm
trace_callMany
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "trace_callMany",
"params": [
[
[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0xde0b6b3a7640000",
"data": "0x"
},
[
"trace"
]
],
[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c",
"gas": "0x5208",
"gasPrice": "0x9184e72a000",
"value": "0x1bc16d674ec80000",
"data": "0x"
},
[
"trace"
]
]
],
"latest"
],
"id": 1
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload = {
"jsonrpc": "2.0",
"method": "trace_callMany",
"params": [[[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0xde0b6b3a7640000",
"data": "0x"
},
["trace"]
], [
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c",
"gas": "0x5208",
"gasPrice": "0x9184e72a000",
"value": "0x1bc16d674ec80000",
"data": "0x"
},
["trace"]
]], "latest"],
"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_callMany',
params: [
[
[
{
from: '0x69835D480110e4919B7899f465aAB101e21c8A87',
to: '0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5',
gas: '0x76c0',
gasPrice: '0x9184e72a000',
value: '0xde0b6b3a7640000',
data: '0x'
},
['trace']
],
[
{
from: '0x69835D480110e4919B7899f465aAB101e21c8A87',
to: '0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c',
gas: '0x5208',
gasPrice: '0x9184e72a000',
value: '0x1bc16d674ec80000',
data: '0x'
},
['trace']
]
],
'latest'
],
id: 1
})
};
fetch('https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm', 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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm",
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_callMany',
'params' => [
[
[
[
'from' => '0x69835D480110e4919B7899f465aAB101e21c8A87',
'to' => '0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5',
'gas' => '0x76c0',
'gasPrice' => '0x9184e72a000',
'value' => '0xde0b6b3a7640000',
'data' => '0x'
],
[
'trace'
]
],
[
[
'from' => '0x69835D480110e4919B7899f465aAB101e21c8A87',
'to' => '0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c',
'gas' => '0x5208',
'gasPrice' => '0x9184e72a000',
'value' => '0x1bc16d674ec80000',
'data' => '0x'
],
[
'trace'
]
]
],
'latest'
],
'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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_callMany\",\n \"params\": [\n [\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5\",\n \"gas\": \"0x76c0\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0xde0b6b3a7640000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ],\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c\",\n \"gas\": \"0x5208\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0x1bc16d674ec80000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ]\n ],\n \"latest\"\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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_callMany\",\n \"params\": [\n [\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5\",\n \"gas\": \"0x76c0\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0xde0b6b3a7640000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ],\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c\",\n \"gas\": \"0x5208\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0x1bc16d674ec80000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ]\n ],\n \"latest\"\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm")
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_callMany\",\n \"params\": [\n [\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5\",\n \"gas\": \"0x76c0\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0xde0b6b3a7640000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ],\n [\n {\n \"from\": \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"to\": \"0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c\",\n \"gas\": \"0x5208\",\n \"gasPrice\": \"0x9184e72a000\",\n \"value\": \"0x1bc16d674ec80000\",\n \"data\": \"0x\"\n },\n [\n \"trace\"\n ]\n ]\n ],\n \"latest\"\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": [
[
{
"action": {
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
"value": "0xde0b6b3a7640000",
"gas": "0x76c0",
"input": "0x",
"callType": "call"
},
"result": {
"gasUsed": "0x5208",
"output": "0x"
},
"traceAddress": [],
"type": "call"
}
]
]
}This method is available on Chainstack. Not all Hyperliquid methods are available on Chainstack, as the open-source node implementation does not support them yet — see Hyperliquid methods for the full availability breakdown.
trace_callMany JSON-RPC method executes multiple calls and returns trace information for each call. This method allows batch simulation of multiple transactions with detailed execution traces, making it ideal for complex scenario testing, batch analysis, and multi-step transaction planning.
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
- Call/trace pairs array (array, required): Array of [call_object, trace_types] pairs
- Block parameter (string, required): Block number, hash, or “latest”/“earliest”/“pending”
Call/trace pair structure
Each element in the array contains:- Call object with transaction details (from, to, gas, gasPrice, value, data)
- Array of trace types (e.g., [“trace”])
Response
The method returns an array of trace results, one for each call in the input array.Response structure
Trace results array:- Array of trace result arrays, one per input call
- Each trace result contains execution details, gas usage, and call hierarchy
Usage example
Basic implementation
// Execute multiple traced calls
const traceCallMany = async (callTracePairs, blockParam = 'latest') => {
const response = await fetch('https://hyperliquid-mainnet.core.chainstack.com/YOUR_ENDPOINT/evm', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'trace_callMany',
params: [callTracePairs, blockParam],
id: 1
})
});
const data = await response.json();
return data.result;
};
// Test multiple transaction scenarios
const testMultipleScenarios = async () => {
const scenarios = [
[
{
from: '0x69835D480110e4919B7899f465aAB101e21c8A87',
to: '0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5',
gas: '0x76c0',
gasPrice: '0x9184e72a000',
value: '0xde0b6b3a7640000',
data: '0x'
},
['trace']
],
[
{
from: '0x69835D480110e4919B7899f465aAB101e21c8A87',
to: '0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c',
gas: '0x5208',
gasPrice: '0x9184e72a000',
value: '0x1bc16d674ec80000',
data: '0x'
},
['trace']
]
];
const results = await traceCallMany(scenarios);
console.log('Multi-call simulation results:');
results.forEach((result, index) => {
console.log(`Call ${index + 1}:`);
result.forEach(trace => {
console.log(` Gas used: ${parseInt(trace.result.gasUsed, 16)}`);
console.log(` Success: ${trace.result.output !== '0x'}`);
});
});
return results;
};
// Usage
testMultipleScenarios().then(results => {
console.log('Batch simulation completed');
});
Example request
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "trace_callMany",
"params": [
[
[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0xde0b6b3a7640000",
"data": "0x"
},
["trace"]
],
[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c",
"gas": "0x5208",
"gasPrice": "0x9184e72a000",
"value": "0x1bc16d674ec80000",
"data": "0x"
},
["trace"]
]
],
"latest"
],
"id": 1
}' \
https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm
from web3 import Web3
w3 = Web3(Web3.HTTPProvider("YOUR_CHAINSTACK_ENDPOINT"))
# trace_callMany is a Parity/Erigon-style trace method, so call it via the raw RPC interface
call_trace_pairs = [
[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0xde0b6b3a7640000",
"data": "0x",
},
["trace"],
],
[
{
"from": "0x69835D480110e4919B7899f465aAB101e21c8A87",
"to": "0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c",
"gas": "0x5208",
"gasPrice": "0x9184e72a000",
"value": "0x1bc16d674ec80000",
"data": "0x",
},
["trace"],
],
]
result = w3.manager.request_blocking("trace_callMany", [call_trace_pairs, "latest"])
print(result)
import { JsonRpcProvider } from "ethers";
const provider = new JsonRpcProvider("YOUR_CHAINSTACK_ENDPOINT");
// trace_callMany is a Parity/Erigon-style trace method, so call it via the generic send
const callTracePairs = [
[
{
from: "0x69835D480110e4919B7899f465aAB101e21c8A87",
to: "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
gas: "0x76c0",
gasPrice: "0x9184e72a000",
value: "0xde0b6b3a7640000",
data: "0x",
},
["trace"],
],
[
{
from: "0x69835D480110e4919B7899f465aAB101e21c8A87",
to: "0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c",
gas: "0x5208",
gasPrice: "0x9184e72a000",
value: "0x1bc16d674ec80000",
data: "0x",
},
["trace"],
],
];
const result = await provider.send("trace_callMany", [callTracePairs, "latest"]);
console.log(result);
import { createPublicClient, http } from "viem";
const client = createPublicClient({
transport: http("YOUR_CHAINSTACK_ENDPOINT"),
});
// trace_callMany is a Parity/Erigon-style trace method, so call it via the generic request
const callTracePairs = [
[
{
from: "0x69835D480110e4919B7899f465aAB101e21c8A87",
to: "0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5",
gas: "0x76c0",
gasPrice: "0x9184e72a000",
value: "0xde0b6b3a7640000",
data: "0x",
},
["trace"],
],
[
{
from: "0x69835D480110e4919B7899f465aAB101e21c8A87",
to: "0xb4DcFE4590adBd275aC3Ef1A3dd10e819d11648c",
gas: "0x5208",
gasPrice: "0x9184e72a000",
value: "0x1bc16d674ec80000",
data: "0x",
},
["trace"],
],
];
const result = await client.request({
method: "trace_callMany",
params: [callTracePairs, "latest"],
});
console.log(result);
Use your own endpoint in your code. The code examples use a placeholder Chainstack endpoint (YOUR_CHAINSTACK_ENDPOINT) — replace it with your own Hyperliquid node endpoint from the Chainstack console. The curl above uses a shared public endpoint for quick checks only; do not use it in production.
Use cases
Thetrace_callMany method is essential for applications that need to:
- Batch simulation: Simulate multiple transactions in a single request
- Multi-step transaction planning: Plan complex multi-transaction operations
- Performance comparison: Compare gas usage across different transaction approaches
- Scenario testing: Test multiple scenarios efficiently in batch
- DeFi strategy testing: Test complex DeFi strategies with multiple steps
- Arbitrage analysis: Analyze multi-step arbitrage opportunities
- MEV research: Research Maximum Extractable Value across multiple transactions
- Protocol testing: Test protocol interactions across multiple calls
- Integration testing: Test smart contract integrations comprehensively
- Risk assessment: Assess risks across multiple related transactions
- Development workflows: Integrate batch simulation into development pipelines
- Educational tools: Create educational content about complex transaction flows
- Research platforms: Support blockchain research requiring multiple simulations
- Trading strategy testing: Test complex trading strategies before execution
- Compliance verification: Verify regulatory compliance across transaction batches
Body
application/json
JSON-RPC version
Available options:
2.0 The RPC method name
Available options:
trace_callMany Parameters: [array of call/trace pairs, block parameter]
Request identifier
Last modified on July 7, 2026
Was this page helpful?
⌘I