News for hackers. Stuff that matters.
Re:Hidden surprises in the Bitcoin blockchain and how they a... by mike_hearn on Saturday August 23, 2014 @07:24PM (#8217168)
There's a hidden surprise in store for people who think this is a neat trick to ensure their message lasts forever: there's no guarantee it will work.

In future some nodes, probably many, will become "pruning" nodes. That means they'll throw old blocks away and won't be able to serve them anymore. It's a popular misconception that it is technically necessary to store all blocks to run a fully functioning Bitcoin node. So long term storage and serving of the full chain will slowly start to migrate to more specialised archival nodes that have cheap bandwidth and storage to spare. At that point stuffing data into the block chain is not much different to just uploading it to a bunch of servers.

But even those nodes don't have to store your data forever, for two reasons.

Firstly, although being able to reconstruct today's ledger by replaying from day zero is a rather nice feature from an academic perspective, it's not actually necessary for Bitcoin to function. Even if every archival node deleted some old blocks, all that'd mean is you had to start your node from a snapshot of the database taken at the earliest block time and work from there. This means trusting the snapshot in some sense, but if many people have calculated that snapshot and attested to it (especially if they've done so in future blocks!), the practical security difference is quite small. Certainly it wouldn't mean Bitcoin stopped working or anything.

And secondly, as Satoshi described in his original white paper, the way blocks are structured means transactions can be deleted forever and yet the chain can still be replayed, if none of the outputs of those transactions were ever spent. Given that outputs which store only files cannot be spent, it's safe to both delete them from the UTXO set, and delete them from the archived blocks too (such a block would have to be sent using the partial merkle tree format already supported in the protocol). As long as identification of the outputs is reliable/conservative so there's no chance of misidentifying a spendable output as unspendable, you don't even need consensus to do this: just delete the guff from your local database and only serve blocks to nodes that understand partial block downloads, and you're done. Of course it's better if there is consensus, so perhaps some future version of Bitcoin will schedule certain transaction outputs for destruction as part of some other upgrade.

Re:Hidden surprises in the Bitcoin blockchain and how they a... by AnthonyMouse on Saturday August 23, 2014 @09:16PM (#8217356)
> Even if every archival node deleted some old blocks, all that'd mean is you had to start your node from a snapshot of the database taken at the earliest block time and work from there.

Why would every archival node delete the old blocks? Wouldn't it be prudent for at least a significant minority of nodes to keep copies of the entire blockchain in case there is ever any dispute about the provenance of the snapshot?

> Given that outputs which store only files cannot be spent

Is that a hard requirement? There is no feasible way to encode both a file and a legitimate transaction into the same block?