summaryrefslogtreecommitdiff
path: root/bip-0008/states.dot
diff options
context:
space:
mode:
authorAnthony Towns <aj@erisian.com.au>2020-07-26 14:55:16 +1000
committerLuke Dashjr <luke-jr+git@utopios.org>2020-10-15 15:54:08 +0000
commitda9cdd675931fece248e98eaf04e308f28427f67 (patch)
treeb7d013992db6cb310aa62fd425d583818b5d7dee /bip-0008/states.dot
parent3c63846fc2b2a39b615ecce58bb70d649493d806 (diff)
downloadbips-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.dot26
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" }
}