mirror of
https://github.com/bitcoin/bips.git
synced 2025-05-12 12:03:29 +00:00
BIP8: allow some MUST_SIGNAL blocks to not signal
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.
This commit is contained in:
parent
9a119ce46a
commit
afe97b2eee
@ -83,7 +83,7 @@ Miners should continue setting the bit in LOCKED_IN phase so uptake is visible,
|
||||
|
||||
The new consensus rules for each soft fork are enforced for each block that has ACTIVE state.
|
||||
|
||||
During the MUST_SIGNAL phase, blocks that fail to signal are invalid.
|
||||
During the MUST_SIGNAL phase, if '''(2016 - threshold)''' blocks in the retarget period have already failed to signal, any further blocks that fail to signal are invalid.
|
||||
|
||||
===State transitions===
|
||||
|
||||
@ -175,11 +175,23 @@ block, indexed by its parent.
|
||||
|
||||
===Mandatory signalling===
|
||||
|
||||
Blocks received while in the MUST_SIGNAL phase must be checked to ensure that they signal. For example:
|
||||
Blocks received while in the MUST_SIGNAL phase must be checked to ensure that they signal as required. For example:
|
||||
|
||||
if (GetStateForBlock(block) == MUST_SIGNAL) {
|
||||
if ((block.nVersion & 0xE0000000) != 0x20000000 || ((block.nVersion >> bit) & 1) != 1) {
|
||||
return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-must-signal");
|
||||
int nonsignal = 0;
|
||||
int count = 1 + (block.nHeight % 2016);
|
||||
walk = block;
|
||||
while (count > 0) {
|
||||
--count;
|
||||
if ((walk.nVersion & 0xE0000000) != 0x20000000 || ((walk.nVersion >> bit) & 1) != 1) {
|
||||
++nonsignal;
|
||||
if (nonsignal + threshold > 2016) {
|
||||
return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-must-signal");
|
||||
}
|
||||
} else if (nonsignal == 0) {
|
||||
break;
|
||||
}
|
||||
walk = walk.parent;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user