If you query the ETH balance of an address at a historical block, a full node and an archive node give completely different results: a full node will most likely return an error, while an archive node returns the exact value. The key difference is not about which one queries faster. It is that a full node does not keep historical state data at all. It only has state snapshots for roughly the last 128 blocks. If the balance you need falls in an earlier block, a full node cannot answer. Only an archive node can.

A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!
Why a Full Node Cannot Check Old Balances
Ethereum's "state" records each account's balance, nonce, contract code, and storage. A full node verifies all blocks and transactions while running, but it only keeps state for roughly the last 128 blocks. Earlier state is pruned away. This is done to control disk usage. A full node needs to follow the chain head and verify new transactions. Recent state is enough to handle chain reorganizations and normal interactions. Historical state is not required for the network to operate.
So when you call eth_getBalance with a block number from a few hundred blocks ago, a full node returns an error like missing trie node or historical state not available. This is not a node failure. It simply never stored that data.
In theory, a full node could recompute historical state by re-executing all transactions from the genesis block up to the target block. But this consumes a huge amount of CPU and time. It is not practical for a normal RPC query. When you query an old block balance on a full node, you do not get a slower result. You get a direct failure.
What an Archive Node Stores, and Why It Can Answer
An archive node is configured differently from a full node. It keeps every historical state snapshot from the genesis block onward and does not prune. Account balances and contract storage after every block are all stored. When you query a balance at a historical block, it reads the matching state directly from disk and returns it. It does not need to re-execute transactions.
The cost is storage. An Ethereum archive node needs far more space than a full node. Documentation from the Ethereum Foundation mentions that most clients need more than 12TB for archive mode. Erigon can compress the same data to under 3TB. Geth's path-based archive node needs about 2TB with full flat state history, or about 6.5TB if historical trie data is also kept. A full node usually needs around 1TB. An archive node is not an "upgraded full node." It is infrastructure built for specific purposes such as block explorers, audits, tax accounting, and security analysis. Ordinary users do not need it for daily transfers or transactions.
An Easy Pitfall: Archive Is a Startup Setting, Not a Query Parameter
You cannot expect a full node to temporarily switch into archive mode by passing an extra parameter. The node decides at startup, through client configuration, whether to keep historical state. For example, G eth uses --gcmode archive, and Erigon has its own state history mode. If you specify an old block number in an RPC call, the node can only respond using data it already has. If the state was not stored, no parameter will get it for you.
If you use a third-party RPC provider, you also need to confirm whether their endpoint is backed by an archive node. Public or free endpoints are usually not archive nodes, so state queries for old blocks will fail. Paid archive endpoints clearly state that they support historical state queries, but retention depth and pricing vary by provider.
How to Test an Endpoint in Practice
If you have an RPC endpoint and are not sure whether it is an archive node, test it with a known old block. Pick a block number far from the current head and call eth_getBalance for a well-known address at that block. If it returns a specific value, the endpoint is an archive node or at least kept state for that block. If it returns an error like missing trie node, it is a full node or a pruned node. Do not test with the latest tag. Any node can answer that.
If you only need the current balance, a full node is enough. Just use the latest block tag. You need an archive node only when you need a balance at a specific past point in time. This is also why block explorers can show any address balance at any block. They rely on archive data or indexed historical state behind the scenes, not on a normal full node.

A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!
References
- ethereum.org·Ethereum archive nodes 2026-10-29
- OnFinality·Ethereum archive nodes and historical RPC: querying past balances, logs, and state 2026-10-29
- Chainstack·EVM node returns "Missing trie node" 2026-10-29
- go-ethereum·Archive mode 2026-10-29
- QuickNode·How to access historical blockchain data 2026-10-29


