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.

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?

5 Answers
5

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.

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."
– ZakWJul 9 '16 at 22:35

@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.

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 TroelsenSep 24 '18 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.
– WilltechSep 25 '18 at 5:27

As you can see in the question formulation, there are at least two definitions of hard fork.
– Janus TroelsenSep 25 '18 at 9:20