Adoption of a softfork is voluntary on node operators. A softfork can add a new rule to the network and a majority of miners are able to force this new rule on the network. As the whitepaper says:
Miner's can therefore force new rules on the network. Instead of using 51%, Core are being respectful and ensuring consensus by using a 95% threshold for their softforks.
A hardfork is an elimination of an existing rule. The whitepaper makes no mention of this. This is the most extreme kind of change as any change on the network can occur, for example confiscation of others peoples bitcoin. In order to do this all nodes need to upgrade, both mining and non mining nodes. If a non mining node does not upgrade, it will end up on a different chain, this is not my opinion but a fact. This how the nodes behave in reality. This change has never occurred in Bitcoin's history.
One thing I hope we can agree on, to paraphrase John Lennon, is to at least try to get strong consensus, "all we are saying, is give strong consensus a chance".
I don't understand why you see the consensus requirements between hard and soft fork so differently. Both hard and soft forks can lead to equally bad results (e.g., we can confiscate coins with a soft fork). I think we should focus on the reality of what it takes to push through a hard or soft fork rather than the religious dogma that soft forks and hard forks are different on an ethical/moral level.
Like you said, a soft fork adds to the rule set whereas a hard fork removes from the rule set. That's it! Rolling out a hard fork is like rolling out a soft fork but in reverse. For a soft-forking change, nodes can upgrade asynchronously
after the miners start enforcing a new rule. For a hard-forking change, nodes can upgrade asynchronously
before the miners stop enforcing an old rule.
To make it more concrete, here's an example:
WHAT WOULD A SOFT-FORKING CHANGE FROM 2MB BACK TO 1MB LOOK LIKE?
Ans. Miners would coordinate some time in the future,
t0, where they agree to no longer build on top of blocks greater than 1MB; that is, at time
t =
t0 they would enforce a more-restrictive rule set.
Non-mining nodes may elect to enforce the restricted rule set (
i.e., begin rejecting blocks greater than 1MB) at any time
t >=
t0. However, they CANNOT enforce the restricted rule set for
t <
t0, without the risk of forking themselves off the network.
WHAT SHOULD A HARD-FORKING CHANGE FROM 1MB TO 2MB LOOK LIKE?
Ans. Miners would coordinate some point in the future, t0, where they agree to build on top of blocks greater than 1MB; that is, at time
t =
t0 they would enforce a less-restrictive rule set.
Non-mining nodes may elect to stop enforcing the old rule set (i.e., begin accepting blocks greater than 1MB) at any time
t <=
t0. However, they CANNOT continue to enforce the old rule set for
t >
t0, without the risk of forking themselves off the network.
My questions for
@jonny1000 are:
- If nodes decide "hey, I want to allow blocks bigger than 1 MB today" and so cease to enforce the 1MB limit, how is this an attack?
- If miners see that most nodes will already accept larger blocks and decide to start making them, how is this an attack?
Personally, I see this process of nodes asynchronously ceasing to enforce rules they no longer agree with as exactly how consensus should emerge.