summaryrefslogtreecommitdiff
path: root/bip-0008
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
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')
-rw-r--r--bip-0008/states.dot26
-rw-r--r--bip-0008/states.pngbin48261 -> 46310 bytes
-rw-r--r--bip-0008/states.svg132
3 files changed, 80 insertions, 78 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" }
}
diff --git a/bip-0008/states.png b/bip-0008/states.png
index b6d73b7..6477ed3 100644
--- a/bip-0008/states.png
+++ b/bip-0008/states.png
Binary files differ
diff --git a/bip-0008/states.svg b/bip-0008/states.svg
index 85a0021..3503c34 100644
--- a/bip-0008/states.svg
+++ b/bip-0008/states.svg
@@ -4,19 +4,19 @@
<!-- Generated by graphviz version 2.42.3 (20191010.1750)
-->
<!-- Title: %3 Pages: 1 -->
-<svg width="598pt" height="348pt"
- viewBox="0.00 0.00 598.00 348.37" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="563pt" height="348pt"
+ viewBox="0.00 0.00 563.00 348.37" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 344.37)">
<title>%3</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-344.37 594,-344.37 594,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-344.37 559,-344.37 559,4 -4,4"/>
<!-- DEFINED -->
<g id="node1" class="node">
<title>DEFINED</title>
-<path fill="lightgrey" stroke="black" stroke-width="2" d="M100,-333.75C100,-333.75 30,-333.75 30,-333.75 24,-333.75 18,-327.75 18,-321.75 18,-321.75 18,-309.75 18,-309.75 18,-303.75 24,-297.75 30,-297.75 30,-297.75 100,-297.75 100,-297.75 106,-297.75 112,-303.75 112,-309.75 112,-309.75 112,-321.75 112,-321.75 112,-327.75 106,-333.75 100,-333.75"/>
-<text text-anchor="middle" x="65" y="-312.05" font-family="Arial" font-size="14.00">DEFINED</text>
+<path fill="lightgrey" stroke="black" stroke-width="2" d="M114,-333.75C114,-333.75 30,-333.75 30,-333.75 24,-333.75 18,-327.75 18,-321.75 18,-321.75 18,-309.75 18,-309.75 18,-303.75 24,-297.75 30,-297.75 30,-297.75 114,-297.75 114,-297.75 120,-297.75 126,-303.75 126,-309.75 126,-309.75 126,-321.75 126,-321.75 126,-327.75 120,-333.75 114,-333.75"/>
+<text text-anchor="middle" x="72" y="-312.05" font-family="Arial" font-size="14.00">DEFINED</text>
</g>
<!-- DEFINED&#45;&gt;DEFINED -->
-<g id="edge7" class="edge">
+<g id="edge8" class="edge">
<title>DEFINED:sw&#45;&gt;DEFINED:nw</title>
<path fill="none" stroke="black" d="M18,-297.75C12,-287.25 0,-287.25 0,-315.75 0,-334.01 4.92,-340.57 10.04,-340.17"/>
<polygon fill="black" stroke="black" points="12.41,-342.75 18,-333.75 8.02,-337.3 12.41,-342.75"/>
@@ -24,95 +24,97 @@
<!-- STARTED -->
<g id="node2" class="node">
<title>STARTED</title>
-<path fill="#a0a0ff" stroke="black" stroke-width="2" d="M100,-246.75C100,-246.75 30,-246.75 30,-246.75 24,-246.75 18,-240.75 18,-234.75 18,-234.75 18,-222.75 18,-222.75 18,-216.75 24,-210.75 30,-210.75 30,-210.75 100,-210.75 100,-210.75 106,-210.75 112,-216.75 112,-222.75 112,-222.75 112,-234.75 112,-234.75 112,-240.75 106,-246.75 100,-246.75"/>
-<text text-anchor="middle" x="65" y="-225.05" font-family="Arial" font-size="14.00">STARTED</text>
+<path fill="#a0a0ff" stroke="black" stroke-width="2" d="M114,-246.75C114,-246.75 30,-246.75 30,-246.75 24,-246.75 18,-240.75 18,-234.75 18,-234.75 18,-222.75 18,-222.75 18,-216.75 24,-210.75 30,-210.75 30,-210.75 114,-210.75 114,-210.75 120,-210.75 126,-216.75 126,-222.75 126,-222.75 126,-234.75 126,-234.75 126,-240.75 120,-246.75 114,-246.75"/>
+<text text-anchor="middle" x="72" y="-225.05" font-family="Arial" font-size="14.00">STARTED</text>
</g>
<!-- DEFINED&#45;&gt;STARTED -->
<g id="edge1" class="edge">
<title>DEFINED&#45;&gt;STARTED</title>
-<path fill="none" stroke="black" d="M65,-297.55C65,-285.91 65,-270.3 65,-256.99"/>
-<polygon fill="black" stroke="black" points="68.5,-256.93 65,-246.93 61.5,-256.93 68.5,-256.93"/>
-<text text-anchor="middle" x="126" y="-268.55" font-family="Times,serif" font-size="14.00">height &gt;= start_height</text>
+<path fill="none" stroke="black" d="M72,-297.55C72,-285.91 72,-270.3 72,-256.99"/>
+<polygon fill="black" stroke="black" points="75.5,-256.93 72,-246.93 68.5,-256.93 75.5,-256.93"/>
+<text text-anchor="middle" x="133" y="-268.55" font-family="Times,serif" font-size="14.00">height &gt;= start_height</text>
</g>
<!-- STARTED&#45;&gt;STARTED -->
-<g id="edge8" class="edge">
+<g id="edge9" class="edge">
<title>STARTED:sw&#45;&gt;STARTED:nw</title>
<path fill="none" stroke="black" d="M18,-210.75C12,-200.25 0,-200.25 0,-228.75 0,-247.01 4.92,-253.57 10.04,-253.17"/>
<polygon fill="black" stroke="black" points="12.41,-255.75 18,-246.75 8.02,-250.3 12.41,-255.75"/>
</g>
-<!-- FAILING -->
+<!-- MUST_SIGNAL -->
<g id="node3" class="node">
-<title>FAILING</title>
-<path fill="#ffffa0" stroke="black" stroke-width="2" d="M504,-246.75C504,-246.75 434,-246.75 434,-246.75 428,-246.75 422,-240.75 422,-234.75 422,-234.75 422,-222.75 422,-222.75 422,-216.75 428,-210.75 434,-210.75 434,-210.75 504,-210.75 504,-210.75 510,-210.75 516,-216.75 516,-222.75 516,-222.75 516,-234.75 516,-234.75 516,-240.75 510,-246.75 504,-246.75"/>
-<text text-anchor="middle" x="469" y="-225.05" font-family="Arial" font-size="14.00">FAILING</text>
+<title>MUST_SIGNAL</title>
+<path fill="#a0a0ff" stroke="black" stroke-width="2" d="M543,-246.75C543,-246.75 459,-246.75 459,-246.75 453,-246.75 447,-240.75 447,-234.75 447,-234.75 447,-222.75 447,-222.75 447,-216.75 453,-210.75 459,-210.75 459,-210.75 543,-210.75 543,-210.75 549,-210.75 555,-216.75 555,-222.75 555,-222.75 555,-234.75 555,-234.75 555,-240.75 549,-246.75 543,-246.75"/>
+<text text-anchor="middle" x="501" y="-225.05" font-family="Arial" font-size="14.00">MUST_SIGNAL</text>
</g>
-<!-- STARTED&#45;&gt;FAILING -->
+<!-- STARTED&#45;&gt;MUST_SIGNAL -->
<g id="edge2" class="edge">
-<title>STARTED&#45;&gt;FAILING</title>
-<path fill="none" stroke="black" d="M112.13,-228.75C186.54,-228.75 330.99,-228.75 411.42,-228.75"/>
-<polygon fill="black" stroke="black" points="411.85,-232.25 421.85,-228.75 411.85,-225.25 411.85,-232.25"/>
-<text text-anchor="middle" x="267" y="-235.55" font-family="Times,serif" font-size="14.00">height &gt;= timeoutheight AND NOT lockinontimeout</text>
+<title>STARTED&#45;&gt;MUST_SIGNAL</title>
+<path fill="none" stroke="black" d="M126.33,-228.75C205.44,-228.75 352.08,-228.75 436.54,-228.75"/>
+<polygon fill="black" stroke="black" points="436.77,-232.25 446.77,-228.75 436.77,-225.25 436.77,-232.25"/>
+<text text-anchor="middle" x="286.5" y="-235.55" font-family="Times,serif" font-size="14.00">height + 2016 &gt;= timeoutheight AND lockinontimeout</text>
</g>
-<!-- LOCKED_IN -->
+<!-- FAILED -->
<g id="node4" class="node">
-<title>LOCKED_IN</title>
-<path fill="#ffffa0" stroke="black" stroke-width="2" d="M100,-129.75C100,-129.75 30,-129.75 30,-129.75 24,-129.75 18,-123.75 18,-117.75 18,-117.75 18,-105.75 18,-105.75 18,-99.75 24,-93.75 30,-93.75 30,-93.75 100,-93.75 100,-93.75 106,-93.75 112,-99.75 112,-105.75 112,-105.75 112,-117.75 112,-117.75 112,-123.75 106,-129.75 100,-129.75"/>
-<text text-anchor="middle" x="65" y="-108.05" font-family="Arial" font-size="14.00">LOCKED_IN</text>
+<title>FAILED</title>
+<path fill="#ffa0a0" stroke="black" stroke-width="2" d="M114,-129.75C114,-129.75 30,-129.75 30,-129.75 24,-129.75 18,-123.75 18,-117.75 18,-117.75 18,-105.75 18,-105.75 18,-99.75 24,-93.75 30,-93.75 30,-93.75 114,-93.75 114,-93.75 120,-93.75 126,-99.75 126,-105.75 126,-105.75 126,-117.75 126,-117.75 126,-123.75 120,-129.75 114,-129.75"/>
+<text text-anchor="middle" x="72" y="-108.05" font-family="Arial" font-size="14.00">FAILED</text>
</g>
-<!-- STARTED&#45;&gt;LOCKED_IN -->
+<!-- STARTED&#45;&gt;FAILED -->
<g id="edge3" class="edge">
-<title>STARTED&#45;&gt;LOCKED_IN</title>
-<path fill="none" stroke="black" d="M65,-210.28C65,-191.69 65,-161.99 65,-140.25"/>
-<polygon fill="black" stroke="black" points="68.5,-140 65,-130 61.5,-140 68.5,-140"/>
-<text text-anchor="middle" x="199.5" y="-181.55" font-family="Times,serif" font-size="14.00">(height &lt; timeoutheight AND threshold reached)</text>
-<text text-anchor="middle" x="199.5" y="-166.55" font-family="Times,serif" font-size="14.00">OR</text>
-<text text-anchor="middle" x="199.5" y="-151.55" font-family="Times,serif" font-size="14.00">(height &gt;= timeoutheight AND lockinontimeout)</text>
+<title>STARTED&#45;&gt;FAILED</title>
+<path fill="none" stroke="black" d="M72,-210.28C72,-191.69 72,-161.99 72,-140.25"/>
+<polygon fill="black" stroke="black" points="75.5,-140 72,-130 68.5,-140 75.5,-140"/>
+<text text-anchor="middle" x="139" y="-181.55" font-family="Times,serif" font-size="14.00">height &gt;= timeoutheight</text>
+<text text-anchor="middle" x="139" y="-166.55" font-family="Times,serif" font-size="14.00">AND</text>
+<text text-anchor="middle" x="139" y="-151.55" font-family="Times,serif" font-size="14.00">NOT lockinontimeout</text>
</g>
-<!-- ACTIVE -->
+<!-- LOCKED_IN -->
<g id="node5" class="node">
-<title>ACTIVE</title>
-<path fill="#a0ffa0" stroke="black" stroke-width="2" d="M100,-42.75C100,-42.75 30,-42.75 30,-42.75 24,-42.75 18,-36.75 18,-30.75 18,-30.75 18,-18.75 18,-18.75 18,-12.75 24,-6.75 30,-6.75 30,-6.75 100,-6.75 100,-6.75 106,-6.75 112,-12.75 112,-18.75 112,-18.75 112,-30.75 112,-30.75 112,-36.75 106,-42.75 100,-42.75"/>
-<text text-anchor="middle" x="65" y="-21.05" font-family="Arial" font-size="14.00">ACTIVE</text>
+<title>LOCKED_IN</title>
+<path fill="#ffffa0" stroke="black" stroke-width="2" d="M543,-129.75C543,-129.75 459,-129.75 459,-129.75 453,-129.75 447,-123.75 447,-117.75 447,-117.75 447,-105.75 447,-105.75 447,-99.75 453,-93.75 459,-93.75 459,-93.75 543,-93.75 543,-93.75 549,-93.75 555,-99.75 555,-105.75 555,-105.75 555,-117.75 555,-117.75 555,-123.75 549,-129.75 543,-129.75"/>
+<text text-anchor="middle" x="501" y="-108.05" font-family="Arial" font-size="14.00">LOCKED_IN</text>
</g>
-<!-- FAILING&#45;&gt;ACTIVE -->
+<!-- STARTED&#45;&gt;LOCKED_IN -->
<g id="edge6" class="edge">
-<title>FAILING&#45;&gt;ACTIVE</title>
-<path fill="none" stroke="black" d="M442.56,-210.75C415.9,-193.89 373.31,-167.76 335,-147.75 260.59,-108.89 171.32,-69.99 116.38,-46.9"/>
-<polygon fill="black" stroke="black" points="117.44,-43.55 106.87,-42.92 114.74,-50.01 117.44,-43.55"/>
-<text text-anchor="middle" x="344.5" y="-108.05" font-family="Times,serif" font-size="14.00">all blocks signal</text>
-</g>
-<!-- FAILED -->
-<g id="node6" class="node">
-<title>FAILED</title>
-<path fill="#ffa0a0" stroke="black" stroke-width="2" d="M504,-42.75C504,-42.75 434,-42.75 434,-42.75 428,-42.75 422,-36.75 422,-30.75 422,-30.75 422,-18.75 422,-18.75 422,-12.75 428,-6.75 434,-6.75 434,-6.75 504,-6.75 504,-6.75 510,-6.75 516,-12.75 516,-18.75 516,-18.75 516,-30.75 516,-30.75 516,-36.75 510,-42.75 504,-42.75"/>
-<text text-anchor="middle" x="469" y="-21.05" font-family="Arial" font-size="14.00">FAILED</text>
+<title>STARTED&#45;&gt;LOCKED_IN</title>
+<path fill="none" stroke="black" d="M126.15,-214.34C151.63,-207.94 182.41,-200.1 210,-192.75 281.79,-173.62 299.35,-167.41 371,-147.75 392.5,-141.85 416.03,-135.49 437.09,-129.83"/>
+<polygon fill="black" stroke="black" points="438.14,-133.17 446.89,-127.19 436.32,-126.41 438.14,-133.17"/>
+<text text-anchor="middle" x="434" y="-181.55" font-family="Times,serif" font-size="14.00">height &lt; timeoutheight</text>
+<text text-anchor="middle" x="434" y="-166.55" font-family="Times,serif" font-size="14.00">AND</text>
+<text text-anchor="middle" x="434" y="-151.55" font-family="Times,serif" font-size="14.00">threshold reached</text>
</g>
-<!-- FAILING&#45;&gt;FAILED -->
+<!-- MUST_SIGNAL&#45;&gt;LOCKED_IN -->
<g id="edge5" class="edge">
-<title>FAILING&#45;&gt;FAILED</title>
-<path fill="none" stroke="black" d="M469,-210.53C469,-175.42 469,-95.34 469,-53.06"/>
-<polygon fill="black" stroke="black" points="472.5,-52.93 469,-42.93 465.5,-52.93 472.5,-52.93"/>
-<text text-anchor="middle" x="529.5" y="-108.05" font-family="Times,serif" font-size="14.00">NOT all blocks signal</text>
+<title>MUST_SIGNAL&#45;&gt;LOCKED_IN</title>
+<path fill="none" stroke="black" d="M501,-210.28C501,-191.69 501,-161.99 501,-140.25"/>
+<polygon fill="black" stroke="black" points="504.5,-140 501,-130 497.5,-140 504.5,-140"/>
+<text text-anchor="middle" x="520" y="-166.55" font-family="Times,serif" font-size="14.00">always</text>
+</g>
+<!-- FAILED&#45;&gt;FAILED -->
+<g id="edge11" class="edge">
+<title>FAILED:sw&#45;&gt;FAILED:nw</title>
+<path fill="none" stroke="black" d="M18,-93.75C12,-83.25 0,-83.25 0,-111.75 0,-130.01 4.92,-136.57 10.04,-136.17"/>
+<polygon fill="black" stroke="black" points="12.41,-138.75 18,-129.75 8.02,-133.3 12.41,-138.75"/>
+</g>
+<!-- FAILED&#45;&gt;LOCKED_IN -->
+<!-- ACTIVE -->
+<g id="node6" class="node">
+<title>ACTIVE</title>
+<path fill="#a0ffa0" stroke="black" stroke-width="2" d="M543,-42.75C543,-42.75 459,-42.75 459,-42.75 453,-42.75 447,-36.75 447,-30.75 447,-30.75 447,-18.75 447,-18.75 447,-12.75 453,-6.75 459,-6.75 459,-6.75 543,-6.75 543,-6.75 549,-6.75 555,-12.75 555,-18.75 555,-18.75 555,-30.75 555,-30.75 555,-36.75 549,-42.75 543,-42.75"/>
+<text text-anchor="middle" x="501" y="-21.05" font-family="Arial" font-size="14.00">ACTIVE</text>
</g>
<!-- LOCKED_IN&#45;&gt;ACTIVE -->
<g id="edge4" class="edge">
<title>LOCKED_IN&#45;&gt;ACTIVE</title>
-<path fill="none" stroke="black" d="M65,-93.55C65,-81.91 65,-66.3 65,-52.99"/>
-<polygon fill="black" stroke="black" points="68.5,-52.93 65,-42.93 61.5,-52.93 68.5,-52.93"/>
-<text text-anchor="middle" x="84" y="-64.55" font-family="Times,serif" font-size="14.00">always</text>
+<path fill="none" stroke="black" d="M501,-93.55C501,-81.91 501,-66.3 501,-52.99"/>
+<polygon fill="black" stroke="black" points="504.5,-52.93 501,-42.93 497.5,-52.93 504.5,-52.93"/>
+<text text-anchor="middle" x="520" y="-64.55" font-family="Times,serif" font-size="14.00">always</text>
</g>
<!-- ACTIVE&#45;&gt;ACTIVE -->
-<g id="edge9" class="edge">
-<title>ACTIVE:sw&#45;&gt;ACTIVE:nw</title>
-<path fill="none" stroke="black" d="M18,-6.75C12,3.75 0,3.75 0,-24.75 0,-43.01 4.92,-49.57 10.04,-49.17"/>
-<polygon fill="black" stroke="black" points="12.41,-51.75 18,-42.75 8.02,-46.3 12.41,-51.75"/>
-</g>
-<!-- ACTIVE&#45;&gt;FAILED -->
-<!-- FAILED&#45;&gt;FAILED -->
<g id="edge10" class="edge">
-<title>FAILED:sw&#45;&gt;FAILED:nw</title>
-<path fill="none" stroke="black" d="M422,-6.75C416,3.75 404,3.75 404,-24.75 404,-43.01 408.92,-49.57 414.04,-49.17"/>
-<polygon fill="black" stroke="black" points="416.41,-51.75 422,-42.75 412.02,-46.3 416.41,-51.75"/>
+<title>ACTIVE:sw&#45;&gt;ACTIVE:nw</title>
+<path fill="none" stroke="black" d="M447,-6.75C441,3.75 429,3.75 429,-24.75 429,-43.01 433.92,-49.57 439.04,-49.17"/>
+<polygon fill="black" stroke="black" points="441.41,-51.75 447,-42.75 437.02,-46.3 441.41,-51.75"/>
</g>
</g>
</svg>