mirror of
https://github.com/seigler/dash-docs
synced 2025-07-27 09:46:12 +00:00
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.
43 lines
1 KiB
Text
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"
|
|
|
|
}
|