Why do full nodes need to keep the full transaction history?

I’d like to understand why full nodes are required to store the full history of Bitcoin transactions and not just the headers or UTXOs. Why can’t the UTXO set alone be enough to verify balances and scripts all the way back to the genesis block? When is this data used, and why is it necessary to keep it?

Feel free to be technical—just trying to understand this point.

Scam alert! Be careful of scammers reaching out through private messages. If you receive any, report them to the moderators immediately!

Most nodes can be pruned while still maintaining the same security and privacy benefits. When you prune a node, it still validates the entire blockchain history but then deletes old transaction data to save space. The reasons we still need archival full nodes that store the complete history are:

  1. We need a certain percentage of nodes to bootstrap new nodes and for redundancy across the network.

  2. Block explorers and other services need the full history.

  3. Lightning nodes might need recent historical data for security purposes.

In summary, the full history is used for validating the chain, but you don’t need every node to store it forever—pruned nodes do their job just as well once the history is validated.

@Reid
Thanks for your reply. I think I should have asked, why do archival full nodes need the full history in the first place?

You mentioned validating the chain without trust. Could you explain more about why that’s necessary? Why couldn’t we just prune old transactions everywhere, similar to how layer 2 solutions handle transactions without storing everything on layer 1? When does not having the full history become a problem?

@Onyx
Good question! What you’re asking about sounds similar to SPV (Simplified Payment Verification) used by light wallets, which only verify block headers and rely on full nodes for transaction data. The problem is that SPV has security weaknesses because it can be tricked into accepting invalid transactions. Full nodes, by contrast, check every transaction in the blockchain, ensuring no one can feed them false data.

Pruning old transactions doesn’t impact the node’s ability to validate the chain—it still checks everything initially. But if every node pruned all old transactions from the network, we’d lose the ability to verify the full history from scratch without trusting someone else. This could lead to attacks where invalid transactions from the past are accepted by some nodes.

For more details, you can look into the limitations of SPV and the risks it introduces: SPV Weaknesses and Fraud Proofs.