ots_getTransactionBySenderAndNonce
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "ots_getTransactionBySenderAndNonce",
"params": [
"0x5555555555555555555555555555555555555555",
0
],
"id": 1
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload = {
"jsonrpc": "2.0",
"method": "ots_getTransactionBySenderAndNonce",
"params": ["0x5555555555555555555555555555555555555555", 0],
"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: 'ots_getTransactionBySenderAndNonce',
params: ['0x5555555555555555555555555555555555555555', 0],
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' => 'ots_getTransactionBySenderAndNonce',
'params' => [
'0x5555555555555555555555555555555555555555',
0
],
'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\": \"ots_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x5555555555555555555555555555555555555555\",\n 0\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\": \"ots_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x5555555555555555555555555555555555555555\",\n 0\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\": \"ots_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x5555555555555555555555555555555555555555\",\n 0\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": {
"hash": "0xf94f3d2ed5b59aefb6a0e566af8e86552014d84f6ed2f38a1366dedffe723381",
"nonce": "0x0",
"from": "0x5555555555555555555555555555555555555555"
}
}Hyperliquid node API
ots_getTransactionBySenderAndNonce | Hyperliquid EVM
Reference docs for the ots_getTransactionBySenderAndNonce JSON-RPC method on the Hyperliquid EVM blockchain, available via Chainstack JSON-RPC nodes.
POST
/
evm
ots_getTransactionBySenderAndNonce
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "ots_getTransactionBySenderAndNonce",
"params": [
"0x5555555555555555555555555555555555555555",
0
],
"id": 1
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload = {
"jsonrpc": "2.0",
"method": "ots_getTransactionBySenderAndNonce",
"params": ["0x5555555555555555555555555555555555555555", 0],
"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: 'ots_getTransactionBySenderAndNonce',
params: ['0x5555555555555555555555555555555555555555', 0],
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' => 'ots_getTransactionBySenderAndNonce',
'params' => [
'0x5555555555555555555555555555555555555555',
0
],
'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\": \"ots_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x5555555555555555555555555555555555555555\",\n 0\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\": \"ots_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x5555555555555555555555555555555555555555\",\n 0\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\": \"ots_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x5555555555555555555555555555555555555555\",\n 0\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": {
"hash": "0xf94f3d2ed5b59aefb6a0e566af8e86552014d84f6ed2f38a1366dedffe723381",
"nonce": "0x0",
"from": "0x5555555555555555555555555555555555555555"
}
}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.
ots_getTransactionBySenderAndNonce JSON-RPC method retrieves a transaction hash by specifying the sender address and nonce on the Hyperliquid EVM blockchain. This Otterscan-specific method helps locate transactions when you know the sender and nonce but not the transaction hash.
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
- sender address (string, required): The address that sent the transaction
- nonce (integer, required): The nonce value used for the transaction
Response
The method returns the transaction hash if found, or null if no transaction exists with the specified sender and nonce.Response structure
result— the transaction hash (32-byte hex string), ornullif not found
Usage example
curl -X POST https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "ots_getTransactionBySenderAndNonce",
"params": ["0x5555555555555555555555555555555555555555", 0],
"id": 1
}'
from web3 import Web3
# ots_getTransactionBySenderAndNonce is an Otterscan namespace method, so
# call it through the provider directly instead of a typed web3.py binding.
w3 = Web3(Web3.HTTPProvider("YOUR_CHAINSTACK_ENDPOINT"))
response = w3.provider.make_request(
"ots_getTransactionBySenderAndNonce",
["0x5555555555555555555555555555555555555555", 0],
)
print(response["result"])
import { JsonRpcProvider } from "ethers";
const provider = new JsonRpcProvider("YOUR_CHAINSTACK_ENDPOINT");
// ots_getTransactionBySenderAndNonce is an Otterscan namespace method, so
// send the raw JSON-RPC request through the provider.
const txHash = await provider.send("ots_getTransactionBySenderAndNonce", [
"0x5555555555555555555555555555555555555555",
0,
]);
console.log(txHash);
import { createPublicClient, http } from "viem";
const client = createPublicClient({
transport: http("YOUR_CHAINSTACK_ENDPOINT"),
});
// ots_getTransactionBySenderAndNonce is an Otterscan namespace method, so
// issue the raw JSON-RPC request through the client.
const txHash = await client.request({
method: "ots_getTransactionBySenderAndNonce",
params: ["0x5555555555555555555555555555555555555555", 0],
});
console.log(txHash);
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.
Example response (transaction found)
{
"jsonrpc": "2.0",
"id": 1,
"result": "0xf94f3d2ed5b59aefb6a0e566af8e86552014d84f6ed2f38a1366dedffe723381"
}
Example response (not found)
{
"jsonrpc": "2.0",
"id": 1,
"result": null
}
Finding multiple transactions
To find a sequence of transactions from an address:// Find transactions with nonces 0 through 5
for (let nonce = 0; nonce <= 5; nonce++) {
const params = ["0x5555555555555555555555555555555555555555", nonce];
// Make RPC call with params
}
Use cases
Theots_getTransactionBySenderAndNonce method is essential for:
- Transaction recovery: Find lost transaction hashes using sender and nonce
- Wallet debugging: Track down specific transactions from an account
- Nonce management: Verify which nonces have been used by an address
- Transaction replacement: Find original transactions before replacement
- Account auditing: Systematically review all transactions from an address
- Support tools: Help users find their transactions without the hash
- Forensic analysis: Track transaction sequences from specific accounts
- Testing verification: Confirm test transactions were submitted
- MEV analysis: Study transaction ordering and nonce patterns
- Integration recovery: Recover from lost transaction tracking in dApps
Body
application/json
JSON-RPC version
Available options:
2.0 The RPC method name
Available options:
ots_getTransactionBySenderAndNonce Parameters: [sender address, nonce]
Request identifier
Last modified on June 24, 2026
Was this page helpful?