Of course, the previous blockchains should be available at all times as well, whoever may need them. We may have to tie them up into one whole using links or whatever so that we could always trace all transactions back to the genesis block.
The previous blocks wouldn't be stored on your disk though right? If they were then you're still storing the whole blockchain.
Early today I was thinking about the feasibility of partitioning the chain into linkable segments in the following way:
Let's assume at some point in the future the blockchain is 300 GB, a crude (but fine for this quick example) technique would be to split it into 3 parts; each containing 100GB. If you don't want to store the first 200 GB since it's irrelevant to you (but you'd still like to verify transactions yourself) you could just store some type of Merkle hash of all the blocks of the first 100GB and another for the second 100GB.
If one day you decide you want to validate everything since the genesis block you could ask your peers for the blockchains you don't have (
the first 200GB) by providing your hashes. To confirm that it's the real deal, you would need to hash each chain you get to see if it matches your hash of that chain.
- I'm not sure of the best way to get the hash in the first place, getting it from other nodes seems risky, so maybe you'd need to download segments of blocks from archival nodes then hash the segment.
Once you've done that you can discard the chain (freeing up many GB of space) and just keep the hash for reference.
I'm pretty sure you could verify the entire chain from start to finish by doing this continually for each segment. If it worked you could save a lot of storage space, though I can imagine some problems that may arise, some off the top of my head would be
- it would take an absurd amount of time to validate the whole chain (even compared to doing it the normal way)
- if all nodes stored part of the full chain, it's possible that sections of the chain could be lost forever
- what determines where the chain is partitioned? What if you hashed 1 block more than anyone else in your partition so now your hash is incompatible with everyone else. You'd need to redo the work
It's probably a very bad idea to do this, but it's fun to think about it