eth_getTransactionBySenderAndNonce
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "eth_getTransactionBySenderAndNonce",
"params": [
"0x69835D480110e4919B7899f465aAB101e21c8A87",
"0x0"
],
"id": 1
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload = {
"jsonrpc": "2.0",
"method": "eth_getTransactionBySenderAndNonce",
"params": ["0x69835D480110e4919B7899f465aAB101e21c8A87", "0x0"],
"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: 'eth_getTransactionBySenderAndNonce',
params: ['0x69835D480110e4919B7899f465aAB101e21c8A87', '0x0'],
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' => 'eth_getTransactionBySenderAndNonce',
'params' => [
'0x69835D480110e4919B7899f465aAB101e21c8A87',
'0x0'
],
'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\": \"eth_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"0x0\"\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\": \"eth_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"0x0\"\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\": \"eth_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"0x0\"\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": {
"blockHash": "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
"blockNumber": "0x5daf3b",
"from": "0x69835d480110e4919b7899f465aab101e21c8a87",
"gas": "0x5208",
"gasPrice": "0x9184e72a000",
"hash": "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
"input": "0x",
"nonce": "0x0",
"to": "0xb4dcfe4590adbd275ac3ef1a3dd10e819d11648c",
"transactionIndex": "0x41",
"value": "0xde0b6b3a7640000",
"type": "0x0",
"v": "0x25",
"r": "0xc9e1f8a5b3e0d2f7a4b5c3d8e9f6a2b1c4d7e8f9",
"s": "0xa2b1c4d7e8f9c9e1f8a5b3e0d2f7a4b5c3d8e9f6"
}
}Hyperliquid node API
eth_getTransactionBySenderAndNonce | Hyperliquid EVM
Reference docs for the eth_getTransactionBySenderAndNonce JSON-RPC method on the Hyperliquid EVM blockchain, available via Chainstack JSON-RPC nodes.
POST
/
evm
eth_getTransactionBySenderAndNonce
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "eth_getTransactionBySenderAndNonce",
"params": [
"0x69835D480110e4919B7899f465aAB101e21c8A87",
"0x0"
],
"id": 1
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm"
payload = {
"jsonrpc": "2.0",
"method": "eth_getTransactionBySenderAndNonce",
"params": ["0x69835D480110e4919B7899f465aAB101e21c8A87", "0x0"],
"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: 'eth_getTransactionBySenderAndNonce',
params: ['0x69835D480110e4919B7899f465aAB101e21c8A87', '0x0'],
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' => 'eth_getTransactionBySenderAndNonce',
'params' => [
'0x69835D480110e4919B7899f465aAB101e21c8A87',
'0x0'
],
'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\": \"eth_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"0x0\"\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\": \"eth_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"0x0\"\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\": \"eth_getTransactionBySenderAndNonce\",\n \"params\": [\n \"0x69835D480110e4919B7899f465aAB101e21c8A87\",\n \"0x0\"\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": {
"blockHash": "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
"blockNumber": "0x5daf3b",
"from": "0x69835d480110e4919b7899f465aab101e21c8a87",
"gas": "0x5208",
"gasPrice": "0x9184e72a000",
"hash": "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
"input": "0x",
"nonce": "0x0",
"to": "0xb4dcfe4590adbd275ac3ef1a3dd10e819d11648c",
"transactionIndex": "0x41",
"value": "0xde0b6b3a7640000",
"type": "0x0",
"v": "0x25",
"r": "0xc9e1f8a5b3e0d2f7a4b5c3d8e9f6a2b1c4d7e8f9",
"s": "0xa2b1c4d7e8f9c9e1f8a5b3e0d2f7a4b5c3d8e9f6"
}
}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.
eth_getTransactionBySenderAndNonce JSON-RPC method retrieves transaction information by specifying the sender address and transaction nonce on the Hyperliquid EVM blockchain. This method is particularly useful for tracking specific transactions when you know the sender and the sequence number of their transaction.
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
The method accepts two parameters:- Sender address (string, required) — The address of the transaction sender
- Nonce (string, required) — The transaction nonce as a hexadecimal string
Parameter details
address— The Ethereum address that sent the transactionnonce— The transaction sequence number for the sender, in hexadecimal format with “0x” prefix
Response
The method returns detailed transaction information if found, ornull if no transaction exists for the specified sender and nonce.
Response structure
Transaction object (if found):blockHash— Hash of the block containing the transactionblockNumber— Block number containing the transaction (hexadecimal)from— Address of the transaction sendergas— Gas limit provided for the transaction (hexadecimal)gasPrice— Gas price used for the transaction (hexadecimal)hash— Transaction hashinput— Transaction data payloadnonce— Transaction nonce (hexadecimal)to— Address of the transaction recipienttransactionIndex— Position of transaction in the block (hexadecimal)value— Value transferred in the transaction (hexadecimal, in wei)type— Transaction type (hexadecimal)v,r,s— Transaction signature components
- Returns
nullif no transaction is found for the specified sender and nonce
Usage example
Basic transaction lookup
// Get transaction by sender and nonce
const getTransactionBySenderAndNonce = async (sender, nonce) => {
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: 'eth_getTransactionBySenderAndNonce',
params: [sender, nonce],
id: 1
})
});
const data = await response.json();
return data.result;
};
// Track user transactions by nonce
const trackUserTransactions = async (userAddress, startNonce = 0, count = 10) => {
const transactions = [];
for (let i = 0; i < count; i++) {
const nonce = `0x${(startNonce + i).toString(16)}`;
try {
const tx = await getTransactionBySenderAndNonce(userAddress, nonce);
if (tx) {
transactions.push({
nonce: parseInt(tx.nonce, 16),
hash: tx.hash,
blockNumber: parseInt(tx.blockNumber, 16),
value: BigInt(tx.value).toString(),
gasUsed: BigInt(tx.gas).toString(),
to: tx.to
});
} else {
// No more transactions found
break;
}
} catch (error) {
console.error(`Error fetching transaction for nonce ${nonce}:`, error);
break;
}
}
return transactions;
};
// Find pending transaction by nonce
const findPendingTransaction = async (sender, nonce) => {
const tx = await getTransactionBySenderAndNonce(sender, nonce);
if (!tx) {
return { status: 'not_found', message: 'Transaction not found' };
}
if (!tx.blockNumber) {
return { status: 'pending', transaction: tx };
}
return { status: 'confirmed', transaction: tx };
};
// Usage examples
const sender = "0x69835D480110e4919B7899f465aAB101e21c8A87";
const nonce = "0x0";
getTransactionBySenderAndNonce(sender, nonce).then(tx => {
if (tx) {
console.log('Transaction found:', tx.hash);
console.log('Block number:', parseInt(tx.blockNumber, 16));
console.log('Value:', BigInt(tx.value).toString(), 'wei');
} else {
console.log('No transaction found for sender and nonce');
}
});
Example request
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_getTransactionBySenderAndNonce",
"params": [
"0x69835D480110e4919B7899f465aAB101e21c8A87",
"0x0"
],
"id": 1
}' \
https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/evm
from web3 import Web3
w3 = Web3(Web3.HTTPProvider("YOUR_CHAINSTACK_ENDPOINT"))
# eth_getTransactionBySenderAndNonce is a Hyperliquid-specific method with no
# dedicated web3.py call, so send it through the raw provider request.
response = w3.provider.make_request(
"eth_getTransactionBySenderAndNonce",
["0x69835D480110e4919B7899f465aAB101e21c8A87", "0x0"],
)
print(response["result"])
import { JsonRpcProvider } from "ethers";
const provider = new JsonRpcProvider("YOUR_CHAINSTACK_ENDPOINT");
// send() is the escape hatch for methods without a high-level provider API.
const tx = await provider.send("eth_getTransactionBySenderAndNonce", [
"0x69835D480110e4919B7899f465aAB101e21c8A87",
"0x0",
]);
console.log(tx);
import { createPublicClient, http } from "viem";
const client = createPublicClient({
transport: http("YOUR_CHAINSTACK_ENDPOINT"),
});
// Type the custom method through request(), since it is not in viem's schema.
const tx = await client.request<{
method: "eth_getTransactionBySenderAndNonce";
Parameters: [string, string];
ReturnType: unknown;
}>({
method: "eth_getTransactionBySenderAndNonce",
params: ["0x69835D480110e4919B7899f465aAB101e21c8A87", "0x0"],
});
console.log(tx);
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
Theeth_getTransactionBySenderAndNonce method is essential for applications that need to:
- Transaction tracking: Track specific transactions by sender and sequence number
- Nonce management: Implement robust nonce management and transaction sequencing
- Wallet applications: Build wallet interfaces that track user transaction history
- Pending transaction monitoring: Monitor pending transactions and detect stuck transactions
- Transaction replacement: Implement transaction replacement and speed-up mechanisms
- Account analysis: Analyze account transaction patterns and behavior
- Debugging tools: Debug transaction issues and investigate failed transactions
- DeFi protocols: Track protocol interactions and user transaction sequences
- MEV protection: Detect and prevent MEV attacks by monitoring transaction sequences
- Audit tools: Build audit tools that trace transaction flows and account activity
- Analytics platforms: Create analytics dashboards that track user transaction patterns
- Risk management: Implement risk management systems that monitor transaction behavior
- Compliance monitoring: Monitor transactions for compliance and regulatory requirements
- Trading bots: Implement trading bots that track their own transaction sequences
- Arbitrage strategies: Monitor arbitrage transaction sequences and timing
- Cross-chain bridges: Track cross-chain transaction sequences and confirmations
- Oracle services: Monitor oracle transaction sequences and data submission patterns
- Gaming applications: Track gaming transaction sequences and player interactions
- NFT platforms: Monitor NFT transaction sequences and trading patterns
- Social recovery: Implement social recovery mechanisms based on transaction patterns
- Security monitoring: Detect suspicious transaction patterns and potential attacks
- Performance optimization: Optimize transaction submission and nonce management
- Development frameworks: Build development tools with transaction tracking capabilities
- Testing suites: Create comprehensive testing suites for transaction scenarios
Body
application/json
JSON-RPC version
Available options:
2.0 The RPC method name
Available options:
eth_getTransactionBySenderAndNonce Parameters: [sender_address, nonce]
Request identifier
Last modified on June 24, 2026
Was this page helpful?