dash-docs/img/dev/en-orphan-stale-definition.dot
David A. Harding ccda4caa0c
Dev Docs: Document Blocks-First IBD & Orphan Blocks
This commit provides a detailed overview of the current block download
method, which I've retroactively named blocks-first for parallelism with
headers-first.

New And Significantly Revised:

* New Initial Block Download (IBD) section (h3) with Blocks-First
  subsection (h4)

* New Orphan Block subsection (under Blocks Broadcasting) describing
  orphan blocks and how they're handled under blocks-first. Also
  includes a simple illustration of the difference between orphan blocks
  and stale blocks. Thanks to luke-jr for his s/orphan block/stale
  block/ commit a couple months ago---that made this commit much easier.

Edits:

* Cleaned up a couple cases missed by previous s/orphan/stale/ commit
  because they used past tense (orphaned).

* In P2P reference section, mentioned that a `block` message can be sent
  unsolicited by miners.

* Mention that `getheaders` and `headers` were added in protocol
  version 31800.

* Moved a few internal links around and added a few new internal links.

Administrivia:

* Started adding "TODOv0.10" in HTML comments to places that need to be
  updated when 0.10 is released so that I can easily git grep for that
  tag later.
2015-01-31 15:48:16 -05:00

43 lines
1 KiB
Text

digraph {
// This file is licensed under the MIT License (MIT) available on
// http://opensource.org/licenses/MIT.
size=6.25;
rankdir=LR
splines = "false";
ranksep = 0.2;
nodesep = 0.1;
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans" ]
subgraph cluster_mainchain {
block0 [ label = "1\n←Parent: 0" ];
block1 [ label = "2\n←Parent: 1" ];
block2 [ label = "3\n←Parent: 2" ];
style = "invis";
}
block0 -> block1 -> block2;
block0 -> block1_1;
block2 -> block5 [ style = "invis", minlen = 4 ];
block1_1 [ label = "2 (Stale)\n←Parent: 1", style = "filled" ];
block5 [ label = "5 (Orphan)\n←Parent: 4", style = "filled" ];
subgraph cluster_toplabel {
node [ style = "invis", height = 0, width = 0, label = "" ];
graph [ penwidth = 0 ];
a -> b -> c -> d -> e -> f -> g [ style = "invis" ];
label = "Orphan blocks have no known parent, so they can't be validated"
}
label = " \nStale blocks are valid but not part of the best block chain"
}