Josh Stark

Posted on Sep 19, 2021Read on Mirror.xyz

Additive and Subtractive Hard Forks

đź‘‹ Note: Originally published August 15, 2016 on Medium.

While thinking about the lessons of the DAO hard fork I’ve been reaching for terminology necessary to make a useful distinction, and thought it would be useful to set it out here.

The DAO hard fork was controversial. Some believe that forking the network to return stolen funds was a betrayal of the basic principles that animate the ethereum project. Others viewed it as a pragmatic solution that, though it shouldn’t be used often, was necessary in this case.

Hard forks will often be contentious, even when they are changing the protocol rather than “undoing” the history of transactions. Because a hard fork will, by definition, break backwards-compatibility, the entire community must agree on a change in order to continue together on the same blockchain. If unanimity is not achieved, the minority can reject the change by continuing as a distinct blockchain.

When a hard fork is proposed, we debate the merits of the change that it would introduce. Will rescuing the DAO funds set a bad precedent? Will increasing the block size centralize the bitcoin network? Typically, then, when people say that a hard fork is “good” or “bad” they are commenting on whether the changes introduced by the hard fork ought to be accepted or rejected.

But as we’ve seen in this case, sometimes a minority cannot be persuaded and they decide to continue with their own blockchain. The hard-fork results in two blockchains, diverging from a common ancestor. Let’s call this a contested fork.

The possibility of a contested fork requires us to ask a second-order question: when is it good that the network diverges after a hard fork? When is it bad? What are the benefits and costs of either?

In some cases, diverging into two blockchains might benefit both chains. First, it’s possible that a blockchain could want to grow in two different directions that are, for some reason, mutually exclusive. For example, imagine a blockchain wants to add a new feature “A” that, while adding some utility, would reduce the ability of that blockchain to perform a different function “B”. Those who place more importance on feature A will support the fork, and those who place more importance on feature B will advocate rejecting the fork. In that case, splitting into two blockchains might be for the best if it allows each project to pursue a distinct feature set.

A contentious fork could also be a good thing where there is a sincere ideological divide within that blockchain’s community. If the community is divided into two populations that have a different set of beliefs about what values and principles ought to guide decision-making about that blockchain, then it might be that each would be able to better govern their blockchains separately, rather than have to argue and compete within the confines of a single platform, resulting in gridlock or ineffective decision making. In other words, it may be the case that the governance priorities of the blockchain’s community cannot be reconciled.

But splitting a blockchain into two also has costs. First, each chain will individually have less hashing power than their shared ancestor, lowering the cost of mounting a 51% attack against either continuing chain. Second, blockchains benefit from network effects: the whole platform has more value when there are more people using it and building applications on it. Splitting the community of developers and companies between two blockchains could, the argument goes, slow development of the overall ecosystem.

Clarifying the benefits and costs of a contested fork gives us a simple framework for assessing them. When the benefits of a contested fork outweigh the costs, let’s call that an additive fork. The resulting separate chains are, on the whole, more valuable than when they were a single chain.

When the opposite is true — when the loss of network effects and cooperation outweighs the benefits of continuing as separate chains — lets call that a subtractive fork.

Whenever a hard fork is proposed, we need to have two discussions: first, whether the change introduced by the hard fork should be accepted. When the community does not reach a unanimous view on the first question, we need to ask the second: in light of that disagreement, is it worth splitting the network? Would this divergence be additive or subtractive to the system as a whole?

Of course, making this distinction doesn’t help us answer the question itself. A lot of the factors that determine whether a fork is additive or subtractive are speculative or novel. A fork that appears additive may still end with the minority chain withering away, even if it had great potential in the beginning.

Moreover, the factors that determine whether a fork is additive or subtractive will likely change over time. When there is a much larger developer community, it may be less costly to split them between two distinct blockchains. When the ethereum platform is more feature-complete and the value of ether is tied more to present capabilities than future expectations, reducing active development on one chain or another might be less important to us. And when it is easier for different chains to interoperate, the costs of splitting them might be far less than today.