Why block height is required in coinbase?

6

2

While reading bitcoin source I found this short comment:

// Height first in coinbase required for block.version=2

(From https://github.com/bitcoin/bitcoin/blob/master/src/miner.cpp#L338).

Why this is required? Does it prevent some misuse or attack?

I found that this change was introduced in BIP-0034. In relevant pull request it is justified by following points:

Putting the height in the coinbase is desired for at least two reasons:

  1. It guarantees that every subsequent block and transaction hash is unique.
  2. It can be used to better reason about plausible difficulty for not-yet-connected blocks.

But for me this explains nothing: I don't see how adding height guarantees unique block hashes and I don't understand what is "plausible difficulty for not-yet-connected blocks".

max taldykin

Posted 2014-10-01T20:33:58.117

Reputation: 367

Answers

6

In his comment @amaclin pointed to BIP-30 which provides motivation for BIP-34.

I still don't understand what is "to better reason about plausible difficulty for not-yet-connected blocks" but it seems that the sole point of BIP-34 is to prevent intentional creation of duplicate coinbase transactions.

According BIP-30 they can be used in several attacks:

Recently, an attack that exploits the reference implementation's dealing with duplicate transactions was described and demonstrated. It allows reverting fully-confirmed transactions to a single confirmation, making them vulnerable to become unspendable entirely. Another attack is possible that allows forking the block chain for a subset of the network.

This answer by Pieter Wuille explains blockchain forking in more detail.


Contrary to the explanation in BIP-34 pull request, adding block height to coinbase does not guarantee that every subsequent transaction hash is unique. It only makes harder to create transactions with same hash intentionally. There is still possibility that some unrelated transactions will clash.

max taldykin

Posted 2014-10-01T20:33:58.117

Reputation: 367

2

It doesn't guarantee that block hashes are unique, because that was already guaranteed, because the previous block hash is part of the block header.

It does guarantee that coinbase transactions will be unique.

Nick ODell

Posted 2014-10-01T20:33:58.117

Reputation: 26 536

Can you please explain how previous block hash guarantees block hash uniqueness?max taldykin 2014-10-02T05:38:55.983

Why do you think that it is not very important that there were duplicate coinbase transactions? It looks like that the sole reason of adding height is to prevent duplicate coinbase transactions.max taldykin 2014-10-02T05:42:49.287

BIP-30 prevents duplicate coinbase transactions. Adding block height allows the programs be less complicated while parsing arriving blocksamaclin 2014-10-02T07:00:27.420

@amaclin Thanks for pointing to BIP-30. I think this is the real answer to the "Why?" part of the question (please consider adding this to your answer).

max taldykin 2014-10-02T07:22:27.540

1It is important for coinbase transactions to be unique because duplicates can't be referred to because they have the same transaction I'd as the first. Therefore they be spent and the 25 bitcoins (currently) are lost.Jannes 2014-10-02T23:32:48.660

@Jannes Sure. But that doesn't really matter. It's happened, what, once or twice in the history of Bitcoin?Nick ODell 2014-10-20T02:41:23.527

It does matter. Read the accepted answer. And the reason it hasn't happens more often is because it's now impossible. Which means that it was apparently 'important' enough to fix.Jannes 2014-10-20T06:33:29.860

1@Jannes That's a good point. You've convinced me, and I've removed the part of my post that was wrong.Nick ODell 2014-10-20T17:01:09.073

0

adding height guarantees unique block hashes with the probability 1 - 1/(2256) which is very close to 1

different coinbase scripts produce different merkle root which produce different block hashes

amaclin

Posted 2014-10-01T20:33:58.117

Reputation: 5 763

I don't see why this is true. We have 2^542 possible blocks (542 = 640 bits block size - 32 bits for version - 64 zeros in prev block hash) and 2^192 valid block hashes (192 = 256 - 64 zeroes). So there are 2^350 possible duplicates. How you got 1 - 1/(2^256) from this?max taldykin 2014-10-02T05:29:38.163

The same is for merkle roots: different coinbase does not guarantee different merkle roots. It guarantees that you can't intentionally create blocks with equal merkle roots.max taldykin 2014-10-02T05:32:54.573

There are 2^256 hashes. So the collision probability between previous and next block is 1/2^256amaclin 2014-10-02T06:56:08.297

Why do you consider only previous block? And how adding height increases uniqueness probability?max taldykin 2014-10-02T07:04:43.710

it does not increase/decrease probability of collision. do not read between linesamaclin 2014-10-02T07:08:06.220

"adding height guarantees unique block hashes with the probability 1 - 1/(2^256)". What will be that probability without height added?max taldykin 2014-10-02T07:11:06.917

without height added the probability will be... hmmm... give me a pencil and a paper... are you also Russian? why do we speak in English?... OK! My calculation is done! The probability will be 1 - 1/(2^256). "guarantees" does not mean "increases to" in this contextamaclin 2014-10-02T07:42:04.000

Let us continue this discussion in chat.

max taldykin 2014-10-02T07:53:13.217