Logo
New RPC users get 35% off their first monthView the offer
OnFinality Learn
Network & Protocol Guides9 min read

Sepolia Scan: Reading Testnet Data with Explorers and RPC

A practical guide to scanning Sepolia transactions, blocks, and contracts using explorers, RPC calls, and reproducible verification methods.

TL;DR

A Sepolia scan means looking up testnet activity — transactions, blocks, addresses, tokens, and contract state — either through a block explorer or directly through an RPC endpoint. Explorers give you a human-readable view, while RPC gives you programmatic, verifiable access to the same underlying chain data. This article explains how Sepolia scanning works, how to reproduce explorer results with curl and JavaScript, how to verify a deployment or failed transaction, and how to troubleshoot mismatches between what an explorer shows and what your application sees.

What a Sepolia scan actually retrieves

Sepolia is Ethereum's public proof-of-stake testnet. A Sepolia scan is any lookup of on-chain testnet data: a transaction hash, a block number, an address balance, a token transfer, or a contract's storage. The data is identical whether you view it in a browser-based explorer or fetch it with an RPC call — both read from Sepolia nodes that have indexed or synced the chain.

The important distinction is between indexed views and raw node views. Explorers like Etherscan, Blockscout, and Arbiscan-style interfaces maintain databases that decode logs, label addresses, and aggregate statistics. Raw RPC returns the canonical chain data: blocks, receipts, traces, and state. When an explorer and your application disagree, the RPC response is usually the source of truth for what the node accepted.

  • Transaction lookup: status, gas used, logs, and revert reason.
  • Block lookup: timestamp, base fee, transaction count, and validator.
  • Address lookup: balance, nonce, and contract bytecode.
  • Token and log lookup: ERC-20 transfers and event decoding.

Assumptions and prerequisites

This guide assumes you have a Sepolia RPC URL from a provider or your own node, a wallet address or transaction hash to inspect, and basic familiarity with JSON-RPC. You do not need mainnet ETH for read-only scans, but you do need Sepolia ETH to send test transactions. Faucets distribute small amounts and usually impose daily limits or mainnet-activity requirements.

If you are choosing an endpoint rather than running a node, the concrete provider decision belongs in the RPC Assistant rather than here. For a broader comparison of endpoint options, see the guide to Ethereum RPC APIs and the multi-chain RPC endpoints guide.

How explorers and RPC differ in what they show

An explorer is an indexing layer. It listens to new blocks, decodes transactions and logs, and stores derived data such as token balances and contract labels. That makes it fast for humans but dependent on the indexer's sync status. A raw RPC endpoint answers from the node's current view of the chain, which may lag by a block or two depending on the node's sync mode.

This matters during debugging. A transaction can appear as pending in a wallet, confirmed in an explorer, and still return a null receipt from an RPC node that has not yet imported the block. Always compare like with like: check the block number in the explorer against the block number your RPC reports before concluding that data is missing.

  • Explorer: decoded, labeled, and aggregated; useful for humans.
  • RPC: canonical and programmatic; useful for automation and verification.
  • Indexer lag: explorers may trail the chain head by seconds.
  • Node lag: your RPC may trail the chain head if it is catching up.

Scanning a transaction with curl

The most direct Sepolia scan is a transaction receipt lookup. Replace RPC_URL with your endpoint and TX_HASH with the hash you want to inspect. The receipt tells you whether the transaction succeeded, how much gas it used, and which logs it emitted.

curl -s RPC_URL \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "eth_getTransactionReceipt",
    "params": ["TX_HASH"]
  }'

Verifying the result against the chain head

A receipt alone does not tell you whether the node is current. Fetch the latest block number and compare it with the block number in the receipt. If the receipt block is within a few blocks of the head, the scan is fresh. If the head is far behind a public explorer, your endpoint is likely syncing or rate-limited.

Run the same request twice with a short delay and record the block numbers. A healthy endpoint advances its head between calls. A stalled endpoint returns the same block number repeatedly.

curl -s RPC_URL \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'

A JavaScript scan for address activity

For address-level scans, you need the balance, the nonce, and the contract bytecode. The nonce is especially useful: it tells you how many transactions the address has sent, which helps distinguish a stuck transaction from a new one. The following script uses fetch and works in Node.js 18 or later.

const RPC_URL = process.env.RPC_URL;
const ADDRESS = process.env.ADDRESS;

async function rpc(method, params) {
  const res = await fetch(RPC_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params })
  });
  const json = await res.json();
  if (json.error) throw new Error(json.error.message);
  return json.result;
}

const [balance, nonce, code] = await Promise.all([
  rpc('eth_getBalance', [ADDRESS, 'latest']),
  rpc('eth_getTransactionCount', [ADDRESS, 'latest']),
  rpc('eth_getCode', [ADDRESS, 'latest'])
]);

console.log({ balance, nonce, isContract: code !== '0x' });

Reproducible measurement procedure for scan latency

If you want to compare endpoints rather than just read data, measure the time from sending a transaction to seeing a confirmed receipt. Do not invent numbers; run the procedure and record your own. Use a fresh wallet, a fixed gas price, and the same transaction payload for each endpoint.

Record the following in a table: endpoint label, send timestamp, first-seen pending timestamp, confirmed timestamp, block number, and receipt status. Repeat at least ten times per endpoint and report the median and maximum. This separates network variance from endpoint behavior.

  • Use a dedicated test wallet with a known nonce sequence.
  • Send identical value and data payloads to each endpoint.
  • Log timestamps in UTC and include the block number.
  • Discard runs where the transaction was replaced or dropped.

Troubleshooting common Sepolia scan mismatches

The most common mismatch is a transaction that appears confirmed in an explorer but returns null from your RPC. This usually means your node has not imported the block yet, or you queried a different network. Confirm the chain ID with eth_chainId and compare it with the explorer's network label.

A second common issue is a failed transaction with no visible reason. Receipts include a status field but not always a revert string. Use eth_call at the failed block to replay the call and surface the revert reason, or inspect the transaction trace if your provider supports debug_traceTransaction.

  • Null receipt: check chain ID, block number, and node sync status.
  • Reverted transaction: replay with eth_call at the same block.
  • Missing logs: confirm the transaction actually emitted events.
  • Wrong balance: remember that pending and latest are different tags.

Limitations of explorer-based scanning

Explorers are convenient but not authoritative for automation. They can lag, rate-limit, or decode contracts differently from your application. They also cannot answer questions about pending state or simulate future calls. For production workflows, treat the explorer as a debugging aid and the RPC as the integration surface.

Sepolia itself is a testnet. Its state can be reset or pruned by operators, and faucet availability changes. Do not build monitoring that assumes Sepolia history is permanent. For production-grade node access, review dedicated node options and RPC pricing before committing to an architecture.

Next steps for reliable Sepolia workflows

Once you can scan a transaction and verify the chain head, move to automated checks: poll receipts with backoff, assert chain ID before every write, and log block numbers alongside results. If you need a concrete endpoint recommendation, use the RPC Assistant. For network-level context, browse the supported networks and the API service overview.

  • Add chain ID and block number assertions to your scripts.
  • Cache receipts only after a configurable confirmation depth.
  • Route read-heavy scans to endpoints with sufficient rate limits.
  • Keep a fallback endpoint for scan failures.

Never Worry about Infrastructure Again

OnFinality takes away the heavy lifting of DevOps so you can build smarter and faster.

Get Started