import * as Nonce from '@tevm/voltaire/Nonce'
async function getPendingTransactionCount(
rpcUrl: string,
address: string
): Promise<number> {
// Get confirmed nonce
const confirmedResponse = await fetch(rpcUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'eth_getTransactionCount',
params: [address, 'latest'],
id: 1
})
})
const { result: confirmed } = await confirmedResponse.json()
// Get pending nonce
const pendingResponse = await fetch(rpcUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'eth_getTransactionCount',
params: [address, 'pending'],
id: 2
})
})
const { result: pending } = await pendingResponse.json()
const confirmedNonce = Nonce.from(confirmed)
const pendingNonce = Nonce.from(pending)
return Nonce.toNumber(pendingNonce) - Nonce.toNumber(confirmedNonce)
}