diff options
author | Anthony Towns <aj@erisian.com.au> | 2020-07-26 14:55:16 +1000 |
---|---|---|
committer | Luke Dashjr <luke-jr+git@utopios.org> | 2020-10-15 15:54:08 +0000 |
commit | da9cdd675931fece248e98eaf04e308f28427f67 (patch) | |
tree | b7d013992db6cb310aa62fd425d583818b5d7dee /bip-0008/states.dot | |
parent | 3c63846fc2b2a39b615ecce58bb70d649493d806 (diff) | |
download | bips-da9cdd675931fece248e98eaf04e308f28427f67.tar.xz |
BIP8: replace FAILING with MUST_SIGNAL
This removes the FAILING state and adds compulsory signalling during a
new MUST_SIGNAL phase during the last retarget period prior to the
timeout height.
This ensures that if a deployment occurs using bip8 with
lockinontimeout=false and timeoutheight=N, that a later deployment using
bip8 with lockinontimeout=true and timeoutheight=K, where K<N that any
chain where LOCKED_IN is reached prior to height K, will be accepted as
valid by nodes using either set of deployment parameters.
It also ensures that the soft-fork's changed rules are only enforced
on chain a retarget period after signalling indicates enforcement is
expected (which was not previously the case if the FAILING to ACTIVE
transition took place).
Diffstat (limited to 'bip-0008/states.dot')
-rw-r--r-- | bip-0008/states.dot | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/bip-0008/states.dot b/bip-0008/states.dot index 5c5a671..aa919ff 100644 --- a/bip-0008/states.dot +++ b/bip-0008/states.dot @@ -1,17 +1,19 @@ digraph { rankdir=TD; - node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.3, fontname="Arial"]; + node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.5, fontname="Arial"]; edge [weight = 100]; "DEFINED" -> "STARTED" [label="height >= start_height"]; - "STARTED" -> "FAILING" [label="height >= timeoutheight AND NOT lockinontimeout"]; - "STARTED" -> "LOCKED_IN" [label="(height < timeoutheight AND threshold reached)\nOR\n(height >= timeoutheight AND lockinontimeout)"]; + "STARTED" -> "MUST_SIGNAL" [label="height + 2016 >= timeoutheight AND lockinontimeout"]; + "STARTED" -> "FAILED" [label="height >= timeoutheight\nAND\nNOT lockinontimeout"]; "LOCKED_IN" -> "ACTIVE" [label="always"]; - "FAILING" -> "FAILED" [label="NOT all blocks signal"]; + "MUST_SIGNAL" -> "LOCKED_IN" [label="always"]; edge [weight = 1]; - "FAILING" -> "ACTIVE" [label="all blocks signal"]; + "STARTED" -> "LOCKED_IN" [label="height < timeoutheight\nAND\nthreshold reached"]; + + "FAILED" -> "LOCKED_IN" [style=invis]; "DEFINED":sw -> "DEFINED":nw; "STARTED":sw -> "STARTED":nw; @@ -19,16 +21,14 @@ digraph { "FAILED":sw -> "FAILED":nw; "STARTED" [fillcolor="#a0a0ff"]; - - "FAILING" [fillcolor="#ffffa0"]; + "MUST_SIGNAL" [fillcolor="#a0a0ff"]; "LOCKED_IN" [fillcolor="#ffffa0"]; - "ACTIVE" [fillcolor="#a0ffa0", shape=box]; - "FAILED" [fillcolor="#ffa0a0", shape=box]; - - "ACTIVE" -> "FAILED" [style=invis]; + "ACTIVE" [fillcolor="#a0ffa0"]; + "FAILED" [fillcolor="#ffa0a0"]; - { rank=same; "STARTED" "FAILING" } - { rank=sink; "ACTIVE" "FAILED" } + { rank=same; "STARTED" "MUST_SIGNAL" } + { rank=same; "FAILED" "LOCKED_IN" } + { rank=sink; "ACTIVE" } } |