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.

  • 1
    How old is this course? It seems outdated. Dec 23, 2019 at 7:58
  • 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
    Dec 23, 2019 at 10:38
  • Also, in my question I said that "only having UTXO is sufficient to prevent double spending". Is that a correct statement?
    – meowongac
    Dec 23, 2019 at 10:42

1 Answer 1


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.

  • 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.
    – rny
    Dec 23, 2019 at 10:50
  • @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
    Dec 23, 2019 at 11:03
  • 2
    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. Dec 23, 2019 at 11:05
  • So why full nodes store the whole blockchain? Aren't spent transactions useless to store? Jun 2, 2022 at 7:52
  • 1
    @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. Jun 2, 2022 at 12:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.