<p>You are right, and it seems this answer is outdated.</p>

<p>The concept of a UTXO set is more recent than Bitcoin itself. The original software kept a database with information on every transaction output ever created, including whether it was already spent. In that setting, the UTXO set was only defined implicitly by the spentness information in that database.</p>

<p>Bitcoin Core 0.8 (back then still just called Bitcoin) was the first full node software version to make the UTXO set explicit. At the time (2013) it was known that it was possible to also actually delete old block data after validation, as the UTXO set was maintained separately. It was only in 2016 with Bitcoin Core 0.12 that this was actually implemented using a feature known as pruning.</p>

<p>Historically speaking, the answer in the course was not wrong: UTXO maintenance used to imply having the full database. Since the introduction of pruning this is however no longer the case.</p>

CC BY-SA 4.0
2019-12-23T10:50:48.503Z
Its also worthwhile to highlight that full nodes that store the whole blockchain also help bootstraping new users that join the network. AFAIK, to date, there is no implementation to distribute the UTXO set.
rny
CC BY-SA 4.0
2019-12-23T11:03:38.767Z
@renlord is there any reason to not supporting UTXO set distribution? If every Full Node store only the UTXO set, would it cause any problem?
meowongac
CC BY-SA 4.0
2019-12-23T11:05:15.803Z
You can't verify that a UTXO set is correct without verifying its history. For minimizing trust, the full data must be available. However, it does not mean everyone needs to revalidate the whole thing every time. There is ongoing work on distributing UTXO sets in the assumeutxo project.
Pieter Wuille
CC BY-SA 4.0
2022-06-02T07:52:51.747Z
So why full nodes store the whole blockchain? Aren't spent transactions useless to store?
Amir reza Riahi
CC BY-SA 4.0
2022-06-02T12:32:51.773Z
@AmirrezaRiahi They don't. Bitcoin Core at least has the option to "prune" which means deleting block data after receiving and processing it. But it still requires downloading the full blocks once, because that's the only way to convince a node about what the current UTXO set is. It also implies that someone has to be able to provide that block data, creating a need for non-pruned full nodes.
Pieter Wuille
CC BY-SA 4.0
2019-12-23T10:47:06.777Z
2019-12-23T10:47:06.777Z
Pieter Wuille
<p>So I have started learning bitcoin recently (from Bitcoin and Cryptocurrency course @ Coursera). And I just learnt that there are <strong>"Full-Validating Note"</strong> out there that are:  </p>

<ul>
<li>Permanently connected  </li>
<li>Store the whole blockchain  </li>
<li>Hear and forward every node/trans  </li>
</ul>

<p>My question is why the Full Nodes need to store the whole blockchain instead of just saving UTXO set? If I understand correctly, only having UTXO is already sufficient to prevent double spending.</p>

CC BY-SA 4.0
2019-12-23T07:58:03.210Z
How old is this course? It seems outdated.
Pieter Wuille
CC BY-SA 4.0
2019-12-23T10:38:48.280Z
Thanks for the reply @PieterWuille . The course was published in 2015, so, it is pretty old. Could you suggest how Full Node is functioning now?
meowongac
CC BY-SA 4.0
2019-12-23T10:42:11.430Z
Also, in my question I said that "only having UTXO is sufficient to prevent double spending". Is that a correct statement?
meowongac
<full-node><utxo><utxo-set>
Why Full Node stores whole blockchain instead of only the UTXO set?
meowongac
# Why Full Node stores whole blockchain instead of only the UTXO set?

(Asked by: username_0 on 2019-12-23)

So I have started learning bitcoin recently (from Bitcoin and Cryptocurrency course @ Coursera). And I just learnt that there are **"Full-Validating Note"** out there that are:

* Permanently connected
* Store the whole blockchain
* Hear and forward every node/trans

My question is why the Full Nodes need to store the whole blockchain instead of just saving UTXO set? If I understand correctly, only having UTXO is already sufficient to prevent double spending.

**Tags:** full-node, utxo, utxo-set

> **Comments:**
> **username_1**: How old is this course? It seems outdated.  
> **username_0**: Thanks for the reply @username_1 . The course was published in 2015, so, it is pretty old. Could you suggest how Full Node is functioning now?  
> **username_0**: Also, in my question I said that "only having UTXO is sufficient to prevent double spending". Is that a correct statement?  

---

## 1 answers

### Answer by username_1 on 2019-12-23. Score: 5 | Accepted answer

You are right, and it seems this answer is outdated.

The concept of a UTXO set is more recent than Bitcoin itself. The original software kept a database with information on every transaction output ever created, including whether it was already spent. In that setting, the UTXO set was only defined implicitly by the spentness information in that database.

Bitcoin Core 0.8 (back then still just called Bitcoin) was the first full node software version to make the UTXO set explicit. At the time (2013) it was known that it was possible to also actually delete old block data after validation, as the UTXO set was maintained separately. It was only in 2016 with Bitcoin Core 0.12 that this was actually implemented using a feature known as pruning.

Historically speaking, the answer in the course was not wrong: UTXO maintenance used to imply having the full database. Since the introduction of pruning this is however no longer the case.

> **Comments:**
> **username_2**: Its also worthwhile to highlight that full nodes that store the whole blockchain also help bootstraping new users that join the network. AFAIK, to date, there is no implementation to distribute the UTXO set.  
> **username_0**: @renlord is there any reason to not supporting UTXO set distribution? If every Full Node store only the UTXO set, would it cause any problem?  
> **username_1**: You can't verify that a UTXO set is correct without verifying its history. For minimizing trust, the full data must be available. However, it does not mean everyone needs to revalidate the whole thing every time. There is ongoing work on distributing UTXO sets in the assumeutxo project.  
> **username_3**: So why full nodes store the whole blockchain? Aren't spent transactions useless to store?  
> **username_1**: @username_3 They don't. Bitcoin Core at least has the option to "prune" which means deleting block data after receiving and processing it. But it still requires downloading the full blocks once, because that's the only way to convince a node about what the current UTXO set is. It also implies that someone has to be able to provide that block data, creating a need for non-pruned full nodes.  

---

