From ca8e9b87a7e1a51952d4f68dcfc3280758a0a47e Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 25 Jun 2017 05:39:50 +0000 Subject: [PATCH] BIP 8: Use block heights rather than MTP --- README.mediawiki | 2 +- bip-0008.mediawiki | 32 ++++++++++++++++++-------------- bip-0008/states.png | Bin 20891 -> 21180 bytes bip-0008/states.svg | 10 +++++----- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index d37d6fa0..3b80b33d 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -31,7 +31,7 @@ Those proposing changes should consider that ultimately consent may rest with th | [[bip-0008.mediawiki|8]] | | Version bits 2017 -| Shaolin Fry +| Shaolin Fry, Luke Dashjr | Informational | Draft |- style="background-color: #cfffcf" diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki index 7be8bace..b00e4471 100644 --- a/bip-0008.mediawiki +++ b/bip-0008.mediawiki @@ -2,6 +2,7 @@ BIP: 8 Title: Version bits 2017 Author: Shaolin Fry + Luke Dashjr Comments-Summary: No comments yet. Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0008 Status: Draft @@ -13,12 +14,16 @@ ==Abstract== -This document specifies an alternative to [[bip-0009.mediawiki|BIP9]] that introduces an additional activation parameter to guarantee activation of backward-compatible changes (further called "soft forks"). +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 additional activation parameter to guarantee activation of backward-compatible changes (further called "soft forks"). ==Motivation== BIP9 introduced a mechanism for doing parallel soft forking deployments based on repurposing the block nVersion field. Activation is dependent on near unanimous hashrate signalling which may be impractical and is also subject to 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 siginificant hashrate could interfere with a late activation. + This specification provides a way to optionally guarantee lock-in at the end of the [[bip-0009.mediawiki|BIP9]] timeout, and therefore activation, while still allowing a hashrate super majority to trigger activation earlier. ==Specification== @@ -27,8 +32,8 @@ Each soft fork deployment is specified by the following per-chain parameters (fu # The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. For deployments described in a single BIP, it is recommended to use the name "bipN" where N is the appropriate BIP number. # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. 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. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. +# The '''start''' specifies the height of the first block at which the bit gains its meaning. +# The '''timeout''' specifies a block height at which the miner signalling ends. Once this height has been reached, if the soft fork has not yet locked in (excluding this block's bit state), the deployment is either considered failed on all descendants of the block, or, if '''lockinontimeout'' is true, transitions to the '''LOCKED_IN''' state. # The '''lockinontimeout''' boolean if set to true, will transition state to '''LOCKED_IN''' at timeout if not already '''LOCKED_IN''' or '''ACTIVE'''. ===Selection guidelines=== @@ -37,11 +42,11 @@ The following guidelines are suggested for selecting these parameters for a soft # '''name''' should be selected such that no two softforks, concurrent or otherwise, ever use the same name. # '''bit''' should be selected such that no two concurrent softforks use the same bit. -# '''starttime''' should be set to some date in the future, approximately one month after a software release date including the soft fork. This allows for some release delays, while preventing triggers as a result of parties running pre-release software. -# '''timeout''' should be 1 year (31536000 seconds) after starttime. +# '''start''' should be set to some block height in the future, approximately one month after a software release date including the soft fork. This allows for some release delays, while preventing triggers as a result of parties running pre-release software, and ensures a reasonable number of full nodes have upgraded prior to activation. It should be rounded up to the next height which begins a retarget period. +# '''timeout''' should be approximately 1 year after start, and on a block which begins a retarget period. Therefore, '''start''' plus 52416. # '''lockinontimeout''' should be set to true for any softfork that isn't exclusively for miner benefit. -A later deployment using the same bit is possible as long as the starttime is after the previous one's +A later deployment using the same bit is possible as long as the start 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. ===States=== @@ -49,10 +54,10 @@ timeout or activation, but it is discouraged until necessary, and even then reco With each block and soft fork, we associate a deployment state. The possible states are: # '''DEFINED''' is the first state that each soft fork starts out as. The genesis block is by definition in this state for each deployment. -# '''STARTED''' for blocks past the starttime. +# '''STARTED''' for blocks at or beyond the start height. # '''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, or for one retarget period after the timeout when '''lockinontimeout''' is true. # '''ACTIVE''' for all blocks after the LOCKED_IN retarget period. -# '''FAILED''' for all blocks after the timeout time, if LOCKED_IN was not reached and '''lockinontimeout''' is false. +# '''FAILED''' for all blocks after the timeout, if LOCKED_IN was not reached and '''lockinontimeout''' is false. ===Bit flags=== @@ -97,15 +102,13 @@ Otherwise, the next state depends on the previous state: switch (GetStateForBlock(GetAncestorAtHeight(block, block.height - 2016))) { -We remain in the initial state until either we pass the start time or the timeout. GetMedianTimePast in the code below -refers to the median nTime of a block and its 10 predecessors. 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. +We remain in the initial state until either we pass the start height or the timeout. case DEFINED: - if (GetMedianTimePast(block.parent) >= timeout) { + if (block.height >= timeout) { return (lockinontimeout == true) ? LOCKED_IN : FAILED; } - if (GetMedianTimePast(block.parent) >= starttime) { + if (block.height >= start) { return STARTED; } return DEFINED; @@ -120,7 +123,7 @@ other one simultaneously transitions to STARTED, which would mean both would dem Note that a block's state never depends on its own nVersion; only on that of its ancestors. case STARTED: - if (GetMedianTimePast(block.parent) >= timeout) { + if (block.height >= timeout) { return (lockinontimeout == true) ? LOCKED_IN : FAILED; } int count = 0; @@ -175,6 +178,7 @@ https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:bip-uaversionbits ==Contrasted with BIP 9== * The '''lockinontimeout''' flag is added. BIP 9 would only transition to the FAILED state when timeout was reached. +* Block heights are used for the deployment monotonic clock, rather than median-time-past. ==Backwards compatibility== diff --git a/bip-0008/states.png b/bip-0008/states.png index 828757365d9b63398812aba25b54713dd17e9112..de9450188513aadf047a8a573bb166cab12b59a3 100644 GIT binary patch delta 20674 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 delta 20394 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 diff --git a/bip-0008/states.svg b/bip-0008/states.svg index 56afd154..f7d9f9da 100644 --- a/bip-0008/states.svg +++ b/bip-0008/states.svg @@ -25,14 +25,14 @@ DEFINED - starttime <= MTP < timeout + start <= height < timeout STARTED - (lockinontimeout == false) AND (MTP < timeout) AND (threshold reached) + (lockinontimeout == false) AND (height < timeout) AND (threshold reached) OR - (lockinontimeout == true) AND ((MTP >= timeout) OR (threshold reached)) + (lockinontimeout == true) AND ((height >= timeout) OR (threshold reached)) LOCKED_IN @@ -45,7 +45,7 @@ FAILED - timeout <= MTP + timeout <= height - (lockinontimeout == false) AND (timeout <= MTP) + (lockinontimeout == false) AND (timeout <= height)