<p>The problem with this proposal is that it relies on data that is external to the blockchain (namely, data that is in another branch of the chain).</p>
<p>The validity of a block should be a function only of its contents, and the contents of anything the block commits to through hashes. Specifically, that includes all ancestors of the block, as the block header contains the hash of the parent block, and so on. This means that nodes can independently determine validity, without needing assumptions about what data is available to whom.</p>
<p>More concretely, your proposal has the following problem: there is no &quot;initial&quot; chain, and &quot;replacement&quot; chain. Some nodes will see one first, and others will see the other first. This happens normally, when a single-block fork appears due to two blocks at the same height being found approximately simultaneously. It also happens during initial synchronization with the network: a node could be connected to an attacker who provides a rewritten chain first, and only later connects to an honest node that gives the &quot;real&quot; chain.</p>
<p>In both these cases, the rules must be so that eventually all nodes agree on which chain is the real one, or at least the probability for disagreements to remain should decrease over time.</p>
<p>If you require that a replacement chain contains all transactions the original chain has, then nodes who saw &quot;the other&quot; chain first will always reject the real one, as from their perspective, it is the real chain that is trying to replace the chain they already had.</p>
<p>And as forks occur naturally, this would be a disaster: if two blocks are created at the same height, with different transactions (as there cannot be any guarantee that two miners in different geographical locations have identical mempools; this is simply a result of the finite speed of light), nodes that see block A first will reject B as an invalid replacement, and nodes that see block B first will reject A as an invalid replacement. The result would simply mean that any network fork becomes permanent, and the network no longer converges.</p>

CC BY-SA 4.0
2021-04-07T01:32:30.693Z
2021-04-07T01:32:30.693Z
Pieter Wuille
<p>If nodes only accepted new valid blockchains that contained all the data of the old blockchain, then miners will still be able to add blocks to the current blockchain because their blockchain will contain all the data of the old blockchain and the additional data of the new block.</p>
<p>However, double spending will become virtually impossible because if a malicious miner rewrote the blockchain and completed the proof-of-work so they can double-spend, they will be unsuccessful because nodes will only accept blockchains that contain all the data of the old blockchain. A blockchain with a double spend in it will not contain all the data of the old blockchain as it will not contain the double-spenders transaction, so why was this not programmed into the bitcoin protocol?</p>

CC BY-SA 4.0
2021-04-19T19:58:01.857Z
I've voted leave open, since the topics are similar but not close enough related to be duplicates.
Murch
CC BY-SA 4.0
2021-04-06T07:15:15.680Z
Does this answer your question? [Why does Bitcoin no longer have checkpoints?](https://bitcoin.stackexchange.com/questions/75733/why-does-bitcoin-no-longer-have-checkpoints)
chytrik
<blockchain><doublespend>
Why don't bitcoin nodes invalidate new blockchains that don't contain all the data of the old blockchain?
CCS
# Why don't bitcoin nodes invalidate new blockchains that don't contain all the data of the old blockchain?

(Asked by: username_0 on 2021-04-06)

If nodes only accepted new valid blockchains that contained all the data of the old blockchain, then miners will still be able to add blocks to the current blockchain because their blockchain will contain all the data of the old blockchain and the additional data of the new block.

However, double spending will become virtually impossible because if a malicious miner rewrote the blockchain and completed the proof-of-work so they can double-spend, they will be unsuccessful because nodes will only accept blockchains that contain all the data of the old blockchain. A blockchain with a double spend in it will not contain all the data of the old blockchain as it will not contain the double-spenders transaction, so why was this not programmed into the bitcoin protocol?

**Tags:** blockchain, doublespend

> **Comments:**
> **username_2**: Does this answer your question? [Why does Bitcoin no longer have checkpoints?](https://bitcoin.stackexchange.com/questions/75733/why-does-bitcoin-no-longer-have-checkpoints)  
> **username_1**: I've voted leave open, since the topics are similar but not close enough related to be duplicates.  

---

## 1 answers

### Answer by username_3 on 2021-04-07. Score: 2 | Accepted answer

The problem with this proposal is that it relies on data that is external to the blockchain (namely, data that is in another branch of the chain).

The validity of a block should be a function only of its contents, and the contents of anything the block commits to through hashes. Specifically, that includes all ancestors of the block, as the block header contains the hash of the parent block, and so on. This means that nodes can independently determine validity, without needing assumptions about what data is available to whom.

More concretely, your proposal has the following problem: there is no "initial" chain, and "replacement" chain. Some nodes will see one first, and others will see the other first. This happens normally, when a single-block fork appears due to two blocks at the same height being found approximately simultaneously. It also happens during initial synchronization with the network: a node could be connected to an attacker who provides a rewritten chain first, and only later connects to an honest node that gives the "real" chain.

In both these cases, the rules must be so that eventually all nodes agree on which chain is the real one, or at least the probability for disagreements to remain should decrease over time.

If you require that a replacement chain contains all transactions the original chain has, then nodes who saw "the other" chain first will always reject the real one, as from their perspective, it is the real chain that is trying to replace the chain they already had.

And as forks occur naturally, this would be a disaster: if two blocks are created at the same height, with different transactions (as there cannot be any guarantee that two miners in different geographical locations have identical mempools; this is simply a result of the finite speed of light), nodes that see block A first will reject B as an invalid replacement, and nodes that see block B first will reject A as an invalid replacement. The result would simply mean that any network fork becomes permanent, and the network no longer converges.


---

