Could’ve woken up today without having to skim through 30-ish posts of flaming.
Anyway, a while ago I wrote a technical bulletin about changing the TX format (saying we should NOT change it in a breaking way), and as part of it I touched on a framework for evaluating changes, gonna copy here the most relevant parts:
Reasons for Change
We can define two broad categories of rationales:
- Maintenance
- New features
Optimization is part of maintenance, and there were proposals to optimize the format.
It was never really necessary because benefits would be some savings in node operating costs, where costs and risks would clearly outweigh the benefits.
Some catastrophic security flaw would be another, extreme, example of maintenance.
In this scenario, fixing the flaw would be a matter of survival for the network, and if breaking the format or commitment scheme was the only way, then it would have to be done.
Both transaction format and commitment scheme have been tested for almost 12 years, and we see it as unlikely that a severe security flaw would be discovered now.
There were considerations to increase precision of base units (fractional satoshis), which is presently not necessary.
Only in the future, if the value of Bitcoin Cash would grow so much that it would be impractical to make small transactions, could it become a matter of great importance.
The cost of change at a later date would be greater because more software would be reliant on the fixed format and therefore affected.
Would that be a good reason to upgrade the format now while the cost is smaller?
That would be the case only if changing the format would be the only possible way to increase precision.
Similarly, there were considerations to permanently fix transaction malleability.
This could be done by moving signatures from unlocking script into a dedicated transaction field.
They would then be referenced from the unlocking script by signature opcodes, so signatures could sign inputs unlocking scripts, too.
As we will see below, a new field can be added without changing the transaction format.
With new features, we must evaluate the costs vs benefits.
The benefits will be contained to some subset of users who would use the feature.
Maybe the feature would attract more users, in which case everyone would reap the benefits through increased value of Bitcoin Cash.
Some kinds of features can have vaguely defined benefits because their value can come from enabled innovations beyond our control or knowledge, benefits could be speculative.
Burden of proof for benefits is in proving at least some threshold level that would outweigh the costs.
How to set the threshold level when the costs are unknowable? It is impossible.
We should instead strive to make the costs side of the scale knowable.
If there is an alternative approach that has knowable costs and risks, then it is more likely that the alternative would stand a better chance of being implemented.
Conditions for Change
Because there exists an alternative where the cost would be contained to node software, a proposal to change it by breaking it would have to demonstrate that:
- Benefits of the breaking change are significantly greater than the benefits of a non-breaking alternative or at least, any difference in benefits must make up for the difference in costs.
- Majority of known stakeholders have been accounted for in cost estimation, as many as reasonably practicable.
- Majority of known stakeholders have accepted to bear the cost, even knowing there is an alternative which would not require them to bear it.
On the other hand, a non-breaking alternative would have to demonstrate that:
- Benefits are greater than the cost.
- Node developers and miners are OK with the change.
- Other stakeholders are not affected, unless they want to use the new feature.
We can observe here that the burden of proof is much greater for a breaking, non-backwards-compatible change.
It would have to involve the broad ecosystem, everyone who could have their software broken by the change.
The coordination and consensus building effort would be a big meta cost shared by all, and there is no guarantee that the meta cost would be recouped by successful activation.
This is not a matter of soft forking vs hard forking, which are concepts that pertain solely to the nature of node consensus with no consideration for other software and services.
Hard fork protocol upgrades are the preferred way for Bitcoin Cash.
Most hard forks are backwards compatible with regards to dependent software and costs have been contained to nodes and miners.
We can observe here that not all hard forks are the same.
With the non-breaking type everyone can simply upgrade the node, and all their other software will continue to function.
With the breaking type, everyone would have to update not just the node, but all their dependent software.
Note that presently there is one Bitcoin CasH Improvement Proposal (CHIP) which proposes to roll out new features in a way that would break both the TX FORMAT and TX ID:
The CHIP owner has made a good start in attempting to evaluate costs and risks, but because of nature of these costs and risks it is hard to estimate how much more work would be required to capture enough of them, or to even decide how much would be enough to be as-much-as-reasonably-practicable.