Proof-of-Work update is not a threat to miners, it is a necessity for users
UPDATE: Luke-Jr pointed out that there is a soft forkable way of giving a way to the user to opt-out. I need more time to digest that, as I am unfamiliar with the idea, but it would indeed change the “Safe Hard Fork” part of this article, as miners would not have to mine empty blocks on the original chain. The existence of such alternative would make mining empty block on old chain clearly hostile.
My initial reaction when some people in the community were talking about a Proof of Work change was: What the Fuck! Where are the sane people.
To quote Erik Voorkhes, this was my initial reaction:
Then rumors came to me, Gavin Andresen being morally compromised, Antpool, Roger, planning to pour money at the problem, and finally Bitmain which seems to abuse their monopoly. Or again this one. The three last links are of course only rumors, possibly spread by trolls, but should not be dismissed as impossible.
Proof-of-Work was seen as an attack against the miners by the developers, when it is quite the contrary: It is a defense for the users.
I want to argue the following:
Even in the case of safe and uncontroversial Hard Fork, providing a Proof of Work update for users wanting to opt out is an ethical and technical necessity.
So I will explain what I call safe hard fork (which are not necessarily uncontroverial). And the minimum I would support as morally and technically appropriate for making an Hard Fork.
What is a Safe Hard Fork?
I define a safe hard fork as an hard fork which attempt to prevent replay attack and coin split by changing the consensus rules so that miners still mine empty blocks on the original chain.
As such, Bitmain trying to stop the original chain by mining empty block is NOT a safe hard fork. It is an attack against the users of the original chain.
However, Bitcoin Unlimited changing their Proof of Work such that they continuously mine empty block on the original chain IS a safe hard fork. This is NOT an attack. (~and fix the replay problem~ EDIT: actually I was wrong, by itself, it does not provide anti-replay)
But then, what if users do not want to join the new rules?
Their only way of dealing with the problem is a Proof of Work change.
As a user of the original chain, I will certainly not join another chain if I do not agree with the rules, so I would support a proof of work change.
What would be a Perfect Hard Fork I would support?
As a user, I will support hard forks that fill out those conditions:
- I agree that the new rules are technically safe and sound
- There is wide agreement in the community (Uncontroversial)
- This is a Safe Hard Fork as defined above,
- The full node MUST include a configurable Proof of Work change, disabled by default, for users wishing to opt-out,
- There is a well defined flag date, giving time for update, (I would be fine with 6 months),
- It does not break my code, (untested code going suddenly in production, is a sure recipe for disaster)
- Extensively reviewed by developers I respect,
The need to have a configurable Proof-of-Work change is an ethical obligations for developers who do not want to be accused of forcing some rules to a subset of users, whatever small it is.
I support Proof-of-Work change development initiative. Not as a weapon against miners, but as an ethical necessity for any planned Perfect Hard Fork. (defined above)
Now, I hope that Bitcoin Unlimited implements a Safe Hard Fork. Miners will better be sure that users will follow them, and this is exactly what we want in Bitcoin. The added benefice of Emergent Consensus need to beat the advantages of changing Proof-of-Work, this is not a small task, but it is exactly what I want Bitcoin to be.
I personally hope that Bitcoin Core includes a readily configurable Proof-of-Work change, not because of Bitcoin Unlimited, but because I hope to have a Perfect Hard Fork in the future.
This defense makes it risky for miners and ASIC manufacturers to make a move they think controversial.
I would then help this initiative by supporting the new Proof-of-Work in NBitcoin as well.
Disclaimer: This post is only my personal view and do not necessarily reflect Core at large.