BIP 50 describes the 2013 event in which a block chain fork persisted for several hours. Its first paragraph reads:

A block that had a larger number of total transaction inputs than previously seen was mined and broadcast. Bitcoin 0.8 nodes were able to handle this, but some pre-0.8 Bitcoin nodes rejected it, causing an unexpected hard fork of the chain [my emphasis]. The pre-0.8 incompatible chain at that point had around 60% of the hash power, ensuring that the split did not automatically resolve.

I interpret this to mean that the term "hard fork" describes a state of the network. Some nodes have accepted a block, but others have rejected it. The nodes accepting the questionable block keep and extend it. The nodes rejecting the block neither keep nor extend it, but rather build their own branch. The resulting "fork" is only visible to nodes which have accepted the questionable block.

However, the Wiki has this to say about a hard fork:

A hardfork is a change to the bitcoin protocol that makes previously invalid blocks/transactions valid, and therefore requires all users to upgrade.

In other words, a hard fork is a kind of update to Bitcoin Core (given that Bitcoin Core is the protocol). The idea was repeated in the top answer to this SE question.

The difference is subtle, but important. For example, consider the question: has a hard fork ever occurred?

At least one Core developer says that Bitcoin has never experienced a hard fork, apparently using the Wiki definition. The 2013 fork was not caused by a software update (according to some new, but undocumented information), but rather was (caused by?) nondeterministic behavior that would have happened even without the update.

The answer seems to depend on how you define a hard fork. If a hard fork is a condition of the network, the answer seems to be "yes". But if a hard fork is a kind of software update, the answer seems to be "no".

It's not hard to see how a software update could lead to a persistent block chain fork as seen by some nodes. So clearly the two ideas are connected. But imprecise language around hard forks can lead to confusion, and, more importantly, to incorrect conclusions.

So which is it? Does "hard fork" describe a condition of the network, or a software update?

  • 1
    BIP50 since got updated to remove the term "hard fork". Since your only source for the "network state" interpretation seems to be that text, maybe that settles it for you? – ZakW Jul 9 '16 at 22:23

So which is it? Does "hard fork" describe a condition of the network, or a software update?

Either is acceptable. You can say that version so-and-so causes a fork, and you can say that the network is currently forked.

Was the March 2013 fork a hardfork?

It depends on your definition. The March 2013 incident initially appeared to be a hard-fork, but a later investigation showed that it was possible to trigger the issue even when all nodes were running the same version.

Quoting from BIP50:

This would be an issue even if the entire network was running version 0.7.2. It is theoretically possible for one 0.7.2 node to create a block that others are unable to validate, or for 0.7.2 nodes to create block re-orgs that peers cannot validate, because the contents of each node's blkindex.dat database is not identical, and the number of locks required depends on the exact arrangement of the blkindex.dat on disk (locks are acquired per-page).

However, it was a hardfork in the sense that newer clients would create and validate blocks that an older client would not see as valid.

  • A little elaboration on how context-sensitive this bug was in practice, from Greg Maxwell: "... not only did only some [0.7.2 nodes] reject [the problem blocks] but they only rejected that particular one when they saw it as part of a reorg." – ZakW Jul 9 '16 at 22:35

In addition to the March 2013 bug, the bug introducing CVE-2018-17144 was also a hard fork, even if there was no chain split.

The fix was a soft fork, since it restored the old consensus rules.

@Rich Apodaca, i believe that you may have answered your question somehow, as you pointed out that it was mostly a minor incompatibility of installed versions of bitcoind.

Maybe you will agree with me that hardfork would have to be an incompatibility of design between two versions of the same protocol. Take for instance one altcoin, like FeatherCoin, that abandoned their previous algorithm for Proof of Work to adopt another one, ASIC-resistant, and incompatible with the past one.

To directly answer your question, "Has a hard fork ever occurred?", No.

The 2013 event that you reference was a temporary fork or chain split.

A hard fork would be both the result of deliberate action (as you have quoted) and persistent. If there is no consensus at the point of a hard fork, two distinct forward chains emerge. You may appreciate more information on forks in this response: link

  • A hard fork doesn't need to be deliberate, why do you think that? It is a technical term. CVE-2018-17144 was a hard fork, but it wasn't deliberate. – Janus Troelsen Sep 24 at 17:00
  • @JanusTroelsen A change in the software is not a hard fork. A hard fork is a condition of the blockchain. As it is, unpatched nodes could accept a block outside of what consensus allows but since already it is estimated more than 50% of the Bitcoin hashrate is upgraded there is no realistic probability of a chain split. If anything the situation is more similar to a soft fork and in any case, there is no change to the consensus. – Willtech Sep 25 at 5:27
  • As you can see in the question formulation, there are at least two definitions of hard fork. – Janus Troelsen Sep 25 at 9:20

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.