eth_getTransactionCount - Linea RPC Method
Get the number of transactions sent from an address (nonce) on Linea. Essential for nonce management, transaction signing, and detecting stuck transactions.
Returns the number of transactions sent from an address on Linea, commonly known as the nonce. The nonce is required for every outbound transaction to ensure correct ordering and prevent replay attacks.
Why Linea? Build on Consensys-backed zkEVM L2 with $1B+ TVL and 807% growth in 2025 with 15-30x lower fees than Ethereum mainnet, 6,200 TPS throughput, SWIFT integration with 12+ institutions, and $725M Consensys backing.
When to Use This Method
eth_getTransactionCount is essential for enterprise developers, DeFi builders, and teams seeking Consensys ecosystem integration:
- Transaction Signing — Get the correct nonce before building and signing a new transaction on Linea
- Nonce Gap Detection — Compare
latestandpendingnonces to identify stuck or dropped transactions in the mempool - Account Activity Analysis — Track the total number of outgoing transactions from any address on enterprise DeFi (Aave, Renzo), institutional cross-border payments via SWIFT pilots, and zkEVM-native applications
- Batch Transaction Sequencing — Assign sequential nonces when submitting multiple transactions from the same address
Request Parameters
The address to query the transaction count for
Block number as hex, or tag: latest (confirmed nonce), pending (includes mempool txs), earliest
Response Body
Hexadecimal string representing the number of transactions sent from the address
Error Responses
Code Examples
curl -X POST https://api-linea-mainnet-archive.n.dwellir.com/YOUR_API_KEY \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_getTransactionCount",
"params": [
"0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f",
"latest"
],
"id": 1
}'Common Use Cases
1. Safe Transaction Sender with Nonce Management
Build a transaction sender that handles nonces correctly on Linea:
import { JsonRpcProvider, Wallet, parseEther } from 'ethers';
const provider = new JsonRpcProvider('https://api-linea-mainnet-archive.n.dwellir.com/YOUR_API_KEY');
class TransactionSender {
constructor(privateKey) {
this.wallet = new Wallet(privateKey, provider);
this.localNonce = null;
}
async getNextNonce() {
// Get the pending nonce from the network
const pendingNonce = await provider.getTransactionCount(
this.wallet.address, 'pending'
);
// Use whichever is higher: local tracker or network pending
if (this.localNonce === null || pendingNonce > this.localNonce) {
this.localNonce = pendingNonce;
}
const nonce = this.localNonce;
this.localNonce++;
return nonce;
}
async sendTransaction(to, valueEth) {
const nonce = await this.getNextNonce();
const tx = await this.wallet.sendTransaction({
to,
value: parseEther(valueEth),
nonce
});
console.log(`Sent tx ${tx.hash} with nonce ${nonce}`);
return tx;
}
// Reset local nonce tracker (e.g., after errors)
resetNonce() {
this.localNonce = null;
}
}2. Stuck Transaction Detector
Detect and report stuck transactions by comparing nonces:
async function detectStuckTransactions(provider, address) {
const confirmedNonce = await provider.getTransactionCount(address, 'latest');
const pendingNonce = await provider.getTransactionCount(address, 'pending');
const pendingCount = pendingNonce - confirmedNonce;
if (pendingCount === 0) {
console.log('No pending transactions');
return { status: 'clear', pendingCount: 0 };
}
console.log(`${pendingCount} pending transaction(s) detected`);
console.log(`Confirmed nonce: ${confirmedNonce}`);
console.log(`Pending nonce: ${pendingNonce}`);
console.log(`Stuck nonces: ${confirmedNonce} to ${pendingNonce - 1}`);
return {
status: 'stuck',
pendingCount,
confirmedNonce,
pendingNonce,
stuckNonces: Array.from(
{ length: pendingCount },
(_, i) => confirmedNonce + i
)
};
}
// Usage
const result = await detectStuckTransactions(provider, '0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f');
if (result.status === 'stuck') {
console.log('Consider replacing transactions at nonces:', result.stuckNonces);
}3. Batch Transaction Submitter
Submit multiple transactions in sequence with correct nonce ordering:
async function sendBatchTransactions(wallet, transactions) {
const startNonce = await provider.getTransactionCount(
wallet.address, 'pending'
);
console.log(`Sending ${transactions.length} transactions starting at nonce ${startNonce}`);
const receipts = [];
for (let i = 0; i < transactions.length; i++) {
const nonce = startNonce + i;
const tx = await wallet.sendTransaction({
...transactions[i],
nonce
});
console.log(`Tx ${i + 1}/${transactions.length} sent: ${tx.hash} (nonce: ${nonce})`);
receipts.push(tx);
}
// Wait for all to confirm
const confirmed = await Promise.all(
receipts.map(tx => tx.wait())
);
console.log(`All ${confirmed.length} transactions confirmed`);
return confirmed;
}
// Usage
const transactions = [
{ to: '0xRecipient1...', value: parseEther('0.1') },
{ to: '0xRecipient2...', value: parseEther('0.2') },
{ to: '0xRecipient3...', value: parseEther('0.05') }
];
await sendBatchTransactions(wallet, transactions);Error Handling
Common errors and solutions:
| Error Code | Description | Solution |
|---|---|---|
| -32602 | Invalid params | Verify the address is a valid 20-byte hex string and the block parameter is valid |
| -32603 | Internal error | Retry with exponential backoff |
| -32000 | Block not found | The requested block may be pruned — use latest or pending |
| -32005 | Rate limit exceeded | Implement caching for nonce lookups |
async function safeGetNonce(provider, address, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await provider.getTransactionCount(address, 'pending');
} catch (error) {
if (error.code === -32005) {
await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
continue;
}
if (i === maxRetries - 1) throw error;
await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
}
}
}Related Methods
eth_sendRawTransaction— Send a signed transaction to the networketh_getBalance— Get the ETH balance of an addresseth_getTransactionByHash— Get transaction details by hasheth_getTransactionReceipt— Get the receipt of a confirmed transaction
eth_getStorageAt
Read the value from a storage slot at a given contract address on Linea. Essential for reading contract state directly, proxy implementation verification, and storage layout analysis.
eth_accounts
Returns a list of addresses owned by the client on Linea. Typically returns an empty array on public RPC endpoints.