From 3c63846fc2b2a39b615ecce58bb70d649493d806 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Sun, 26 Jul 2020 14:12:46 +1000 Subject: BIP8: add dot file for generating states diagram --- bip-0008/states.dot | 34 +++++++++++ bip-0008/states.png | Bin 25677 -> 48261 bytes bip-0008/states.svg | 171 +++++++++++++++++++++++++++++++++++----------------- 3 files changed, 151 insertions(+), 54 deletions(-) create mode 100644 bip-0008/states.dot diff --git a/bip-0008/states.dot b/bip-0008/states.dot new file mode 100644 index 0000000..5c5a671 --- /dev/null +++ b/bip-0008/states.dot @@ -0,0 +1,34 @@ +digraph { + rankdir=TD; + + node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.3, 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)"]; + "LOCKED_IN" -> "ACTIVE" [label="always"]; + "FAILING" -> "FAILED" [label="NOT all blocks signal"]; + + edge [weight = 1]; + "FAILING" -> "ACTIVE" [label="all blocks signal"]; + + "DEFINED":sw -> "DEFINED":nw; + "STARTED":sw -> "STARTED":nw; + "ACTIVE":sw -> "ACTIVE":nw; + "FAILED":sw -> "FAILED":nw; + + "STARTED" [fillcolor="#a0a0ff"]; + + "FAILING" [fillcolor="#ffffa0"]; + "LOCKED_IN" [fillcolor="#ffffa0"]; + "ACTIVE" [fillcolor="#a0ffa0", shape=box]; + "FAILED" [fillcolor="#ffa0a0", shape=box]; + + "ACTIVE" -> "FAILED" [style=invis]; + + { rank=same; "STARTED" "FAILING" } + { rank=sink; "ACTIVE" "FAILED" } +} + + diff --git a/bip-0008/states.png b/bip-0008/states.png index 76f6cb7..b6d73b7 100644 Binary files a/bip-0008/states.png and b/bip-0008/states.png differ diff --git a/bip-0008/states.svg b/bip-0008/states.svg index f2e4b34..85a0021 100644 --- a/bip-0008/states.svg +++ b/bip-0008/states.svg @@ -1,55 +1,118 @@ - - - - - - - - - - DEFINED - - - startheight <= height - - STARTED - - - (lockinontimeout == false) AND (height < timeoutheight) AND (threshold reached) - OR - (lockinontimeout == true) AND ((height >= timeoutheight) OR (threshold reached)) - - LOCKED_IN - - Always - - ACTIVE - - - - FAILING - - (lockinontimeout == false) AND (timeoutheight <= height) - - NOT all blocks signal - - all blocks signal - - FAILED - + + + + + + +%3 + + + +DEFINED + +DEFINED + + + +DEFINED:sw->DEFINED:nw + + + + + +STARTED + +STARTED + + + +DEFINED->STARTED + + +height >= start_height + + + +STARTED:sw->STARTED:nw + + + + + +FAILING + +FAILING + + + +STARTED->FAILING + + +height >= timeoutheight AND NOT lockinontimeout + + + +LOCKED_IN + +LOCKED_IN + + + +STARTED->LOCKED_IN + + +(height < timeoutheight AND threshold reached) +OR +(height >= timeoutheight AND lockinontimeout) + + + +ACTIVE + +ACTIVE + + + +FAILING->ACTIVE + + +all blocks signal + + + +FAILED + +FAILED + + + +FAILING->FAILED + + +NOT all blocks signal + + + +LOCKED_IN->ACTIVE + + +always + + + +ACTIVE:sw->ACTIVE:nw + + + + + + +FAILED:sw->FAILED:nw + + + + -- cgit v1.2.3