BIPs 0009 · 0008
How does a soft fork switch on?
Miners mark blocks with a bit; nodes count the marks in fixed windows of 2,016 blocks. A count crossing a threshold locks a change in, and only a period later do its rules apply.
A soft fork tightens the rules in a backward-compatible way. Once it is active, blocks that older software would accept can be rejected, so everyone needs to know from which block the new rules apply. BIP 9, assigned in 2015 and recorded as deployed, is the mechanism that told them for the csv and segwit soft forks. BIP 8, assigned in 2017 and now recorded as complete, is an alternative that counts in block heights and can force the outcome.1234
Both read the same field: the version number at the top of every block header. BIP 9 stops treating it as a number and reads it as a row of bits, each of which can track one proposed change, so several deployments can run at the same time.4
Source details
This chapter is an independent explanation, not the proposals themselves. Preamble fields are shown as recorded in the pinned files, with author e-mail addresses omitted. Status is the proposal’s own field, not an endorsement or a sign of consensus.
BIP 9: Version bits with timeout and delay
- BIP
- 9
- Title
- Version bits with timeout and delay
- Authors
- Pieter Wuille
Peter Todd
Greg Maxwell
Rusty Russell - Status
- Deployed
- Type
- Informational
- Assigned
- 2015-10-04
- License
- PD
BIP 8: Version bits with lock-in by height
- BIP
- 8
- Title
- Version bits with lock-in by height
- Authors
- Shaolin Fry
Luke Dashjr - Status
- Complete
- Type
- Informational
- Assigned
- 2017-02-01
- License
- BSD-3-Clause OR CC0-1.0
- Version
- 1.0.0
- Bits 31–29 = 001. Any other top bits and the block signals nothing, whatever its lower bits say.
- Bit 0: csv. A block signalling only for it has version
0x20000001. - Bit 1: segwit. A block signalling only for it has version
0x20000002. - Both at once:
0x20000003. Signalling versions run from0x20000000to0x3fffffff.
Bits from BIP 9’s assignment table; versions computed by the tested version-bits model.
Why bits
Before BIP 9, soft forks were signalled by raising the version number. BIP 9’s authors list the problems with that: only one change could be rolled out at once, a proposal could never be rejected for good, and every upgrade permanently ruled out some version values.7
Reading the field as bits fixes all three. A signalling block must have 001 as its top three bits, which gives versions from 0x20000000 to 0x3FFFFFFF; a block whose top bits are anything else counts as signalling nothing. That leaves 29 bits for deployments, and two other top-bit patterns for future mechanisms.56
Each deployment names its bit, from 0 to 28, a starttime and a timeout. BIP 9 suggests a start about a month after a release that includes the change, and a timeout one year later. The timeout is what lets a bit be reused: in the authors’ words, a new use of a bit then clearly refers to a new BIP.8910
Reuse is allowed but not encouraged. A later deployment may take a bit once the previous one has timed out or activated, and BIP 9 recommends a pause in between. The authors give that fallow period two jobs: it helps detect buggy software still acting on the old meaning, and it leaves time for warnings and upgrades after a soft fork succeeds.11
Five states, counted in periods
Every deployment is in one of five states: DEFINED, STARTED, LOCKED_IN, ACTIVE or FAILED. States change only at the boundaries of 2,016-block retarget periods, and every block in a period shares one. A block’s state never depends on its own version, only on its ancestors.1213
The clock is not the wall clock. BIP 9 compares starttime and timeout with the median time past of the block before each period begins, a value the chain itself makes monotonic. Once that reaches starttime, the deployment is STARTED and the bit means something.814
At each boundary in STARTED, nodes count how many of the previous 2,016 blocks set the bit. At least 1,916 of them, 95 percent, moves the deployment to LOCKED_IN; on testnet the threshold was 1,512. If the timeout has passed, the deployment fails instead, and that check comes first.15
The order matters because bits are shared over time. If counting came first, the authors explain, two deployments on the same bit could collide: an old one locking in while a new one starts, both demanding that miners set the bit. Checking the timeout first rules that out.1516
A · Interactive
Static view: a hypothetical csv run in which period 10 reaches the threshold, played to the end. With JavaScript you can choose a deployment, step through the periods and set which periods reach the threshold.
Schematic run · hypothetical signalling counts · rules from the tested model
- DEFINED
- STARTED
- LOCKED_IN
- ACTIVE
- FAILED
DEF DEFINED · STA STARTED · LCK LOCKED_IN · ACT ACTIVE · FLD FAILED · ≥ / < reaches / misses the threshold
window opens: period 1timeout passes: period 27
Period 29 · blocks 58,464–60,479 of this run · ACTIVE
Decided at the period’s first block: ACTIVE is terminal.
The new rules are enforced in this period’s blocks.
What actually happened (mainnet, as BIP 9’s table records it): csv on bit 0, active since block 419,328. By the rules above, that means LOCKED_IN from block 417,312, after blocks 415,296–417,311 included at least 1,916 signalling blocks.
Schematic clock: the window is drawn as 26 periods, the span BIP 8 equates with about a year (52,416 blocks); for BIP 9 deployments the median time past is placed linearly between starttime and timeout. Each period either reaches the threshold (1,916) or falls one short (1,915). Real per-period counts are not in the pinned sources.
B · Worked example
The csv deployment on mainnet, as BIP 9’s assignment table records it, read backwards from its activation height with BIP 9’s rules.
The deployment's parameters: bit 0, a start, a timeout, a threshold
- starttime
2016-05-01 00:00:00 UTC = 1462060800- timeout
2017-05-01 00:00:00 UTC = 1493596800- threshold
1,916 of 2016 blocks
Once the median time past reaches starttime, a block signals by setting bit 0
- signalling version
0x20000001
Top bits 001 and the deployment bit set. Signalling changes no rule by itself.
Blocks 415,296–417,311: at least 1,916 of the period's 2016 signal
- period
206 (heights ÷ 2016)
Inferred: the table records only the activation height, and BIP 9's rules put the successful count two periods before it.
From block 417,312: LOCKED_IN for one period
- state
LOCKED_IN — nothing counted, rules not yet enforced
From block 419,328: ACTIVE
- recorded
active since #419328
From this block on, the rules of BIPs 68, 112, 113 are enforced.
Source: BIP 9 assignments, line 18; dates cross-checked against the deployment section of BIP 68. Implied periods computed by the tested model.
Then nothing is counted for one period. LOCKED_IN lasts exactly one period, after which the deployment becomes ACTIVE automatically, and only ACTIVE blocks enforce the new rules. Miners are asked to keep setting the bit while locked in, so that uptake stays visible, but that has no effect on the rules.1720
Nodes that have not upgraded still notice. BIP 9 has software track unexpected bits as an unknown upgrade, and says it should warn loudly when one locks in.21
What the table records
BIP 9 keeps a small table of deployments. It records csv, the bundle of BIPs 68, 112 and 113, on bit 0 with a mainnet window from 1 May 2016 to 1 May 2017, and segwit on bit 1 from 15 November 2016 to 15 November 2017. The dates match the Unix times written in the deployment sections of BIP 68 and BIP 141, and this site’s build fails if they ever disagree.222
csv · bit 0 · BIPs 68, 112, 113
| Network | Start (MTP) | Timeout | Recorded | Implied by BIP 9’s rules |
|---|---|---|---|---|
| mainnet | 2016-05-011,462,060,800 | 2017-05-011,493,596,800 | block 419,328period 208 | LOCKED_IN from 417,312blocks 415,296–417,311 reached 1,916 |
| testnet | 2016-03-011,456,790,400 | 2017-05-011,493,596,800 | block 770,112period 382 | LOCKED_IN from 768,096blocks 766,080–768,095 reached 1,512 |
segwit · bit 1 · BIPs 141, 143, 147
| Network | Start (MTP) | Timeout | Recorded | Implied by BIP 9’s rules |
|---|---|---|---|---|
| mainnet | 2016-11-151,479,168,000 | 2017-11-151,510,704,000 | block 481,824period 239 | LOCKED_IN from 479,808blocks 477,792–479,807 reached 1,916 |
| testnet | 2016-05-011,462,060,800 | 2017-05-011,493,596,800 | block 834,624period 414 | LOCKED_IN from 832,608blocks 830,592–832,607 reached 1,512 |
Dates and states from BIP 9’s assignment table (lines 18, 28); start and timeout cross-checked at build time against the Unix times in each BIP’s own deployment section. The last column is inferred from the activation height by the tested model.
The table records only where each deployment became active: block 419,328 for csv and 481,824 for segwit, both multiples of 2,016. The rules let us read backwards. csv must have been LOCKED_IN from block 417,312, which means blocks 415,296 to 417,311 included at least 1,916 that signalled; segwit was LOCKED_IN from 479,808.151723
Those dates are history, not a schedule. A deployment’s parameters describe one attempt at one time; the table’s states say how each attempt ended.224
Heights and a forced ending
BIP 8 sets out to correct what its authors call perceived mistakes in BIP 9. Among them: a near-unanimous hashrate threshold lets a small minority of non-signalling miners veto a change, and timestamps meant a sudden loss of hashrate could interfere with a late activation. Block times are unreliable, and triggering at the first retarget after a date is non-intuitive. Heights, they argue, are more reliable, since each block adds exactly one.25
So a BIP 8 deployment counts in heights: startheight and timeoutheight, both on retarget boundaries and at least 4,032 blocks apart. Its suggested threshold is lower, 1,815 blocks or 90 percent, and its suggested window is probably at least a year, 52,416 blocks. A minimum activation height can hold a locked-in deployment back so that nodes have time to upgrade; set to 0, LOCKED_IN lasts one period, as in BIP 9.262728
The new part is lockinontimeout. Without it, a deployment that never reaches the threshold fails at the timeout. With it, the last period before the timeout becomes MUST_SIGNAL: once 2,016 minus the threshold blocks in it have failed to signal, any further block that fails to signal is invalid, and the deployment locks in regardless.1819
BIP 8 is candid about the cost. Nodes that set lockinontimeout may follow a lower-work chain than nodes that do not, for an extended period, and may need to connect preferentially to each other to avoid a split. The BIP suggests the flag for soft forks facing political opposition from a non-negligible share of miners.2729
One distinction runs through both proposals. Signalling counts blocks, which measures mining; it does not show that users or their nodes have adopted the rules. BIP 8’s motivation draws the same line: hash-power activation enforces new rules in lieu of full nodes upgrading, while all consensus rules are ultimately enforced by full nodes.30
BIP 8’s own history is in its changelog: rejected after a three-year timeout in 2020, revised with MUST_SIGNAL and a minimum activation height, and advanced to complete in 2026. Its pinned assignments file lists no deployments.2431
Evidence
Each numbered marker in the text points here, and the ↩ links lead back to every place that cites an entry. Quotes are verbatim from the BIP files at commit
3a10b5b, including their wiki markup; links open
the exact lines; the quoted text sits under each entry. Labels say what kind of statement each is: a rule, the author’s rationale, history,
a test vector, or our own inference.
-
↩ History BIP 9 (Wuille, Todd, Maxwell, Russell) was assigned in 2015 and is recorded as Deployed; BIP 8 (Fry, Dashjr) was assigned in 2017 and is recorded as Complete. Both are Informational.
Quoted source text (2)
Title: Version bits with timeout and delay Authors: Pieter Wuille <pieter.wuille@gmail.com> Peter Todd <pete@petertodd.org> Greg Maxwell <greg@xiph.org> Rusty Russell <rusty@rustcorp.com.au> Status: Deployed Type: Informational Assigned: 2015-10-04
Title: Version bits with lock-in by height Authors: Shaolin Fry <shaolinfry@protonmail.ch> Luke Dashjr <luke+bip@dashjr.org> Status: Complete Type: Informational Assigned: 2017-02-01
-
↩ a b c d e History BIP 9's assignment table records csv (bit 0; mainnet 1 May 2016 to 1 May 2017; active since block 419,328) and segwit (bit 1; mainnet 15 November 2016 to 15 November 2017; active since block 481,824).
BIP 9 (assignments.mediawiki) L18–22 BIP 9 (assignments.mediawiki) L28–32
Quoted source text (2)
| csv | 0 | 2016-05-01 00:00:00 | 2017-05-01 00:00:00 | active since #419328
| segwit | 1 | 2016-11-15 00:00:00 | 2017-11-15 00:00:00 | active since #481824
-
↩ Rule BIP 8 is an alternative to BIP 9 that uses block heights instead of timestamps for start and timeout, and adds a parameter that can guarantee activation.
Quoted source text (1)
This document specifies an alternative to [[bip-0009.mediawiki|BIP9]] that corrects for a number of perceived mistakes. Block heights are used for start and timeout rather than POSIX timestamps. It additionally introduces an activation parameter that can guarantee activation of backward-compatible changes
-
↩ a b Rule BIP 9 reads the block version field as a bit vector, so several backward-compatible changes (soft forks) can be deployed in parallel, each tracked on its own bit; BIP 8 reads the field the same way.
Quoted source text (2)
allowing multiple backward-compatible changes (further called "soft forks") to be deployed in parallel. It relies on interpreting the version field as a bit vector, where each bit can be used to track an independent change.
The nVersion block header field is to be interpreted as a 32-bit little-endian integer (as present), and bits are selected within this integer as values (1 << N) where N is the bit number.
-
↩ a b Rule A signalling block's top three version bits must be 001, giving versions 0x20000000 to 0x3FFFFFFF; a version without those top bits counts as signalling nothing.
Quoted source text (2)
The top 3 bits of such blocks must be 001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive.
When a block nVersion does not have top bits 001, it is treated as if all bits are 0 for the purposes of deployments.
-
↩ a b Author’s rationale Restricting the top bits to 001 leaves 29 deployment bits and keeps top bits 010 and 011 for two future mechanisms.
Quoted source text (1)
By restricting the top 3 bits to 001 we get 29 out of those for the purposes of this proposal, and support two future upgrades for different mechanisms (top bits 010 and 011).
-
↩ Author’s rationale BIP 9's motivation: BIP 34's integer version comparison allowed only one change at a time, could not reject a proposal permanently, and every upgrade permanently removed version values.
Quoted source text (2)
As it relies on comparing version numbers as integers however, it only supports one single change being rolled out at once, requiring coordination between proposals, and does not allow for permanent rejection
every upgrade permanently restricts the set of allowed nVersion field values.
-
↩ a b Rule A BIP 9 deployment has a name, a bit from 0 to 28, a starttime (a minimum median time past) and a timeout after which it is considered failed if not locked in.
Quoted source text (1)
It is chosen from the set {0,1,2,...,28}. # The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning. # The '''timeout''' specifies a time at which the deployment is considered failed.
-
↩ Author’s rationale BIP 9 suggests a starttime about a month after a release including the soft fork, and a timeout one year (31,536,000 seconds) later.
Quoted source text (2)
'''starttime''' should be set to some date in the future, approximately one month after a software release date including the soft fork.
'''timeout''' should be 1 year (31536000 seconds) after starttime.
-
↩ Author’s rationale The authors give the timeout as a way to reuse bits even when a soft fork never activates, so a new use of a bit clearly refers to a new BIP.
Quoted source text (1)
The failure timeout allows eventual reuse of bits even if a soft fork was never activated, so it's clear that the new use of the bit refers to a new BIP.
-
↩ Author’s rationale A later deployment may reuse a bit once the previous one has timed out or activated, though BIP 9 discourages it until necessary and recommends a pause; the authors say the fallow period after an attempt helps detect buggy clients and leaves time for warnings and upgrades.
Quoted source text (2)
A later deployment using the same bit is possible as long as the starttime is after the previous one's timeout or activation, but it is discouraged until necessary, and even then recommended to have a pause in between to detect buggy software.
The fallow period at the conclusion of a soft fork attempt allows some detection of buggy clients, and allows time for warnings and software upgrades for successful soft forks.
-
↩ a b c Rule The states are DEFINED, STARTED, LOCKED_IN (for one period after a period in which at least threshold blocks set the bit), ACTIVE and FAILED.
Quoted source text (2)
'''DEFINED''' is the first state that each soft fork starts out as.
'''LOCKED_IN''' for one retarget period after the first retarget period with STARTED blocks of which at least threshold have the associated bit set in nVersion. # '''ACTIVE''' for all blocks after the LOCKED_IN retarget period. # '''FAILED''' for one retarget period past the timeout time, if LOCKED_IN was not reached.
-
↩ Rule All blocks in one 2016-block retarget period have the same state, and a block's state never depends on its own version, only on its ancestors'.
Quoted source text (2)
All blocks within a retarget period have the same state.
Note that a block's state never depends on its own nVersion; only on that of its ancestors.
-
↩ Rule BIP 9's clock is the median time past of the period's first block's parent, treated as a monotonic clock defined by the chain.
Quoted source text (1)
The expression GetMedianTimePast(block.parent) is referred to as MTP in the diagram above, and is treated as a monotonic clock defined by the chain.
-
↩ a b c d Rule BIP 9's lock-in threshold is at least 1,916 of a period's 2,016 blocks (95%), or 1,512 (75%) on testnet; failure takes precedence over counting.
Quoted source text (1)
The threshold is ≥1916 blocks (95% of 2016), or ≥1512 for testnet (75% of 2016). The transition to FAILED takes precedence, as otherwise an ambiguity can arise.
-
↩ Author’s rationale The authors explain why failure takes precedence: otherwise two non-overlapping deployments on the same bit could both demand the bit, one locking in while the other starts.
Quoted source text (1)
The transition to FAILED takes precedence, as otherwise an ambiguity can arise. There could be two non-overlapping deployments on the same bit, where the first one transitions to LOCKED_IN while the other one simultaneously transitions to STARTED, which would mean both would demand setting the bit.
-
↩ a b c d Rule After one period of LOCKED_IN the deployment becomes ACTIVE automatically; ACTIVE and FAILED are terminal.
Quoted source text (2)
After a retarget period of LOCKED_IN, we automatically transition to ACTIVE.
And ACTIVE and FAILED are terminal states, which a deployment stays in once they're reached.
-
↩ a b c Rule With lockinontimeout set, the last period before the timeout is MUST_SIGNAL: once 2,016 minus threshold blocks in it have failed to signal, further non-signalling blocks are invalid, and LOCKED_IN follows.
BIP 8 L66 BIP 8 L90 BIP 8 L152
Quoted source text (3)
'''MUST_SIGNAL''' for one retarget period prior to the timeout, if LOCKED_IN was not reached and '''lockinontimeout''' is true.
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.
If we have finished a period of MUST_SIGNAL, we transition directly to LOCKED_IN.
-
↩ a b Rule Without lockinontimeout, a deployment that has not reached the threshold fails at the timeout height; the count is checked first. (BIP 8's state diagram labels lock-in "height < timeoutheight AND threshold reached"; this site follows the pseudocode, which counts first, so a threshold-reaching period can still lock in at the timeout height, consistent with the parameter text's "excluding this block's bit state".)
BIP 8 L130 BIP 8 L143–149 BIP 8 L38
Quoted source text (3)
If the threshold hasn't been met and we reach the timeout, we transition directly to FAILED.
if (count >= threshold) { return LOCKED_IN; } else if (lockinontimeout && block.height + 2016 >= timeoutheight) { return MUST_SIGNAL; } else if (block.height >= timeoutheight) { return FAILED; }
Once this height has been reached, if the soft fork has not yet locked in (excluding this block's bit state), the deployment is considered failed on all descendants of the block.
-
↩ a b Rule Miners should keep setting the bit in LOCKED_IN so uptake stays visible, but this has no effect on consensus rules; the new rules are enforced only in ACTIVE blocks.
Quoted source text (2)
Miners should continue setting the bit in LOCKED_IN phase so uptake is visible, though this has no effect on consensus rules.
The new consensus rules for each soft fork are enforced for each block that has ACTIVE state.
-
↩ Rule BIP 9 has software track unexpected version bits as an extra unknown upgrade, and says it should warn loudly when one locks in.
Quoted source text (1)
To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever LOCKED_IN for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork.
-
↩ a b History Those dates match the Unix times in the deployment sections of BIP 68 and BIP 141.
Quoted source text (2)
midnight 1st May 2016 UTC (Epoch timestamp 1462060800) and BIP9 '''timeout''' will be midnight 1st May 2017 UTC (Epoch timestamp 1493596800)
midnight 15 November 2016 UTC (Epoch timestamp 1479168000) and BIP9 timeout will be midnight 15 November 2017 UTC (Epoch timestamp 1510704000)
-
↩ a b Test vector Read with BIP 9's rules, csv's activation at block 419,328 means LOCKED_IN from block 417,312 and a threshold-reaching count in blocks 415,296 to 417,311; segwit's at 481,824 means LOCKED_IN from 479,808. Each recorded activation height is a multiple of 2,016.
BIP 9 (assignments.mediawiki) L22 BIP 9 (assignments.mediawiki) L32
Quoted source text (2)
active since #419328
active since #481824
-
↩ a b History BIP 8's changelog records it moving to Rejected after a three-year timeout in 2020, being revised (MUST_SIGNAL, a minimum_activation_height parameter, a 90% recommendation), and advancing to Complete in 2026.
BIP 8 L280–281 BIP 8 L284 BIP 8 L293 BIP 8 L300 BIP 8 L304–305
Quoted source text (5)
* '''1.0.0''' (2026-08-03): ** Advance to Complete.
** Reduce recommended threshold from 95% to 90%.
** Replace FAILING state with MUST_SIGNAL phase.
** Add minimum_activation_height parameter.
* '''0.0.2''' (2020-02-26): ** Move to Rejected due to 3-year time-out.
-
↩ Author’s rationale BIP 8 sets out to correct what its authors call perceived mistakes in BIP 9: a near-unanimous hashrate requirement that lets a small minority veto, timestamps that let a sudden hashrate loss interfere with a late activation, unreliable block times, and a non-intuitive trigger at the first retarget after a given time.
BIP 8 L15 BIP 8 L23 BIP 8 L25 BIP 8 L27 BIP 8 L27
Quoted source text (5)
This document specifies an alternative to [[bip-0009.mediawiki|BIP9]] that corrects for a number of perceived mistakes.
Activation is dependent on near unanimous hashrate signalling which may be impractical and result in veto by a small minority of non-signalling hashrate.
Due to using timestamps rather than block heights, it was found to be a risk that a sudden loss of significant hashrate could interfere with a late activation.
Since each new block must increase the height by one, thresholds based on block height are much more reliable and intuitive and can be calculated exactly for difficulty retarget.
Block time is somewhat unreliable and may be intentionally or unintentionally inaccurate, so thresholds based on block time are not ideal. Secondly, BIP9 specified triggers based on the first retarget after a given time, which is non-intuitive.
-
↩ Rule A BIP 8 deployment adds startheight, timeoutheight, a threshold, minimum_activation_height and the lockinontimeout flag, with heights on retarget boundaries and the timeout at least 4,032 blocks after the start.
BIP 8 L37–41 BIP 8 L41 BIP 8 L58
Quoted source text (3)
The '''startheight''' specifies the height of the first block at which the bit gains its meaning.
The '''lockinontimeout''' boolean if set to true, blocks are required to signal in the final period, ensuring the soft fork has locked in by timeoutheight.
'''startheight''', '''timeoutheight''', and '''minimum_activation_height''' must be an exact multiple of 2016 (ie, at a retarget boundary), and '''timeoutheight''' must be at least 4032 blocks (2 retarget intervals) after '''startheight'''.
-
↩ a b Author’s rationale BIP 8 suggests a threshold of 1,815 blocks (90%), a timeout of probably at least a year or 52,416 blocks after the start, and lockinontimeout true for a soft fork facing political opposition from a non-negligible share of miners.
Quoted source text (2)
probably at least 1 year, or 52416 blocks (26 retarget intervals) after '''startheight'''. # '''threshold''' should be 1815 blocks (90% of 2016), or 1512 (75%) for testnet.
'''lockinontimeout''' should be set to true for any softfork that is expected or found to have political opposition from a non-negligible percent of miners.
-
↩ Rule minimum_activation_height lets LOCKED_IN last longer so nodes can upgrade; setting it to 0 keeps LOCKED_IN to a single period.
Quoted source text (2)
This allows more time to be spent in the LOCKED_IN state so that nodes can upgrade. This may be set to 0 to have the LOCKED_IN state be a single retarget period.
Regardless of the value of '''lockinontimeout''', if LOCKED_IN is reached, ACTIVE will be reached either one retarget period later, or at '''minimum_activation_height''', whichever comes later.
-
↩ Rule BIP 8 warns that nodes with lockinontimeout set may follow a lower-work chain than nodes without it for an extended period, and may need to connect preferentially to each other.
Quoted source text (1)
Implementations with ''lockinontimeout'' set to true may potentially follow a lower work chain than nodes with ''lockinontimeout'' set to false for an extended period. In order for this not to result in a net split nodes with ''lockinontimeout'' set to true, those nodes may need to preferentially connect to each other.
-
↩ Editorial inference Signalling counts blocks that set a bit, which is a measure of mining, not of whether users or nodes have adopted the rules; BIP 8's motivation draws the same line, saying hash-power activation enforces new rules in lieu of full nodes upgrading, while all consensus rules are ultimately enforced by full nodes.
Quoted source text (2)
if (walk.nVersion & 0xE0000000 == 0x20000000 && (walk.nVersion >> bit) & 1 == 1) {
Super majority hashrate based activation triggers allow for accelerated activation where the majority hash power enforces the new rules in lieu of full nodes upgrading. Since all consensus rules are ultimately enforced by full nodes
-
↩ Test vector BIP 8's pinned assignments file has a heading and a note but no deployment rows (this site's parser finds none).
BIP 8 (assignments.mediawiki) L1–5
Quoted source text (1)
==Deployments== List of deployments. State can be defined, active, failed. Dates are in UTC.