<p>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.</p>

CC BY-SA 3.0
2014-09-04T07:13:51.590Z
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
CC BY-SA 3.0
2014-09-04T21:13:04.017Z
@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
CC BY-SA 3.0
2014-09-05T14:03:34.007Z
@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
CC BY-SA 3.0
2014-09-05T15:38:36.993Z
@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
CC BY-SA 3.0
2014-09-03T21:55:46.917Z
2014-09-03T21:55:46.917Z
Greg Hewgill
<p><em>Reclaiming disk space</em> 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.</p>

<p>From the paper (my emphasis):</p>

<blockquote>
  <p>Once the latest transaction in a coin is buried under enough blocks, the <strong><em>spent transactions</em></strong> before it can be discarded to save disk space</p>
</blockquote>

<p>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.</p>

CC BY-SA 3.0
2014-09-04T15:56:23.770Z
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
CC BY-SA 3.0
2014-09-04T22:18:53.537Z
@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
CC BY-SA 3.0
2014-09-03T22:27:50.867Z
2014-09-03T22:27:50.867Z
theymos
<p>Section 7 of the official <a href="https://bitcoin.org/bitcoin.pdf" rel="nofollow">Bitcoin paper</a> "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?</p>

<nodes><spv>
Can I independently verify the integrity of the network with only block headers?
Luca Matteis
# Can I independently verify the integrity of the network with only block headers?

(Asked by: username_0 on 2014-09-03)

Section 7 of the official [Bitcoin paper](https://bitcoin.org/bitcoin.pdf) "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?

**Tags:** nodes, spv


---

## 2 answers

### Answer by username_1 on 2014-09-03. Score: 2 | Accepted answer

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.

> **Comments:**
> **username_0**: Thanks username_1 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?  
> **username_2**: @username_0 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?  
> **username_0**: @username_2 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?  
> **username_2**: @username_0 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."  

---

### Answer by username_3 on 2014-09-03. Score: 3

*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.

> **Comments:**
> **username_0**: 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?  
> **username_3**: @username_0 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.  

---

