Describe Soft And Hard Forks

Based on a suggestion made by @petertodd to the -devel mailing list and
the discussion in that thread by him and other participants.

* We've been using the term "consensus", but this commit introduces a
  formal definition for it and "consensus rules" as part of the block
  chain introduction.

* Describe that consensus rules may change and may happen when they
  do: hard or soft forks.

* Describe how full nodes can detect hard or soft forks, then describe
  how SPV clients can detect hard and soft forks using the more limited
  information available to them.
This commit is contained in:
David A. Harding 2014-10-23 12:39:18 -04:00
parent 2147b830f1
commit 2e8ceb26df
No known key found for this signature in database
GPG key ID: 4B29C30FF29EC4B7
9 changed files with 462 additions and 6 deletions

49
img/dev/en-hard-fork.dot Normal file
View file

@ -0,0 +1,49 @@
digraph {
size=6.25;
rankdir=LR
//splines = ortho;
ranksep = 0.2;
nodesep = 0.1;
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", label = "", width=0.3, height=0.3 ]
graph [ penwidth = 1.75, fontname="Sans" ]
invis1 [ shape = "none", label = "Blocks\nFrom\nUpgraded\nNodes" ]
invis0 [ shape = "none", label = "Blocks\nFrom Non-\nUpgraded\nNodes" ];
subgraph cluster_honest {
block0 [ label = "Follows\nOld\nRules" ];
block1 [ label = "Follows\nOld\nRules" ];
block2_1 [ label = "Follows\nOld\nRules" ];
block3_1 [ label = "Follows\nOld\nRules" ];
//block2_1 -> block4 [ style = "invis", minlen = 2 ];
style = "invis";
}
subgraph cluster_attack {
block2 [ label = "Follows\nNew\nRules" ];
block3 [ label = "Follows\nNew\nRules" ];
block4 [ label = "Follows\nNew\nRules" ];
block5 [ label = "Follows\nNew\nRules" ];
style = "invis"
}
invis0 -> block0 [ minlen = 2, style = "dashed" ];
block2_1 -> block3_1;
block0 -> block1 -> block2 -> block3 -> block4 -> block5;
block1 -> block2_1
label = "A Hard Fork: Non-Upgraded Nodes Reject The New Rules, Diverging The Chain"
}