Can I independently verify the integrity of the network with only block headers?


Section 7 of the official Bitcoin paper "Reclaiming Disk Space" explains that only block headers are needed to verify transactions. Essentially by making sure that the transaction has been buried behind enough blocks. Why is the block chain so big then? It seems like we could all just store headers and reclaim a lot of disk space. Can I independently verify the integrity of the network with only block headers?

Luca Matteis

Posted 2014-09-03T21:49:57.947

Reputation: 4 924



In order to validate a new block with a new set of transactions, your node will also need to ensure that the source account for each new transaction actually has a balance to spend. For this, you will need the entire blockchain.

Greg Hewgill

Posted 2014-09-03T21:49:57.947

Reputation: 3 351

Thanks Greg that's what I figured. I was missing/forgot the part that transaction depend entirely on the balance of other past transactions. Nonetheless, using the Merkle Root in the headers you can still verify if a specific transaction exists in a block. So you could validate the set of new transactions this way no? – Luca Matteis – 2014-09-04T07:13:51.590

@LucaMatteis How could you verify that there didn't exist a transaction that spent those funds unless you either check every transaction or maintain a table of all unspent outputs? – David Schwartz – 2014-09-04T21:13:04.017

@DavidSchwartz so with the Merkle Root you can only verify that a transaction is part of that block but you can't verify that enough funds are available, right? – Luca Matteis – 2014-09-05T14:03:34.007

@LucaMatteis Assuming you mean this, you are correct: "You can verify that the past transactions that a new transaction depends on were part of a block, but you can't verify that the funds the new transaction uses weren't consumed by some other past transaction." – David Schwartz – 2014-09-05T15:38:36.993


Reclaiming disk space describes what is nowadays called pruning. After downloading the entire block chain, you can safely throw most of it away because old spent transaction outputs are never needed again. This is not yet fully supported in Bitcoin Core, but it probably will be possible in the next major release.

From the paper (my emphasis):

Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space

You're talking about simplified payment verification (SPV), the next section in the paper. With SPV, you use just headers and Merkle trees to verify that a transaction has a certain number of confirmations. A transaction with a high number of confirmations is probably safe, but you can't be 100% sure without downloading and verifying the entire block chain. SPV clients trust that the majority of miners are honest, which full nodes do not need to do in most cases. Today, SPV is used by many lightweight clients such as MultiBit and Bitcoin Wallet for Android.


Posted 2014-09-03T21:49:57.947

Reputation: 8 416

Wouldn't I be able to mine only with the headers? When I get new transactions I could validate transactions by checking the inputs with the merkle root of the blocks. I guess you can't calculate if the amounts add up with only the merkle root? – Luca Matteis – 2014-09-04T15:56:23.770

@LucaMatteis It's possible to mine without being a full node (you don't need to include any transactions), but you'll end up on the wrong side of forks in the chain caused by invalid blocks because you won't know which fork is valid. Just a single invalid block could cost you a lot of money. No one "mines" like that because it's very bad for the network, the profits are likely to be much lower on average, and running a full node is fairly cheap. – theymos – 2014-09-04T22:18:53.537