trace_replayTransaction
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": [
"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31",
[
"trace"
]
],
"id": 1
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload = {
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": ["0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31", ["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: [
'0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31',
['trace']
],
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_replayTransaction',
'params' => [
'0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31',
[
'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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31\",\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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31\",\n [\n \"trace\"\n ]\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_replayTransaction\",\n \"params\": [\n \"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31\",\n [\n \"trace\"\n ]\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": {
"trace": [
{
"action": {
"from": "0x...",
"to": "0x...",
"value": "0x0",
"gas": "0x...",
"input": "0x...",
"callType": "call"
},
"result": {
"gasUsed": "0x5208",
"output": "0x"
},
"traceAddress": [],
"type": "call"
}
]
}
}Hyperliquid node API
trace_replayTransaction | Hyperliquid EVM
The trace_replayTransaction JSON-RPC method replays a specific transaction and returns trace information. Hyperliquid EVM via Chainstack.
POST
/
evm
trace_replayTransaction
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": [
"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31",
[
"trace"
]
],
"id": 1
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload = {
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": ["0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31", ["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: [
'0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31',
['trace']
],
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_replayTransaction',
'params' => [
'0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31',
[
'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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31\",\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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"trace_replayTransaction\",\n \"params\": [\n \"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31\",\n [\n \"trace\"\n ]\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_replayTransaction\",\n \"params\": [\n \"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31\",\n [\n \"trace\"\n ]\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": {
"trace": [
{
"action": {
"from": "0x...",
"to": "0x...",
"value": "0x0",
"gas": "0x...",
"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_replayTransaction JSON-RPC method replays a specific transaction and returns trace information. This method provides detailed execution traces for a single transaction by replaying its execution, making it essential for transaction debugging, analysis, and forensic investigation.
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
- Transaction hash (string, required): Hash of the transaction to replay
- Trace types (array, required): Array of trace types to include in response
Trace types
"trace": Basic execution trace information"vmTrace": Virtual machine execution trace"stateDiff": State differences caused by the transaction
Response
The method returns detailed trace information for the replayed transaction.Response structure
Transaction trace:trace— Array of trace objects containing execution details- Each trace contains action details, results, and call hierarchy
Usage example
Basic implementation
// Replay a specific transaction with tracing
const replayTransaction = async (txHash, traceTypes = ['trace']) => {
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_replayTransaction',
params: [txHash, traceTypes],
id: 1
})
});
const data = await response.json();
return data.result;
};
// Example usage
const txHash = '0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31';
replayTransaction(txHash).then(result => {
console.log('Transaction replay result:');
if (result.trace) {
result.trace.forEach((trace, index) => {
console.log(`Trace ${index + 1}:`);
console.log(` Type: ${trace.type}`);
console.log(` Gas used: ${parseInt(trace.result.gasUsed, 16)}`);
});
}
});
Example request
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "trace_replayTransaction",
"params": [
"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31",
["trace"]
],
"id": 1
}' \
https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm
from web3 import Web3
w3 = Web3(Web3.HTTPProvider("YOUR_CHAINSTACK_ENDPOINT"))
tx_hash = "0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31"
# trace_replayTransaction is not a typed web3.py method, so call it via the raw provider.
result = w3.provider.make_request("trace_replayTransaction", [tx_hash, ["trace"]])
print(result["result"])
import { JsonRpcProvider } from "ethers";
const provider = new JsonRpcProvider("YOUR_CHAINSTACK_ENDPOINT");
const txHash =
"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31";
// trace_replayTransaction is not a typed ethers method, so send the raw JSON-RPC request.
const result = await provider.send("trace_replayTransaction", [txHash, ["trace"]]);
console.log(result);
import { createPublicClient, http } from "viem";
const client = createPublicClient({
transport: http("YOUR_CHAINSTACK_ENDPOINT"),
});
const txHash =
"0x07712544ce8f50091c6c3b227921f763b342bf9465a22f0226d651a3246adb31";
// trace_replayTransaction is not a typed viem action, so use the raw request method.
const result = await client.request({
method: "trace_replayTransaction",
params: [txHash, ["trace"]],
});
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_replayTransaction method is essential for applications that need to:
- Transaction debugging: Debug specific transaction execution issues
- Forensic analysis: Investigate suspicious or failed transactions
- Performance analysis: Analyze transaction performance and gas usage
- Development tools: Build transaction debugging and analysis tools
- Security auditing: Audit specific transactions for security issues
- Educational tools: Create educational content about transaction execution
- Research platforms: Support detailed transaction research and analysis
- Compliance investigation: Investigate transactions for regulatory compliance
- MEV analysis: Analyze specific transactions for MEV extraction
- Protocol analysis: Analyze how specific transactions interact with protocols
Body
application/json
JSON-RPC version
Available options:
2.0 The RPC method name
Available options:
trace_replayTransaction Parameters: [transaction hash, trace types array]
Request identifier
Last modified on June 24, 2026
Was this page helpful?