-
Notifications
You must be signed in to change notification settings - Fork 5.6k
BIP8: allow some MUST_SIGNAL blocks to not signal #1021
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BIP8: allow some MUST_SIGNAL blocks to not signal #1021
Conversation
Using the same threshold for MUST_SIGNAL as STARTED means that any chain that would have resulted in activation with lockinontimeout=false will also result in activation with lockinontimeout=true (and vice-versa). This reduces the ways in which a consensus split can occur, and avoids a way in which miners could attempt to discourage users from setting lockinontimeout=true.
One thing to consider is behaviour when the parameters for a deployment are changed while it is in progress. The "miners attempt to discourage users from setting lockinontimeout=true" scenario is one of those in a sense. In more detail: Another parameter change case worth considering, is reducing the timeoutheight. If a node has Decreasing the
Without mandatory signalling during LOCKED_IN, the incompatibility changes -- activation for the first node by X blocks signalling does not affect the second node at all, so that the first node may consider the deployment to have activated while the second node does not, and this obviously becomes complicated if the second node has In general if it is desirable to reduce the threshold for activation, I think taking the BIP-91 approach and instead introducing a new deployment with a reduced threshold that then triggers mandatory signalling of the original deployment at its original threshold seems a much safer approach. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This makes a lot of sense, because it "allows the code to cope with a small mistake like a single block failing to signal automatically" and otherwise there can be a chainsplit between { lioto=true, timeout = T }
and { lioto = false, timeout = T }
parameters despite the softfork being ACTIVE on both chains.
Fwiw, I implemented this BIP (in haskell, so it's a bit different than the pseudocode, EDIT: see here) and "quickcheck"ed that the following property holds for a large number of random chains:
- if the chain is valid under
{ lioto = true, timeout = T }
, it's valid under{ lioto = false, timeout >= T }
- if the chain is valid under
{ lioto = false, timeout = T }
and the bip8 state is LockedIn or Active, it's valid under{ lioto = true, timeout = T }
(only 2. wouldn't be true without this PR)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ack afe97b2
ACK |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK
ACK after @jonasnick pointed out it actually simplifies the game theory. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
concept NACK: Imo complexity+overengineering not worth the win. Added complexity may have some non-linear consequences and without the clear and strong need shouldn't be merged. PR seems to save some revenues for non-careful miners at the expense of higher complexity-driven potential risks for broader community...
Following IRC discussion I tend to agree that the "serious win" here is to make UASF a bit more risky once we are there; however the current definition of the algorithm logic is very obscure and must be improved (modulo division + reverse counting with the forward counting in the same block - what can go wrong with this here when we are in UASF? Really seems to me like a non-totally predictable thing). Removing concept NACK and replacing with "need to be re-worked" in the algorithm part and re-reviewed. |
ACK. Avoid divergence. |
ACK 9a119ce |
ACK |
After the NACKs here, @jonasnick pointed out that without this, the chain could activate Taproot while lockinontimeout=true fail to follow that Taproot-activated chain. Therefore, I consider this a strict bugfix to BIP 8: ACK. |
Post merge ACK afe97b2 |
Post merge ACK |
Based on #1020 since they touch neighbouring lines in the BIP.
Using the same threshold for MUST_SIGNAL as STARTED means that any chain
that would have resulted in activation with lockinontimeout=false will
also result in activation with lockinontimeout=true (and vice-versa).
This reduces the ways in which a consensus split can occur, and avoids
a way in which miners could attempt to discourage users from setting
lockinontimeout=true.