A collision of block hashes would seemingly break most Bitcoin implementations in horrible and surprising methods, but it surely’s merely not going to occur except you harness all of the vitality within the observable universe, after which some, for the only purpuse of discovering the collision, or uncover a cryptographic weak point in SHA-256. Sure, rising issue theoretically makes block hash collisions extra seemingly, however to not a level that will ever matter.
I used to be questioning why block ids aren’t outlined because the hash of the entire block reasonably than their headers
The header contains the transaction merkle tree root, so it not directly commits to the complete contents of the block anyway, and this fashion is extra elegant and environment friendly:
- When a node hears a few new block, it first downloads and validates its header for proof of labor. This prevents different nodes from cheaply spamming it with whole pretend blocks that it might waste time validating, solely blocks with legitimate proof of labor are even downloaded.
- Equally, throughout preliminary block obtain, nodes use a “headers-first” synchronization technique, which permits them to know the block hash of each block in probably the most proof of labor chain simply by downloading and validating the headers. This prevents some kinds of DoS assaults, makes parallel block downloads simpler, and possibly different advantages.
- SPV wallets and different gentle purchasers can use the headers to validate transaction inclusion within the chain. (Their limitation is that they’ll solely validate the proof of labor, not different consensus guidelines, the belief is that miners would not waste hashpower on mining invalid blocks.)

