Merge branch 'data-messages' (pull #642)

This commit is contained in:
David A. Harding 2014-11-16 13:20:54 -05:00
commit cc13a10623
No known key found for this signature in database
GPG key ID: 4B29C30FF29EC4B7
57 changed files with 7352 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,36 @@
digraph {
size="6.25";
rankdir=LR
nodesep=0.05;
ranksep=0.1;
splines="false"
edge [ penwidth = 1.75, fontname="Sans", dir="none" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans" ]
getblocks -> inv;
mempool -> inv;
inv -> getdata;
getdata -> tx;
getdata -> block;
getdata -> merkleblock;
getdata -> notfound;
getheaders -> headers [ minlen = 3 ];
{
node [ shape = "none" ];
label1 [ label = "Request For Help\nGetting Up To Date" ];
label2 [ label = "Reply With\nInventory" ];
label3 [ label = "Request For Specific Data" ];
label4 [ label = "Reply With\nRequested Data" ];
label1 -> label2 -> label3 -> label4 [style = "invis" ];
}
label = "Overview Of P2P Protocol Data Request And Reply Messages"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View file

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: _anonymous_0 Pages: 1 -->
<svg width="450pt" height="208pt"
viewBox="0.00 0.00 450.00 207.63" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.755034 0.755034) rotate(0) translate(4 271)">
<title>_anonymous_0</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-271 593,-271 593,5 -4,5"/>
<text text-anchor="middle" x="294" y="-8.4" font-family="Sans" font-size="14.00">Overview Of P2P Protocol Data Request And Reply Messages</text>
<!-- getblocks -->
<g id="node1" class="node"><title>getblocks</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="116,-141 36,-141 36,-105 116,-105 116,-141"/>
<text text-anchor="middle" x="76" y="-118.9" font-family="Sans" font-size="14.00">getblocks</text>
</g>
<!-- inv -->
<g id="node3" class="node"><title>inv</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="233,-121 179,-121 179,-85 233,-85 233,-121"/>
<text text-anchor="middle" x="206" y="-98.9" font-family="Sans" font-size="14.00">inv</text>
</g>
<!-- getblocks&#45;&gt;inv -->
<g id="edge2" class="edge"><title>getblocks&#45;&gt;inv</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M116.776,-116.727C137.03,-113.611 160.945,-109.931 178.916,-107.167"/>
</g>
<!-- getdata -->
<g id="node7" class="node"><title>getdata</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="391,-121 321,-121 321,-85 391,-85 391,-121"/>
<text text-anchor="middle" x="356" y="-98.9" font-family="Sans" font-size="14.00">getdata</text>
</g>
<!-- inv&#45;&gt;getdata -->
<g id="edge6" class="edge"><title>inv&#45;&gt;getdata</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M233.164,-103C257.732,-103 294.053,-103 320.831,-103"/>
</g>
<!-- mempool -->
<g id="node4" class="node"><title>mempool</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="115,-101 37,-101 37,-65 115,-65 115,-101"/>
<text text-anchor="middle" x="76" y="-78.9" font-family="Sans" font-size="14.00">mempool</text>
</g>
<!-- mempool&#45;&gt;inv -->
<g id="edge4" class="edge"><title>mempool&#45;&gt;inv</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M115.711,-89.1093C136.17,-92.2569 160.59,-96.0138 178.871,-98.8264"/>
</g>
<!-- tx -->
<g id="node9" class="node"><title>tx</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="551,-181 497,-181 497,-145 551,-145 551,-181"/>
<text text-anchor="middle" x="524" y="-158.9" font-family="Sans" font-size="14.00">tx</text>
</g>
<!-- getdata&#45;&gt;tx -->
<g id="edge8" class="edge"><title>getdata&#45;&gt;tx</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M391.218,-115.578C422.681,-126.815 468.117,-143.042 496.844,-153.301"/>
</g>
<!-- block -->
<g id="node11" class="node"><title>block</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="551,-141 497,-141 497,-105 551,-105 551,-141"/>
<text text-anchor="middle" x="524" y="-118.9" font-family="Sans" font-size="14.00">block</text>
</g>
<!-- getdata&#45;&gt;block -->
<g id="edge10" class="edge"><title>getdata&#45;&gt;block</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M391.218,-107.193C422.681,-110.938 468.117,-116.347 496.844,-119.767"/>
</g>
<!-- merkleblock -->
<g id="node13" class="node"><title>merkleblock</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="573,-101 475,-101 475,-65 573,-65 573,-101"/>
<text text-anchor="middle" x="524" y="-78.9" font-family="Sans" font-size="14.00">merkleblock</text>
</g>
<!-- getdata&#45;&gt;merkleblock -->
<g id="edge12" class="edge"><title>getdata&#45;&gt;merkleblock</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M391.218,-98.8073C415.369,-95.9323 447.752,-92.0772 474.492,-88.8939"/>
</g>
<!-- notfound -->
<g id="node15" class="node"><title>notfound</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="563,-61 485,-61 485,-25 563,-25 563,-61"/>
<text text-anchor="middle" x="524" y="-38.9" font-family="Sans" font-size="14.00">notfound</text>
</g>
<!-- getdata&#45;&gt;notfound -->
<g id="edge14" class="edge"><title>getdata&#45;&gt;notfound</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M391.218,-90.422C418.448,-80.6973 456.143,-67.2348 484.415,-57.1376"/>
</g>
<!-- getheaders -->
<g id="node16" class="node"><title>getheaders</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="123,-221 29,-221 29,-185 123,-185 123,-221"/>
<text text-anchor="middle" x="76" y="-198.9" font-family="Sans" font-size="14.00">getheaders</text>
</g>
<!-- headers -->
<g id="node18" class="node"><title>headers</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="559,-221 489,-221 489,-185 559,-185 559,-221"/>
<text text-anchor="middle" x="524" y="-198.9" font-family="Sans" font-size="14.00">headers</text>
</g>
<!-- getheaders&#45;&gt;headers -->
<g id="edge16" class="edge"><title>getheaders&#45;&gt;headers</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M123.097,-203C213.183,-203 408.074,-203 488.344,-203"/>
</g>
<!-- label1 -->
<g id="node20" class="node"><title>label1</title>
<text text-anchor="middle" x="76" y="-250.4" font-family="Sans" font-size="14.00">Request For Help</text>
<text text-anchor="middle" x="76" y="-233.4" font-family="Sans" font-size="14.00">Getting Up To Date</text>
</g>
<!-- label2 -->
<g id="node21" class="node"><title>label2</title>
<text text-anchor="middle" x="206" y="-250.4" font-family="Sans" font-size="14.00">Reply With</text>
<text text-anchor="middle" x="206" y="-233.4" font-family="Sans" font-size="14.00">Inventory</text>
</g>
<!-- label1&#45;&gt;label2 -->
<!-- label3 -->
<g id="node22" class="node"><title>label3</title>
<text text-anchor="middle" x="356" y="-241.9" font-family="Sans" font-size="14.00">Request For Specific Data</text>
</g>
<!-- label2&#45;&gt;label3 -->
<!-- label4 -->
<g id="node23" class="node"><title>label4</title>
<text text-anchor="middle" x="524" y="-250.4" font-family="Sans" font-size="14.00">Reply With</text>
<text text-anchor="middle" x="524" y="-233.4" font-family="Sans" font-size="14.00">Requested Data</text>
</g>
<!-- label3&#45;&gt;label4 -->
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

31
img/dev/gifs/README.md Normal file
View file

@ -0,0 +1,31 @@
# Some Animated GIF Hints
An excellent set of background information can be found here:
http://www.imagemagick.org/Usage/anim_basics/
1. Create source images. GraphViz supports direct GIF output, but its
white background is not-quite-white and its transparent backgroud is
hideous---so we output to PNG and then convert to GIF.
for f in *dot ; do dot -o ${f/.dot}.png -T png $f ; done
2. Create animated GIF using ImageMagick. Manually prefix first frame
and suffix last frame to provide a brief pause in the animation on
those frames. This wastes space but the optimization removes all of
that wasted space except for 3 bytes.
convert -delay 100 \
en-merkleblock-parsing-001.gif \
*gif \
en-merkleblock-parsing-011.gif \
-loop 0 \
animated-en-merkleblock-parsing.gif
3. Compress animated GIF (118 KB -> 15 KB in this example). You may need
to play with color settings; 8 worked in this example but 4 was too
few. Fewer colors (base-2) results in much better compression.
gifsicle -b -O3 --colors 8 --no-background \
animated-en-merkleblock-parsing.gif

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1" ];
flag3 [ label = "1" ];
flag2 [ label = "0" ];
flag1 [ label = "1" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H1" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "H7" ];
F [ label = "H6" ];
E [ label = "H5" ];
D [ label = "H4" ];
C [ label = "H3" ];
B [ label = "H2" ];
A [ label = "H1" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF;
F -> EF;
G -> G2;
AB [ label = "H8" ];
CD [ label = "H9" ];
EF [ label = "H10" ];
G2 [ label = "H11" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2;
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD [ label = "H12" ];
EFG2 [ label = "H13" ];
ABCD -> ROOT;
EFG2 -> ROOT;
ROOT -> ABCD [ constraint = false, style = "invis" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "H14" ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1" ];
flag3 [ label = "1" ];
flag2 [ label = "0" ];
flag1 [ label = "1" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H1" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "H7" ];
F [ label = "H6" ];
E [ label = "H5", penwidth = 4 ];
D [ label = "H4" ];
C [ label = "H3" ];
B [ label = "H2" ];
A [ label = "H1" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF;
F -> EF;
G -> G2;
AB [ label = "H8" ];
CD [ label = "H9" ];
EF [ label = "H10", penwidth = 4 ];
G2 [ label = "H11" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2;
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD [ label = "H12" ];
EFG2 [ label = "H13", penwidth = 4 ];
ABCD -> ROOT;
EFG2 -> ROOT;
ROOT -> ABCD [ constraint = false, style = "invis" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "H14", penwidth = 4 ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1" ];
flag3 [ label = "1" ];
flag2 [ label = "0" ];
flag1 [ label = "1", style = "filled" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H1" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "H7" ];
F [ label = "H6" ];
E [ label = "H5", penwidth = 4 ];
D [ label = "H4" ];
C [ label = "H3" ];
B [ label = "H2" ];
A [ label = "H1" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF;
F -> EF;
G -> G2;
AB [ label = "H8" ];
CD [ label = "H9" ];
EF [ label = "H10", penwidth = 4 ];
G2 [ label = "H11" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2;
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD [ label = "H12" ];
EFG2 [ label = "H13", penwidth = 4 ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT;
ROOT -> ABCD [ constraint = false, style = "invis" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "↓", penwidth = 4, style = "filled" ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1" ];
flag3 [ label = "1" ];
flag2 [ label = "0", style = "filled" ];
flag1 [ label = "1", style = "" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H12", style = "filled" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "H7" ];
F [ label = "H6" ];
E [ label = "H5", penwidth = 4 ];
D [ label = "" ];
C [ label = "" ];
B [ label = "" ];
A [ label = "" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF;
F -> EF;
G -> G2;
AB [ label = "" ];
CD [ label = "" ];
EF [ label = "H10", penwidth = 4 ];
G2 [ label = "H11" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2;
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD [ label = "H12", style = "diagonals,filled" ];
EFG2 [ label = "H13", penwidth = 4 ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "↓", penwidth = 4 ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1" ];
flag3 [ label = "1", style = "filled" ];
flag2 [ label = "0", style = "" ];
flag1 [ label = "1", style = "" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H12", style = "" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "H7" ];
F [ label = "H6" ];
E [ label = "H5", penwidth = 4 ];
D [ label = "" ];
C [ label = "" ];
B [ label = "" ];
A [ label = "" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF;
F -> EF;
G -> G2;
AB [ label = "" ];
CD [ label = "" ];
EF [ label = "H10", penwidth = 4 ];
G2 [ label = "H11" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD [ label = "H12", style = "diagonals" ];
EFG2 [ label = "↓", penwidth = 4, style = "filled" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "↓", penwidth = 4 ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1", style = "filled" ];
flag3 [ label = "1", style = "" ];
flag2 [ label = "0", style = "" ];
flag1 [ label = "1", style = "" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H12", style = "" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "H7" ];
F [ label = "H6" ];
E [ label = "H5", penwidth = 4 ];
D [ label = "" ];
C [ label = "" ];
B [ label = "" ];
A [ label = "" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF;
G -> G2;
AB [ label = "" ];
CD [ label = "" ];
EF [ label = "↓", penwidth = 4, style = "filled" ];
G2 [ label = "H11" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD [ label = "H12", style = "diagonals" ];
EFG2 [ label = "↓", penwidth = 4 ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "↓", penwidth = 4 ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1", style = "filled" ];
flag4 [ label = "1", style = "" ];
flag3 [ label = "1", style = "" ];
flag2 [ label = "0", style = "" ];
flag1 [ label = "1", style = "" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H5", style = "filled" ];
hash1 [ label = "H12", style = "" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "H7" ];
F [ label = "H6" ];
E [ label = "H5", penwidth = 4, style = "diagonals,filled" ];
D [ label = "" ];
C [ label = "" ];
B [ label = "" ];
A [ label = "" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB [ label = "" ];
CD [ label = "" ];
EF [ label = "↓", penwidth = 4 ];
G2 [ label = "H11" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD [ label = "H12", style = "diagonals" ];
EFG2 [ label = "↓", penwidth = 4 ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "↓", penwidth = 4 ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0", style = "filled" ];
flag5 [ label = "1", style = "" ];
flag4 [ label = "1", style = "" ];
flag3 [ label = "1", style = "" ];
flag2 [ label = "0", style = "" ];
flag1 [ label = "1", style = "" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H4" ];
hash3 [ label = "H6", style = "filled" ];
hash2 [ label = "H5", style = "" ];
hash1 [ label = "H12", style = "" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "H7" ];
F [ label = "H6", style = "diagonals,filled" ];
E [ label = "H5", penwidth = 4, style = "diagonals" ];
D [ label = "" ];
C [ label = "" ];
B [ label = "" ];
A [ label = "" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB [ label = "" ];
CD [ label = "" ];
EF [ label = "↓", penwidth = 4 ];
G2 [ label = "H11" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD [ label = "H12", style = "diagonals" ];
EFG2 [ label = "↓", penwidth = 4 ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "↓", penwidth = 4 ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0", style = "" ];
flag5 [ label = "1", style = "" ];
flag4 [ label = "1", style = "" ];
flag3 [ label = "1", style = "" ];
flag2 [ label = "0", style = "" ];
flag1 [ label = "1", style = "" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H4" ];
hash3 [ label = "H6", style = "" ];
hash2 [ label = "H5", style = "" ];
hash1 [ label = "H12", style = "" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "H7" ];
F [ label = "H6", style = "diagonals" ];
E [ label = "H5", penwidth = 4, style = "diagonals" ];
D [ label = "" ];
C [ label = "" ];
B [ label = "" ];
A [ label = "" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB [ label = "" ];
CD [ label = "" ];
EF [ label = "", penwidth = 4, style = "filled" ];
G2 [ label = "H11" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2 [ dir = "back" ];
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, dir = "back" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD [ label = "H12", style = "diagonals" ];
EFG2 [ label = "↓", penwidth = 4 ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "↓", penwidth = 4 ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0", style = "filled" ];
flag6 [ label = "0", style = "" ];
flag5 [ label = "1", style = "" ];
flag4 [ label = "1", style = "" ];
flag3 [ label = "1", style = "" ];
flag2 [ label = "0", style = "" ];
flag1 [ label = "1", style = "" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H11", style = "filled" ];
hash3 [ label = "H6", style = "" ];
hash2 [ label = "H5", style = "" ];
hash1 [ label = "H12", style = "" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "" ];
F [ label = "H6", style = "diagonals" ];
E [ label = "H5", penwidth = 4, style = "diagonals" ];
D [ label = "" ];
C [ label = "" ];
B [ label = "" ];
A [ label = "" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB [ label = "" ];
CD [ label = "" ];
EF [ label = "", penwidth = 4 ];
G2 [ label = "H11", style = "diagonals,filled" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2 [ dir = "back" ];
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, dir = "back" ];
EFG2 -> G2 [ constraint = false, dir = "back" ];
ABCD [ label = "H12", style = "diagonals" ];
EFG2 [ label = "↓", penwidth = 4 ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
ROOT [ label = "↓", penwidth = 4 ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0", style = "" ];
flag6 [ label = "0", style = "" ];
flag5 [ label = "1", style = "" ];
flag4 [ label = "1", style = "" ];
flag3 [ label = "1", style = "" ];
flag2 [ label = "0", style = "" ];
flag1 [ label = "1", style = "" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H11", style = "" ];
hash3 [ label = "H6", style = "" ];
hash2 [ label = "H5", style = "" ];
hash1 [ label = "H12", style = "" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "" ];
F [ label = "H6", style = "diagonals" ];
E [ label = "H5", penwidth = 4, style = "diagonals" ];
D [ label = "" ];
C [ label = "" ];
B [ label = "" ];
A [ label = "" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB [ label = "" ];
CD [ label = "" ];
EF [ label = "", penwidth = 4 ];
G2 [ label = "H11", style = "diagonals" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2 [ dir = "back" ];
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, dir = "back" ];
EFG2 -> G2 [ constraint = false, dir = "back" ];
ABCD [ label = "H12", style = "diagonals" ];
EFG2 [ label = "", penwidth = 4, style = "filled" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, dir = "back" ];
ROOT [ label = "↓", penwidth = 4 ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,148 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.07
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none", style = "invis" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0", style = "" ];
flag6 [ label = "0", style = "" ];
flag5 [ label = "1", style = "" ];
flag4 [ label = "1", style = "" ];
flag3 [ label = "1", style = "" ];
flag2 [ label = "0", style = "" ];
flag1 [ label = "1", style = "" ];
flag_label [ label = "Flags", style = "", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none", style = "invis" ];
hash4 [ label = "H11", style = "" ];
hash3 [ label = "H6", style = "" ];
hash2 [ label = "H5", style = "" ];
hash1 [ label = "H12", style = "" ];
hash_label [ label = "Hashes", style = "", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "Match Or\nMatch\nAncestor" ];
hash_from_list_label [ label = "Hash\nOn\nList" ];
hash_computed_label [ label = "Hash\nNot\nNeeded" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4 ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G [ label = "" ];
F [ label = "H6", style = "diagonals" ];
E [ label = "H5", penwidth = 4, style = "diagonals" ];
D [ label = "" ];
C [ label = "" ];
B [ label = "" ];
A [ label = "" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB [ label = "" ];
CD [ label = "" ];
EF [ label = "", penwidth = 4 ];
G2 [ label = "H11", style = "diagonals" ];
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2 [ dir = "back" ];
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, dir = "back" ];
EFG2 -> G2 [ constraint = false, dir = "back" ];
ABCD [ label = "H12", style = "diagonals" ];
EFG2 [ label = "", penwidth = 4, ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, dir = "back" ];
ROOT [ label = "", penwidth = 4, style = "filled" ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,138 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1" ];
flag3 [ label = "1" ];
flag2 [ label = "0" ];
flag1 [ label = "1" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H1" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F;
E;
D;
C;
B;
A;
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF;
F -> EF;
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2;
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD -> ROOT;
EFG2 -> ROOT;
ROOT -> ABCD [ constraint = false, style = "invis" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -0,0 +1,288 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<g id="node3" class="node"><title>flag7</title>
<text text-anchor="middle" x="300" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag6 -->
<g id="node4" class="node"><title>flag6</title>
<text text-anchor="middle" x="267" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag5 -->
<g id="node5" class="node"><title>flag5</title>
<text text-anchor="middle" x="234" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag4 -->
<g id="node6" class="node"><title>flag4</title>
<text text-anchor="middle" x="201" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag3 -->
<g id="node7" class="node"><title>flag3</title>
<text text-anchor="middle" x="168" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag2 -->
<g id="node8" class="node"><title>flag2</title>
<text text-anchor="middle" x="135" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag1 -->
<g id="node9" class="node"><title>flag1</title>
<text text-anchor="middle" x="102" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<g id="node12" class="node"><title>hash4</title>
<text text-anchor="middle" x="307" y="-198.9" font-family="Sans" font-size="14.00">H4</text>
</g>
<!-- hash3 -->
<g id="node13" class="node"><title>hash3</title>
<text text-anchor="middle" x="246" y="-198.9" font-family="Sans" font-size="14.00">H3</text>
</g>
<!-- hash2 -->
<g id="node14" class="node"><title>hash2</title>
<text text-anchor="middle" x="185" y="-198.9" font-family="Sans" font-size="14.00">H2</text>
</g>
<!-- hash1 -->
<g id="node15" class="node"><title>hash1</title>
<text text-anchor="middle" x="124" y="-198.9" font-family="Sans" font-size="14.00">H1</text>
</g>
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node62" class="node"><title>G2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
</g>
<!-- EF -->
<g id="node59" class="node"><title>EF</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M685.187,-71.2222C678.23,-79.5078 670.307,-89.2936 663.828,-97.6005"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M641.83,-71.2222C642.897,-79.5078 644.448,-89.2936 646.012,-97.6005"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node56" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node53" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- ABCD -->
<g id="node71" class="node"><title>ABCD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
</g>
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
<!-- EF&#45;&gt;F -->
<!-- EF&#45;&gt;E -->
<!-- EFG2 -->
<g id="node74" class="node"><title>EFG2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
</g>
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M649.136,-134.026C648.621,-148.958 648.621,-170.072 649.137,-184.997"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M713.353,-134.026C698.936,-148.958 679.279,-170.072 665.898,-184.997"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- ROOT -->
<g id="node81" class="node"><title>ROOT</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M564.299,-221.027C569.834,-227.294 576.236,-234.327 582.136,-240.622"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<!-- EFG2&#45;&gt;G2 -->
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M632.786,-221.027C627.018,-227.294 620.735,-234.327 615.281,-240.622"/>
</g>
<!-- ROOT&#45;&gt;ABCD -->
<!-- ROOT&#45;&gt;EFG2 -->
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,140 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1" ];
flag3 [ label = "1" ];
flag2 [ label = "0" ];
flag1 [ label = "1", style = "filled" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H1" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F;
E;
D;
C;
B;
A;
ROOT [ style = "filled", label = "↓" ]
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF;
F -> EF;
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2;
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT;
ROOT -> ABCD [ constraint = false, style = "invis" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

@ -0,0 +1,291 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<g id="node3" class="node"><title>flag7</title>
<text text-anchor="middle" x="300" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag6 -->
<g id="node4" class="node"><title>flag6</title>
<text text-anchor="middle" x="267" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag5 -->
<g id="node5" class="node"><title>flag5</title>
<text text-anchor="middle" x="234" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag4 -->
<g id="node6" class="node"><title>flag4</title>
<text text-anchor="middle" x="201" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag3 -->
<g id="node7" class="node"><title>flag3</title>
<text text-anchor="middle" x="168" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag2 -->
<g id="node8" class="node"><title>flag2</title>
<text text-anchor="middle" x="135" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag1 -->
<g id="node9" class="node"><title>flag1</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="115,-271.5 89,-271.5 89,-246.5 115,-246.5 115,-271.5"/>
<text text-anchor="middle" x="102" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<g id="node12" class="node"><title>hash4</title>
<text text-anchor="middle" x="307" y="-198.9" font-family="Sans" font-size="14.00">H4</text>
</g>
<!-- hash3 -->
<g id="node13" class="node"><title>hash3</title>
<text text-anchor="middle" x="246" y="-198.9" font-family="Sans" font-size="14.00">H3</text>
</g>
<!-- hash2 -->
<g id="node14" class="node"><title>hash2</title>
<text text-anchor="middle" x="185" y="-198.9" font-family="Sans" font-size="14.00">H2</text>
</g>
<!-- hash1 -->
<g id="node15" class="node"><title>hash1</title>
<text text-anchor="middle" x="124" y="-198.9" font-family="Sans" font-size="14.00">H1</text>
</g>
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node63" class="node"><title>G2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
</g>
<!-- EF -->
<g id="node60" class="node"><title>EF</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M685.187,-71.2222C678.23,-79.5078 670.307,-89.2936 663.828,-97.6005"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M641.83,-71.2222C642.897,-79.5078 644.448,-89.2936 646.012,-97.6005"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node57" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node54" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- ROOT -->
<g id="node52" class="node"><title>ROOT</title>
<polygon fill="lightgrey" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
<text text-anchor="middle" x="601" y="-254.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- ABCD -->
<g id="node72" class="node"><title>ABCD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
</g>
<!-- ROOT&#45;&gt;ABCD -->
<!-- EFG2 -->
<g id="node75" class="node"><title>EFG2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
</g>
<!-- ROOT&#45;&gt;EFG2 -->
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
<!-- EF&#45;&gt;F -->
<!-- EF&#45;&gt;E -->
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M649.136,-134.026C648.621,-148.958 648.621,-170.072 649.137,-184.997"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M713.353,-134.026C698.936,-148.958 679.279,-170.072 665.898,-184.997"/>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M571.101,-228.632C574.759,-232.676 578.541,-236.786 582.136,-240.622"/>
<polygon fill="black" stroke="black" points="573.575,-226.148 564.299,-221.027 568.357,-230.814 573.575,-226.148"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M632.786,-221.027C627.018,-227.294 620.735,-234.327 615.281,-240.622"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<!-- EFG2&#45;&gt;G2 -->
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,141 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1" ];
flag3 [ label = "1" ];
flag2 [ label = "0", style = "filled" ];
flag1 [ label = "1", style = "invis" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H1", style = "filled" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F;
E;
D;
C;
B;
A;
ABCD [ style = "filled,diagonals", label = "H1" ]
ROOT [ label = "↓" ]
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF;
F -> EF;
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2;
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,299 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<g id="node3" class="node"><title>flag7</title>
<text text-anchor="middle" x="300" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag6 -->
<g id="node4" class="node"><title>flag6</title>
<text text-anchor="middle" x="267" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag5 -->
<g id="node5" class="node"><title>flag5</title>
<text text-anchor="middle" x="234" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag4 -->
<g id="node6" class="node"><title>flag4</title>
<text text-anchor="middle" x="201" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag3 -->
<g id="node7" class="node"><title>flag3</title>
<text text-anchor="middle" x="168" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag2 -->
<g id="node8" class="node"><title>flag2</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="148,-271.5 122,-271.5 122,-246.5 148,-246.5 148,-271.5"/>
<text text-anchor="middle" x="135" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag1 -->
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<g id="node12" class="node"><title>hash4</title>
<text text-anchor="middle" x="307" y="-198.9" font-family="Sans" font-size="14.00">H4</text>
</g>
<!-- hash3 -->
<g id="node13" class="node"><title>hash3</title>
<text text-anchor="middle" x="246" y="-198.9" font-family="Sans" font-size="14.00">H3</text>
</g>
<!-- hash2 -->
<g id="node14" class="node"><title>hash2</title>
<text text-anchor="middle" x="185" y="-198.9" font-family="Sans" font-size="14.00">H2</text>
</g>
<!-- hash1 -->
<g id="node15" class="node"><title>hash1</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="151,-221 97,-221 97,-185 151,-185 151,-221"/>
<text text-anchor="middle" x="124" y="-198.9" font-family="Sans" font-size="14.00">H1</text>
</g>
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node64" class="node"><title>G2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
</g>
<!-- EF -->
<g id="node61" class="node"><title>EF</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M685.187,-71.2222C678.23,-79.5078 670.307,-89.2936 663.828,-97.6005"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M641.83,-71.2222C642.897,-79.5078 644.448,-89.2936 646.012,-97.6005"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node58" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node55" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- ABCD -->
<g id="node52" class="node"><title>ABCD</title>
<polygon fill="lightgrey" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="535,-221 523,-209 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="523,-197 535,-185 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="565,-185 577,-197 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="577,-209 565,-221 "/>
<text text-anchor="middle" x="550" y="-198.1" font-family="Sans" font-size="16.00">H1</text>
</g>
<!-- ROOT -->
<g id="node53" class="node"><title>ROOT</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
<text text-anchor="middle" x="601" y="-254.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M571.101,-228.632C574.759,-232.676 578.541,-236.786 582.136,-240.622"/>
<polygon fill="black" stroke="black" points="573.575,-226.148 564.299,-221.027 568.357,-230.814 573.575,-226.148"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- ROOT&#45;&gt;ABCD -->
<g id="edge76" class="edge"><title>ROOT&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M580.312,-232.997C576.653,-228.949 572.86,-224.846 569.241,-221.027"/>
<polygon fill="black" stroke="black" points="577.837,-235.48 587.1,-240.622 583.065,-230.826 577.837,-235.48"/>
</g>
<!-- EFG2 -->
<g id="node75" class="node"><title>EFG2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
</g>
<!-- ROOT&#45;&gt;EFG2 -->
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
<!-- EF&#45;&gt;F -->
<!-- EF&#45;&gt;E -->
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M649.136,-134.026C648.621,-148.958 648.621,-170.072 649.137,-184.997"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M713.353,-134.026C698.936,-148.958 679.279,-170.072 665.898,-184.997"/>
</g>
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M625.871,-228.632C622.236,-232.676 618.605,-236.786 615.281,-240.622"/>
<polygon fill="black" stroke="black" points="628.649,-230.78 632.786,-221.027 623.469,-226.071 628.649,-230.78"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<!-- EFG2&#45;&gt;G2 -->
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,142 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1" ];
flag3 [ label = "1", style = "filled" ];
flag2 [ label = "0", style = "invis" ];
flag1 [ label = "1", style = "invis" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H1", style = "invis" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F;
E;
D;
C;
B;
A;
EFG2 [ style = "filled", label = "↓" ]
ABCD [ style = "diagonals", label = "H1" ]
ROOT [ label = "↓" ]
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF;
F -> EF;
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,294 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<g id="node3" class="node"><title>flag7</title>
<text text-anchor="middle" x="300" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag6 -->
<g id="node4" class="node"><title>flag6</title>
<text text-anchor="middle" x="267" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag5 -->
<g id="node5" class="node"><title>flag5</title>
<text text-anchor="middle" x="234" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag4 -->
<g id="node6" class="node"><title>flag4</title>
<text text-anchor="middle" x="201" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag3 -->
<g id="node7" class="node"><title>flag3</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="181,-271.5 155,-271.5 155,-246.5 181,-246.5 181,-271.5"/>
<text text-anchor="middle" x="168" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag2 -->
<!-- flag1 -->
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<g id="node12" class="node"><title>hash4</title>
<text text-anchor="middle" x="307" y="-198.9" font-family="Sans" font-size="14.00">H4</text>
</g>
<!-- hash3 -->
<g id="node13" class="node"><title>hash3</title>
<text text-anchor="middle" x="246" y="-198.9" font-family="Sans" font-size="14.00">H3</text>
</g>
<!-- hash2 -->
<g id="node14" class="node"><title>hash2</title>
<text text-anchor="middle" x="185" y="-198.9" font-family="Sans" font-size="14.00">H2</text>
</g>
<!-- hash1 -->
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node65" class="node"><title>G2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
</g>
<!-- EF -->
<g id="node62" class="node"><title>EF</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M685.187,-71.2222C678.23,-79.5078 670.307,-89.2936 663.828,-97.6005"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M641.83,-71.2222C642.897,-79.5078 644.448,-89.2936 646.012,-97.6005"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node59" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node56" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- EFG2 -->
<g id="node52" class="node"><title>EFG2</title>
<polygon fill="lightgrey" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
<text text-anchor="middle" x="651" y="-198.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- ROOT -->
<g id="node54" class="node"><title>ROOT</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
<text text-anchor="middle" x="601" y="-254.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M625.871,-228.632C622.236,-232.676 618.605,-236.786 615.281,-240.622"/>
<polygon fill="black" stroke="black" points="628.649,-230.78 632.786,-221.027 623.469,-226.071 628.649,-230.78"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<!-- EFG2&#45;&gt;G2 -->
<!-- ABCD -->
<g id="node53" class="node"><title>ABCD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="535,-221 523,-209 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="523,-197 535,-185 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="565,-185 577,-197 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="577,-209 565,-221 "/>
<text text-anchor="middle" x="550" y="-198.1" font-family="Sans" font-size="16.00">H1</text>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M571.101,-228.632C574.759,-232.676 578.541,-236.786 582.136,-240.622"/>
<polygon fill="black" stroke="black" points="573.575,-226.148 564.299,-221.027 568.357,-230.814 573.575,-226.148"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- ROOT&#45;&gt;EFG2 -->
<!-- ROOT&#45;&gt;ABCD -->
<g id="edge76" class="edge"><title>ROOT&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M580.312,-232.997C576.653,-228.949 572.86,-224.846 569.241,-221.027"/>
<polygon fill="black" stroke="black" points="577.837,-235.48 587.1,-240.622 583.065,-230.826 577.837,-235.48"/>
</g>
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
<!-- EF&#45;&gt;F -->
<!-- EF&#45;&gt;E -->
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M648.879,-144.184C648.644,-157.59 648.73,-173.22 649.137,-184.997"/>
<polygon fill="black" stroke="black" points="652.382,-144.112 649.136,-134.026 645.384,-143.935 652.382,-144.112"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M713.353,-134.026C698.936,-148.958 679.279,-170.072 665.898,-184.997"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,140 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1" ];
flag4 [ label = "1", style = "filled" ];
flag3 [ label = "1", style = "invis" ];
flag2 [ label = "0", style = "invis" ];
flag1 [ label = "1", style = "invis" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2" ];
hash1 [ label = "H1", style = "invis" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F;
E;
D;
C;
B;
A;
EF [ style = "filled", label = "↓" ];
EFG2 [ label = "↓" ];
ABCD [ style = "diagonals", label = "H1" ];
ROOT [ label = "↓" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF;
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, style = "invis" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,293 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<g id="node3" class="node"><title>flag7</title>
<text text-anchor="middle" x="300" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag6 -->
<g id="node4" class="node"><title>flag6</title>
<text text-anchor="middle" x="267" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag5 -->
<g id="node5" class="node"><title>flag5</title>
<text text-anchor="middle" x="234" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag4 -->
<g id="node6" class="node"><title>flag4</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="214,-271.5 188,-271.5 188,-246.5 214,-246.5 214,-271.5"/>
<text text-anchor="middle" x="201" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag3 -->
<!-- flag2 -->
<!-- flag1 -->
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<g id="node12" class="node"><title>hash4</title>
<text text-anchor="middle" x="307" y="-198.9" font-family="Sans" font-size="14.00">H4</text>
</g>
<!-- hash3 -->
<g id="node13" class="node"><title>hash3</title>
<text text-anchor="middle" x="246" y="-198.9" font-family="Sans" font-size="14.00">H3</text>
</g>
<!-- hash2 -->
<g id="node14" class="node"><title>hash2</title>
<text text-anchor="middle" x="185" y="-198.9" font-family="Sans" font-size="14.00">H2</text>
</g>
<!-- hash1 -->
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node65" class="node"><title>G2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
</g>
<!-- EF -->
<g id="node52" class="node"><title>EF</title>
<polygon fill="lightgrey" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
<text text-anchor="middle" x="651" y="-111.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M685.187,-71.2222C678.23,-79.5078 670.307,-89.2936 663.828,-97.6005"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M643.274,-81.4411C644.111,-86.9273 645.059,-92.5385 646.012,-97.6005"/>
<polygon fill="black" stroke="black" points="646.695,-80.6343 641.83,-71.2222 639.764,-81.6135 646.695,-80.6343"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node60" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node57" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- EF&#45;&gt;F -->
<!-- EF&#45;&gt;E -->
<!-- EFG2 -->
<g id="node53" class="node"><title>EFG2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
<text text-anchor="middle" x="651" y="-198.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M648.879,-144.184C648.644,-157.59 648.73,-173.22 649.137,-184.997"/>
<polygon fill="black" stroke="black" points="652.382,-144.112 649.136,-134.026 645.384,-143.935 652.382,-144.112"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<!-- ROOT -->
<g id="node55" class="node"><title>ROOT</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
<text text-anchor="middle" x="601" y="-254.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M625.871,-228.632C622.236,-232.676 618.605,-236.786 615.281,-240.622"/>
<polygon fill="black" stroke="black" points="628.649,-230.78 632.786,-221.027 623.469,-226.071 628.649,-230.78"/>
</g>
<!-- EFG2&#45;&gt;G2 -->
<!-- ABCD -->
<g id="node54" class="node"><title>ABCD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="535,-221 523,-209 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="523,-197 535,-185 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="565,-185 577,-197 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="577,-209 565,-221 "/>
<text text-anchor="middle" x="550" y="-198.1" font-family="Sans" font-size="16.00">H1</text>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M571.101,-228.632C574.759,-232.676 578.541,-236.786 582.136,-240.622"/>
<polygon fill="black" stroke="black" points="573.575,-226.148 564.299,-221.027 568.357,-230.814 573.575,-226.148"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- ROOT&#45;&gt;EFG2 -->
<!-- ROOT&#45;&gt;ABCD -->
<g id="edge76" class="edge"><title>ROOT&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M580.312,-232.997C576.653,-228.949 572.86,-224.846 569.241,-221.027"/>
<polygon fill="black" stroke="black" points="577.837,-235.48 587.1,-240.622 583.065,-230.826 577.837,-235.48"/>
</g>
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M713.353,-134.026C698.936,-148.958 679.279,-170.072 665.898,-184.997"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,140 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0" ];
flag5 [ label = "1", style = "filled" ];
flag4 [ label = "1", style = "invis" ];
flag3 [ label = "1", style = "invis" ];
flag2 [ label = "0", style = "invis" ];
flag1 [ label = "1", style = "invis" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3" ];
hash2 [ label = "H2", style = "filled" ];
hash1 [ label = "H1", style = "invis" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F;
E [ penwidth = 4, style = "filled,diagonals", label = "H2" ];
D;
C;
B;
A;
EF [ label = "↓" ];
EFG2 [ label = "↓" ];
ABCD [ style = "diagonals", label = "H1" ];
ROOT [ label = "↓" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, style = "invis" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -0,0 +1,301 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<g id="node3" class="node"><title>flag7</title>
<text text-anchor="middle" x="300" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag6 -->
<g id="node4" class="node"><title>flag6</title>
<text text-anchor="middle" x="267" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag5 -->
<g id="node5" class="node"><title>flag5</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="247,-271.5 221,-271.5 221,-246.5 247,-246.5 247,-271.5"/>
<text text-anchor="middle" x="234" y="-254.9" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- flag4 -->
<!-- flag3 -->
<!-- flag2 -->
<!-- flag1 -->
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<g id="node12" class="node"><title>hash4</title>
<text text-anchor="middle" x="307" y="-198.9" font-family="Sans" font-size="14.00">H4</text>
</g>
<!-- hash3 -->
<g id="node13" class="node"><title>hash3</title>
<text text-anchor="middle" x="246" y="-198.9" font-family="Sans" font-size="14.00">H3</text>
</g>
<!-- hash2 -->
<g id="node14" class="node"><title>hash2</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="212,-221 158,-221 158,-185 212,-185 212,-221"/>
<text text-anchor="middle" x="185" y="-198.9" font-family="Sans" font-size="14.00">H2</text>
</g>
<!-- hash1 -->
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node65" class="node"><title>G2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
</g>
<!-- EF -->
<g id="node52" class="node"><title>EF</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
<text text-anchor="middle" x="651" y="-111.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M678.799,-78.9203C673.653,-85.1878 668.383,-91.7597 663.828,-97.6005"/>
<polygon fill="black" stroke="black" points="681.494,-81.1528 685.187,-71.2222 676.107,-76.6826 681.494,-81.1528"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="lightgrey" stroke="black" stroke-width="4" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
<polyline fill="none" stroke="black" stroke-width="4" points="626,-71 614,-59 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="614,-47 626,-35 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="656,-35 668,-47 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="668,-59 656,-71 "/>
<text text-anchor="middle" x="641" y="-48.1" font-family="Sans" font-size="16.00">H2</text>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M643.274,-81.4411C644.111,-86.9273 645.059,-92.5385 646.012,-97.6005"/>
<polygon fill="black" stroke="black" points="646.695,-80.6343 641.83,-71.2222 639.764,-81.6135 646.695,-80.6343"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node60" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node57" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- EF&#45;&gt;F -->
<!-- EF&#45;&gt;E -->
<g id="edge50" class="edge"><title>EF&#45;&gt;E</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M649.444,-87.3665C648.615,-81.8774 647.645,-76.2713 646.642,-71.2222"/>
<polygon fill="black" stroke="black" points="646.02,-88.1634 650.836,-97.6005 652.956,-87.22 646.02,-88.1634"/>
</g>
<!-- EFG2 -->
<g id="node53" class="node"><title>EFG2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
<text text-anchor="middle" x="651" y="-198.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M648.879,-144.184C648.644,-157.59 648.73,-173.22 649.137,-184.997"/>
<polygon fill="black" stroke="black" points="652.382,-144.112 649.136,-134.026 645.384,-143.935 652.382,-144.112"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<!-- ROOT -->
<g id="node55" class="node"><title>ROOT</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
<text text-anchor="middle" x="601" y="-254.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M625.871,-228.632C622.236,-232.676 618.605,-236.786 615.281,-240.622"/>
<polygon fill="black" stroke="black" points="628.649,-230.78 632.786,-221.027 623.469,-226.071 628.649,-230.78"/>
</g>
<!-- EFG2&#45;&gt;G2 -->
<!-- ABCD -->
<g id="node54" class="node"><title>ABCD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="535,-221 523,-209 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="523,-197 535,-185 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="565,-185 577,-197 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="577,-209 565,-221 "/>
<text text-anchor="middle" x="550" y="-198.1" font-family="Sans" font-size="16.00">H1</text>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M571.101,-228.632C574.759,-232.676 578.541,-236.786 582.136,-240.622"/>
<polygon fill="black" stroke="black" points="573.575,-226.148 564.299,-221.027 568.357,-230.814 573.575,-226.148"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- ROOT&#45;&gt;EFG2 -->
<!-- ROOT&#45;&gt;ABCD -->
<g id="edge76" class="edge"><title>ROOT&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M580.312,-232.997C576.653,-228.949 572.86,-224.846 569.241,-221.027"/>
<polygon fill="black" stroke="black" points="577.837,-235.48 587.1,-240.622 583.065,-230.826 577.837,-235.48"/>
</g>
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M713.353,-134.026C698.936,-148.958 679.279,-170.072 665.898,-184.997"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,140 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0", style = "filled" ];
flag5 [ label = "1", style = "invis" ];
flag4 [ label = "1", style = "invis" ];
flag3 [ label = "1", style = "invis" ];
flag2 [ label = "0", style = "invis" ];
flag1 [ label = "1", style = "invis" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3", style = "filled" ];
hash2 [ label = "H2", style = "invis" ];
hash1 [ label = "H1", style = "invis" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F [ style = "filled,diagonals" label = "H3" ];
E [ penwidth = 4, style = "diagonals", label = "H2" ];
D;
C;
B;
A;
EF [ label = "↓" ];
EFG2 [ label = "↓" ];
ABCD [ style = "diagonals", label = "H1" ];
ROOT [ label = "↓" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2;
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, style = "invis" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View file

@ -0,0 +1,304 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<g id="node3" class="node"><title>flag7</title>
<text text-anchor="middle" x="300" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag6 -->
<g id="node4" class="node"><title>flag6</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="280,-271.5 254,-271.5 254,-246.5 280,-246.5 280,-271.5"/>
<text text-anchor="middle" x="267" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag5 -->
<!-- flag4 -->
<!-- flag3 -->
<!-- flag2 -->
<!-- flag1 -->
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<g id="node12" class="node"><title>hash4</title>
<text text-anchor="middle" x="307" y="-198.9" font-family="Sans" font-size="14.00">H4</text>
</g>
<!-- hash3 -->
<g id="node13" class="node"><title>hash3</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="273,-221 219,-221 219,-185 273,-185 273,-221"/>
<text text-anchor="middle" x="246" y="-198.9" font-family="Sans" font-size="14.00">H3</text>
</g>
<!-- hash2 -->
<!-- hash1 -->
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node65" class="node"><title>G2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="lightgrey" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="687,-71 675,-59 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="675,-47 687,-35 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="717,-35 729,-47 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="729,-59 717,-71 "/>
<text text-anchor="middle" x="702" y="-48.1" font-family="Sans" font-size="16.00">H3</text>
</g>
<!-- EF -->
<g id="node52" class="node"><title>EF</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
<text text-anchor="middle" x="651" y="-111.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M678.799,-78.9203C673.653,-85.1878 668.383,-91.7597 663.828,-97.6005"/>
<polygon fill="black" stroke="black" points="681.494,-81.1528 685.187,-71.2222 676.107,-76.6826 681.494,-81.1528"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="none" stroke="black" stroke-width="4" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
<polyline fill="none" stroke="black" stroke-width="4" points="626,-71 614,-59 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="614,-47 626,-35 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="656,-35 668,-47 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="668,-59 656,-71 "/>
<text text-anchor="middle" x="641" y="-48.1" font-family="Sans" font-size="16.00">H2</text>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M643.274,-81.4411C644.111,-86.9273 645.059,-92.5385 646.012,-97.6005"/>
<polygon fill="black" stroke="black" points="646.695,-80.6343 641.83,-71.2222 639.764,-81.6135 646.695,-80.6343"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node60" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node57" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- EF&#45;&gt;F -->
<g id="edge52" class="edge"><title>EF&#45;&gt;F</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M675.098,-89.8891C680.269,-83.6155 685.515,-77.048 689.998,-71.2222"/>
<polygon fill="black" stroke="black" points="672.38,-87.6835 668.651,-97.6005 677.75,-92.1733 672.38,-87.6835"/>
</g>
<!-- EF&#45;&gt;E -->
<g id="edge50" class="edge"><title>EF&#45;&gt;E</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M649.444,-87.3665C648.615,-81.8774 647.645,-76.2713 646.642,-71.2222"/>
<polygon fill="black" stroke="black" points="646.02,-88.1634 650.836,-97.6005 652.956,-87.22 646.02,-88.1634"/>
</g>
<!-- EFG2 -->
<g id="node53" class="node"><title>EFG2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
<text text-anchor="middle" x="651" y="-198.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M648.879,-144.184C648.644,-157.59 648.73,-173.22 649.137,-184.997"/>
<polygon fill="black" stroke="black" points="652.382,-144.112 649.136,-134.026 645.384,-143.935 652.382,-144.112"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<!-- ROOT -->
<g id="node55" class="node"><title>ROOT</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
<text text-anchor="middle" x="601" y="-254.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M625.871,-228.632C622.236,-232.676 618.605,-236.786 615.281,-240.622"/>
<polygon fill="black" stroke="black" points="628.649,-230.78 632.786,-221.027 623.469,-226.071 628.649,-230.78"/>
</g>
<!-- EFG2&#45;&gt;G2 -->
<!-- ABCD -->
<g id="node54" class="node"><title>ABCD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="535,-221 523,-209 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="523,-197 535,-185 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="565,-185 577,-197 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="577,-209 565,-221 "/>
<text text-anchor="middle" x="550" y="-198.1" font-family="Sans" font-size="16.00">H1</text>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M571.101,-228.632C574.759,-232.676 578.541,-236.786 582.136,-240.622"/>
<polygon fill="black" stroke="black" points="573.575,-226.148 564.299,-221.027 568.357,-230.814 573.575,-226.148"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- ROOT&#45;&gt;EFG2 -->
<!-- ROOT&#45;&gt;ABCD -->
<g id="edge76" class="edge"><title>ROOT&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M580.312,-232.997C576.653,-228.949 572.86,-224.846 569.241,-221.027"/>
<polygon fill="black" stroke="black" points="577.837,-235.48 587.1,-240.622 583.065,-230.826 577.837,-235.48"/>
</g>
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M713.353,-134.026C698.936,-148.958 679.279,-170.072 665.898,-184.997"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,140 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0" ];
flag6 [ label = "0", style = "invis" ];
flag5 [ label = "1", style = "invis" ];
flag4 [ label = "1", style = "invis" ];
flag3 [ label = "1", style = "invis" ];
flag2 [ label = "0", style = "invis" ];
flag1 [ label = "1", style = "invis" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4" ];
hash3 [ label = "H3", style = "invis" ];
hash2 [ label = "H2", style = "invis" ];
hash1 [ label = "H1", style = "invis" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F [ style = "diagonals", label = "H3" ];
E [ penwidth = 4, style = "diagonals", label = "H2" ];
D;
C;
B;
A;
EF [ label = "H()", style = "filled" ];
EFG2 [ label = "↓" ];
ABCD [ style = "diagonals", label = "H1" ];
ROOT [ label = "↓" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2 [ dir = "back" ];
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, dir = "back" ];
EFG2 -> G2 [ constraint = false, style = "invis" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View file

@ -0,0 +1,301 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<g id="node3" class="node"><title>flag7</title>
<text text-anchor="middle" x="300" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag6 -->
<!-- flag5 -->
<!-- flag4 -->
<!-- flag3 -->
<!-- flag2 -->
<!-- flag1 -->
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<g id="node12" class="node"><title>hash4</title>
<text text-anchor="middle" x="307" y="-198.9" font-family="Sans" font-size="14.00">H4</text>
</g>
<!-- hash3 -->
<!-- hash2 -->
<!-- hash1 -->
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node65" class="node"><title>G2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="687,-71 675,-59 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="675,-47 687,-35 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="717,-35 729,-47 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="729,-59 717,-71 "/>
<text text-anchor="middle" x="702" y="-48.1" font-family="Sans" font-size="16.00">H3</text>
</g>
<!-- EF -->
<g id="node52" class="node"><title>EF</title>
<polygon fill="lightgrey" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
<text text-anchor="middle" x="651" y="-111.1" font-family="Sans" font-size="16.00">H()</text>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M678.799,-78.9203C673.653,-85.1878 668.383,-91.7597 663.828,-97.6005"/>
<polygon fill="black" stroke="black" points="681.494,-81.1528 685.187,-71.2222 676.107,-76.6826 681.494,-81.1528"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="none" stroke="black" stroke-width="4" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
<polyline fill="none" stroke="black" stroke-width="4" points="626,-71 614,-59 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="614,-47 626,-35 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="656,-35 668,-47 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="668,-59 656,-71 "/>
<text text-anchor="middle" x="641" y="-48.1" font-family="Sans" font-size="16.00">H2</text>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M643.274,-81.4411C644.111,-86.9273 645.059,-92.5385 646.012,-97.6005"/>
<polygon fill="black" stroke="black" points="646.695,-80.6343 641.83,-71.2222 639.764,-81.6135 646.695,-80.6343"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node60" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node57" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- EF&#45;&gt;F -->
<g id="edge52" class="edge"><title>EF&#45;&gt;F</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M675.098,-89.8891C680.269,-83.6155 685.515,-77.048 689.998,-71.2222"/>
<polygon fill="black" stroke="black" points="672.38,-87.6835 668.651,-97.6005 677.75,-92.1733 672.38,-87.6835"/>
</g>
<!-- EF&#45;&gt;E -->
<g id="edge50" class="edge"><title>EF&#45;&gt;E</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M649.444,-87.3665C648.615,-81.8774 647.645,-76.2713 646.642,-71.2222"/>
<polygon fill="black" stroke="black" points="646.02,-88.1634 650.836,-97.6005 652.956,-87.22 646.02,-88.1634"/>
</g>
<!-- EFG2 -->
<g id="node53" class="node"><title>EFG2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
<text text-anchor="middle" x="651" y="-198.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M648.879,-144.184C648.644,-157.59 648.73,-173.22 649.137,-184.997"/>
<polygon fill="black" stroke="black" points="652.382,-144.112 649.136,-134.026 645.384,-143.935 652.382,-144.112"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<g id="edge68" class="edge"><title>EFG2&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M653.828,-174.842C654.141,-161.439 654.027,-145.808 653.486,-134.026"/>
<polygon fill="black" stroke="black" points="650.324,-174.884 653.485,-184.997 657.32,-175.121 650.324,-174.884"/>
</g>
<!-- ROOT -->
<g id="node55" class="node"><title>ROOT</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
<text text-anchor="middle" x="601" y="-254.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M625.871,-228.632C622.236,-232.676 618.605,-236.786 615.281,-240.622"/>
<polygon fill="black" stroke="black" points="628.649,-230.78 632.786,-221.027 623.469,-226.071 628.649,-230.78"/>
</g>
<!-- EFG2&#45;&gt;G2 -->
<!-- ABCD -->
<g id="node54" class="node"><title>ABCD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="535,-221 523,-209 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="523,-197 535,-185 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="565,-185 577,-197 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="577,-209 565,-221 "/>
<text text-anchor="middle" x="550" y="-198.1" font-family="Sans" font-size="16.00">H1</text>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M571.101,-228.632C574.759,-232.676 578.541,-236.786 582.136,-240.622"/>
<polygon fill="black" stroke="black" points="573.575,-226.148 564.299,-221.027 568.357,-230.814 573.575,-226.148"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- ROOT&#45;&gt;EFG2 -->
<!-- ROOT&#45;&gt;ABCD -->
<g id="edge76" class="edge"><title>ROOT&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M580.312,-232.997C576.653,-228.949 572.86,-224.846 569.241,-221.027"/>
<polygon fill="black" stroke="black" points="577.837,-235.48 587.1,-240.622 583.065,-230.826 577.837,-235.48"/>
</g>
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M706.255,-141.431C692.947,-155.405 677.188,-172.404 665.898,-184.997"/>
<polygon fill="black" stroke="black" points="708.959,-143.668 713.353,-134.026 703.906,-138.824 708.959,-143.668"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,141 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0", style = "filled" ];
flag6 [ label = "0", style = "invis" ];
flag5 [ label = "1", style = "invis" ];
flag4 [ label = "1", style = "invis" ];
flag3 [ label = "1", style = "invis" ];
flag2 [ label = "0", style = "invis" ];
flag1 [ label = "1", style = "invis" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4", style = "filled" ];
hash3 [ label = "H3", style = "invis" ];
hash2 [ label = "H2", style = "invis" ];
hash1 [ label = "H1", style = "invis" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F [ style = "diagonals", label = "H3" ];
E [ penwidth = 4, style = "diagonals", label = "H2" ];
D;
C;
B;
A;
G2 [ label = "H4", style = "filled,diagonals" ];
EF [ label = "H()", ];
EFG2 [ label = "↓" ];
ABCD [ style = "diagonals", label = "H1" ];
ROOT [ label = "↓" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2 [ dir = "back" ];
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, dir = "back" ];
EFG2 -> G2 [ constraint = false, dir = "back" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, style = "invis" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View file

@ -0,0 +1,312 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<g id="node3" class="node"><title>flag7</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="313,-271.5 287,-271.5 287,-246.5 313,-246.5 313,-271.5"/>
<text text-anchor="middle" x="300" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag6 -->
<!-- flag5 -->
<!-- flag4 -->
<!-- flag3 -->
<!-- flag2 -->
<!-- flag1 -->
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<g id="node12" class="node"><title>hash4</title>
<polygon fill="lightgrey" stroke="lightgrey" stroke-width="1.75" points="334,-221 280,-221 280,-185 334,-185 334,-221"/>
<text text-anchor="middle" x="307" y="-198.9" font-family="Sans" font-size="14.00">H4</text>
</g>
<!-- hash3 -->
<!-- hash2 -->
<!-- hash1 -->
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node52" class="node"><title>G2</title>
<polygon fill="lightgrey" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="717,-134 705,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="705,-110 717,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="747,-98 759,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="759,-122 747,-134 "/>
<text text-anchor="middle" x="732" y="-111.1" font-family="Sans" font-size="16.00">H4</text>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="687,-71 675,-59 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="675,-47 687,-35 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="717,-35 729,-47 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="729,-59 717,-71 "/>
<text text-anchor="middle" x="702" y="-48.1" font-family="Sans" font-size="16.00">H3</text>
</g>
<!-- EF -->
<g id="node53" class="node"><title>EF</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
<text text-anchor="middle" x="651" y="-111.1" font-family="Sans" font-size="16.00">H()</text>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M678.799,-78.9203C673.653,-85.1878 668.383,-91.7597 663.828,-97.6005"/>
<polygon fill="black" stroke="black" points="681.494,-81.1528 685.187,-71.2222 676.107,-76.6826 681.494,-81.1528"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="none" stroke="black" stroke-width="4" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
<polyline fill="none" stroke="black" stroke-width="4" points="626,-71 614,-59 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="614,-47 626,-35 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="656,-35 668,-47 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="668,-59 656,-71 "/>
<text text-anchor="middle" x="641" y="-48.1" font-family="Sans" font-size="16.00">H2</text>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M643.274,-81.4411C644.111,-86.9273 645.059,-92.5385 646.012,-97.6005"/>
<polygon fill="black" stroke="black" points="646.695,-80.6343 641.83,-71.2222 639.764,-81.6135 646.695,-80.6343"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node61" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node58" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- EFG2 -->
<g id="node54" class="node"><title>EFG2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
<text text-anchor="middle" x="651" y="-198.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M706.255,-141.431C692.947,-155.405 677.188,-172.404 665.898,-184.997"/>
<polygon fill="black" stroke="black" points="708.959,-143.668 713.353,-134.026 703.906,-138.824 708.959,-143.668"/>
</g>
<!-- EF&#45;&gt;F -->
<g id="edge52" class="edge"><title>EF&#45;&gt;F</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M675.098,-89.8891C680.269,-83.6155 685.515,-77.048 689.998,-71.2222"/>
<polygon fill="black" stroke="black" points="672.38,-87.6835 668.651,-97.6005 677.75,-92.1733 672.38,-87.6835"/>
</g>
<!-- EF&#45;&gt;E -->
<g id="edge50" class="edge"><title>EF&#45;&gt;E</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M649.444,-87.3665C648.615,-81.8774 647.645,-76.2713 646.642,-71.2222"/>
<polygon fill="black" stroke="black" points="646.02,-88.1634 650.836,-97.6005 652.956,-87.22 646.02,-88.1634"/>
</g>
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M648.879,-144.184C648.644,-157.59 648.73,-173.22 649.137,-184.997"/>
<polygon fill="black" stroke="black" points="652.382,-144.112 649.136,-134.026 645.384,-143.935 652.382,-144.112"/>
</g>
<!-- EFG2&#45;&gt;G2 -->
<g id="edge70" class="edge"><title>EFG2&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M677.41,-177.594C690.815,-163.625 706.552,-146.625 717.702,-134.026"/>
<polygon fill="black" stroke="black" points="674.685,-175.377 670.246,-184.997 679.716,-180.245 674.685,-175.377"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<g id="edge68" class="edge"><title>EFG2&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M653.828,-174.842C654.141,-161.439 654.027,-145.808 653.486,-134.026"/>
<polygon fill="black" stroke="black" points="650.324,-174.884 653.485,-184.997 657.32,-175.121 650.324,-174.884"/>
</g>
<!-- ROOT -->
<g id="node56" class="node"><title>ROOT</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
<text text-anchor="middle" x="601" y="-254.1" font-family="Sans" font-size="16.00"></text>
</g>
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M625.871,-228.632C622.236,-232.676 618.605,-236.786 615.281,-240.622"/>
<polygon fill="black" stroke="black" points="628.649,-230.78 632.786,-221.027 623.469,-226.071 628.649,-230.78"/>
</g>
<!-- ABCD -->
<g id="node55" class="node"><title>ABCD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="535,-221 523,-209 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="523,-197 535,-185 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="565,-185 577,-197 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="577,-209 565,-221 "/>
<text text-anchor="middle" x="550" y="-198.1" font-family="Sans" font-size="16.00">H1</text>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M571.101,-228.632C574.759,-232.676 578.541,-236.786 582.136,-240.622"/>
<polygon fill="black" stroke="black" points="573.575,-226.148 564.299,-221.027 568.357,-230.814 573.575,-226.148"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- ROOT&#45;&gt;EFG2 -->
<!-- ROOT&#45;&gt;ABCD -->
<g id="edge76" class="edge"><title>ROOT&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M580.312,-232.997C576.653,-228.949 572.86,-224.846 569.241,-221.027"/>
<polygon fill="black" stroke="black" points="577.837,-235.48 587.1,-240.622 583.065,-230.826 577.837,-235.48"/>
</g>
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,141 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0", style = "invis" ];
flag6 [ label = "0", style = "invis" ];
flag5 [ label = "1", style = "invis" ];
flag4 [ label = "1", style = "invis" ];
flag3 [ label = "1", style = "invis" ];
flag2 [ label = "0", style = "invis" ];
flag1 [ label = "1", style = "invis" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4", style = "invis" ];
hash3 [ label = "H3", style = "invis" ];
hash2 [ label = "H2", style = "invis" ];
hash1 [ label = "H1", style = "invis" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F [ style = "diagonals", label = "H3" ];
E [ penwidth = 4, style = "diagonals", label = "H2" ];
D;
C;
B;
A;
G2 [ label = "H4", style = "diagonals" ];
EF [ label = "H()" ];
EFG2 [ label = "H()", style = "filled" ];
ABCD [ style = "diagonals", label = "H1" ];
ROOT [ label = "↓" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2 [ dir = "back" ];
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, dir = "back" ];
EFG2 -> G2 [ constraint = false, dir = "back" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, dir = "back" ];
}
//label = "Parsing A MerkleBlock Message"
}

View file

@ -0,0 +1,141 @@
digraph merkleblock {
//size="6.25,2.22";
size="6.25";
rankdir=BT
nodesep=0.1
splines="false"
edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", ]
graph [ penwidth = 1.75, fontname="Sans", fontsize = 16 ]
subgraph cluster_flags {
node [ label = "", width=0.2, height=0.2, fontsize = 14, shape = "none" ];
graph [ penwidth = 0 ];
flag8 [ label = "0" ];
flag7 [ label = "0", style = "invis" ];
flag6 [ label = "0", style = "invis" ];
flag5 [ label = "1", style = "invis" ];
flag4 [ label = "1", style = "invis" ];
flag3 [ label = "1", style = "invis" ];
flag2 [ label = "0", style = "invis" ];
flag1 [ label = "1", style = "invis" ];
flag_label [ label = "Flags", shape = "none", fontsize = 16 ];
}
subgraph cluster_hashes {
graph [ penwidth = 0 ];
node [ shape = "none" ];
hash4 [ label = "H4", style = "invis" ];
hash3 [ label = "H3", style = "invis" ];
hash2 [ label = "H2", style = "invis" ];
hash1 [ label = "H1", style = "invis" ];
hash_label [ label = "Hashes", shape = "none", fontsize = 16 ];
}
hash_label -> flag_label [ style = "invis" ];
subgraph cluster_legend {
node [ label = "", fontsize = 18 ];
graph [ penwidth = 0 ];
edge [ style = "invis" ];
ranksep = 3;
{
node [ shape = "none" ];
matched_filter_label [ label = "TXID\nFilter\nMatch" ];
hash_from_list_label [ label = "Hash\nFrom\nList" ];
hash_computed_label [ label = "Hash\nCom-\nputed" ];
waiting_label [ label = "Wait\nFor\nChild" ];
}
matched_filter [ penwidth = 4, style = "diagonals", bgcolor = grey ];
hash_from_list [ label = "H1", style = "diagonals" ];
hash_computed [ label = "H()" ];
waiting [ label = "↓" ];
pre_legend_label [ label = "", style = "invis", width=0, height=0 ];
legend_label [ label = "", style = "invis", width=0, height=0 ];
pre_legend_label -> legend_label [ style = "invis" ];
waiting_label -> waiting;
hash_from_list_label -> hash_from_list;
hash_computed_label -> hash_computed;
matched_filter_label -> matched_filter;
labelloc = b;
label = "Legend"
}
legend_label -> hash_label [ style = "invis" ];
subgraph cluster_tree {
edge [ dir = "none" ];
node [ label = "", fontsize = 16 ];
graph [ penwidth = 0 ];
{
root_row [ shape = "none" ];
row1 [ shape = "none", label = "Non-TXID\nNodes" ];
row2 [ shape = "none", style = "invis", width = 1.2 ];
txid_row [ label = "TXID\nNodes", shape = "none" ];
row2 -> row1 [ dir = "back" ];
row1 -> root_row [ dir = ""];
txid_row -> row2 [ style = "invis" ];
}
G;
F [ style = "diagonals", label = "H3" ];
E [ penwidth = 4, style = "diagonals", label = "H2" ];
D;
C;
B;
A;
G2 [ label = "H4", style = "diagonals" ];
EF [ label = "H()", ];
EFG2 [ label = "H()" ];
ABCD [ style = "diagonals", label = "H1" ];
ROOT [ label = "H()", style = "filled" ];
A -> AB;
B -> AB;
C -> CD;
D -> CD;
E -> EF [ dir = "back" ];
F -> EF [ dir = "back" ];
G -> G2;
AB -> A [ constraint = false, style = "invis" ];
AB -> B [ constraint = false, style = "invis" ];
CD -> C [ constraint = false, style = "invis" ];
CD -> D [ constraint = false, style = "invis" ];
EF -> E [ constraint = false, dir = "back" ];
EF -> F [ constraint = false, dir = "back" ];
G2 -> G [ constraint = false, style = "invis" ];
AB -> ABCD;
CD -> ABCD;
EF -> EFG2 [ dir = "back" ];
G2 -> EFG2 [ dir = "back" ];
ABCD -> AB [ constraint = false, style = "invis" ];
ABCD -> CD [ constraint = false, style = "invis" ];
EFG2 -> EF [ constraint = false, dir = "back" ];
EFG2 -> G2 [ constraint = false, dir = "back" ];
ABCD -> ROOT [ dir = "back" ];
EFG2 -> ROOT [ dir = "back" ];
ROOT -> ABCD [ constraint = false, dir = "back" ];
ROOT -> EFG2 [ constraint = false, dir = "back" ];
}
//label = "Parsing A MerkleBlock Message"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View file

@ -0,0 +1,308 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: merkleblock Pages: 1 -->
<svg width="450pt" height="153pt"
viewBox="0.00 0.00 450.00 152.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.507328 0.507328) rotate(0) translate(4 297)">
<title>merkleblock</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-297 884,-297 884,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_flags</title>
<polygon fill="none" stroke="black" stroke-width="0" points="16,-237 16,-281 354,-281 354,-237 16,-237"/>
</g>
<g id="graph3" class="cluster"><title>cluster_hashes</title>
<polygon fill="none" stroke="black" stroke-width="0" points="8,-177 8,-229 342,-229 342,-177 8,-177"/>
</g>
<g id="graph4" class="cluster"><title>cluster_legend</title>
<polygon fill="none" stroke="black" stroke-width="0" points="45,-8 45,-169 349,-169 349,-8 45,-8"/>
<text text-anchor="middle" x="197" y="-150.6" font-family="Sans" font-size="16.00">Legend</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tree</title>
<polygon fill="none" stroke="black" stroke-width="0" points="362,-22 362,-285 871,-285 871,-22 362,-22"/>
</g>
<!-- flag8 -->
<g id="node2" class="node"><title>flag8</title>
<text text-anchor="middle" x="333" y="-254.9" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- flag7 -->
<!-- flag6 -->
<!-- flag5 -->
<!-- flag4 -->
<!-- flag3 -->
<!-- flag2 -->
<!-- flag1 -->
<!-- flag_label -->
<g id="node10" class="node"><title>flag_label</title>
<text text-anchor="middle" x="53" y="-254.1" font-family="Sans" font-size="16.00">Flags</text>
</g>
<!-- hash4 -->
<!-- hash3 -->
<!-- hash2 -->
<!-- hash1 -->
<!-- hash_label -->
<g id="node16" class="node"><title>hash_label</title>
<text text-anchor="middle" x="53" y="-198.1" font-family="Sans" font-size="16.00">Hashes</text>
</g>
<!-- hash_label&#45;&gt;flag_label -->
<!-- matched_filter_label -->
<g id="node20" class="node"><title>matched_filter_label</title>
<text text-anchor="middle" x="306" y="-69.8" font-family="Sans" font-size="18.00">TXID</text>
<text text-anchor="middle" x="306" y="-47.8" font-family="Sans" font-size="18.00">Filter</text>
<text text-anchor="middle" x="306" y="-25.8" font-family="Sans" font-size="18.00">Match</text>
</g>
<!-- matched_filter -->
<g id="node24" class="node"><title>matched_filter</title>
<polygon fill="none" stroke="black" stroke-width="4" points="333,-134 279,-134 279,-98 333,-98 333,-134"/>
<polyline fill="none" stroke="black" stroke-width="4" points="291,-134 279,-122 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="279,-110 291,-98 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="321,-98 333,-110 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="333,-122 321,-134 "/>
</g>
<!-- matched_filter_label&#45;&gt;matched_filter -->
<!-- hash_from_list_label -->
<g id="node21" class="node"><title>hash_from_list_label</title>
<text text-anchor="middle" x="234" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="234" y="-47.8" font-family="Sans" font-size="18.00">From</text>
<text text-anchor="middle" x="234" y="-25.8" font-family="Sans" font-size="18.00">List</text>
</g>
<!-- hash_from_list -->
<g id="node25" class="node"><title>hash_from_list</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="261,-134 207,-134 207,-98 261,-98 261,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="219,-134 207,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="207,-110 219,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="249,-98 261,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="261,-122 249,-134 "/>
<text text-anchor="middle" x="234" y="-110.8" font-family="Sans" font-size="18.00">H1</text>
</g>
<!-- hash_from_list_label&#45;&gt;hash_from_list -->
<!-- hash_computed_label -->
<g id="node22" class="node"><title>hash_computed_label</title>
<text text-anchor="middle" x="163" y="-69.8" font-family="Sans" font-size="18.00">Hash</text>
<text text-anchor="middle" x="163" y="-47.8" font-family="Sans" font-size="18.00">Com&#45;</text>
<text text-anchor="middle" x="163" y="-25.8" font-family="Sans" font-size="18.00">puted</text>
</g>
<!-- hash_computed -->
<g id="node26" class="node"><title>hash_computed</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="190,-134 136,-134 136,-98 190,-98 190,-134"/>
<text text-anchor="middle" x="163" y="-110.8" font-family="Sans" font-size="18.00">H()</text>
</g>
<!-- hash_computed_label&#45;&gt;hash_computed -->
<!-- waiting_label -->
<g id="node23" class="node"><title>waiting_label</title>
<text text-anchor="middle" x="91" y="-69.8" font-family="Sans" font-size="18.00">Wait</text>
<text text-anchor="middle" x="91" y="-47.8" font-family="Sans" font-size="18.00">For</text>
<text text-anchor="middle" x="91" y="-25.8" font-family="Sans" font-size="18.00">Child</text>
</g>
<!-- waiting -->
<g id="node27" class="node"><title>waiting</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="118,-134 64,-134 64,-98 118,-98 118,-134"/>
<text text-anchor="middle" x="91" y="-110.8" font-family="Sans" font-size="18.00"></text>
</g>
<!-- waiting_label&#45;&gt;waiting -->
<!-- pre_legend_label -->
<!-- legend_label -->
<!-- pre_legend_label&#45;&gt;legend_label -->
<!-- legend_label&#45;&gt;hash_label -->
<!-- root_row -->
<g id="node38" class="node"><title>root_row</title>
</g>
<!-- row1 -->
<g id="node39" class="node"><title>row1</title>
<text text-anchor="middle" x="818" y="-207.6" font-family="Sans" font-size="16.00">Non&#45;TXID</text>
<text text-anchor="middle" x="818" y="-188.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- row1&#45;&gt;root_row -->
<g id="edge24" class="edge"><title>row1&#45;&gt;root_row</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818,-226.101C818,-227.645 818,-229.209 818,-230.775"/>
<polygon fill="black" stroke="black" points="814.5,-230.913 818,-240.913 821.5,-230.913 814.5,-230.913"/>
</g>
<!-- row2 -->
<!-- row2&#45;&gt;row1 -->
<g id="edge22" class="edge"><title>row2&#45;&gt;row1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M818.674,-144.378C818.542,-155.812 818.393,-168.837 818.268,-179.702"/>
<polygon fill="black" stroke="black" points="822.178,-144.066 818.793,-134.026 815.178,-143.986 822.178,-144.066"/>
</g>
<!-- txid_row -->
<g id="node41" class="node"><title>txid_row</title>
<text text-anchor="middle" x="830" y="-57.6" font-family="Sans" font-size="16.00">TXID</text>
<text text-anchor="middle" x="830" y="-38.6" font-family="Sans" font-size="16.00">Nodes</text>
</g>
<!-- txid_row&#45;&gt;row2 -->
<!-- G -->
<g id="node45" class="node"><title>G</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="790,-71 736,-71 736,-35 790,-35 790,-71"/>
</g>
<!-- G2 -->
<g id="node52" class="node"><title>G2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="759,-134 705,-134 705,-98 759,-98 759,-134"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="717,-134 705,-122 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="705,-110 717,-98 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="747,-98 759,-110 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="759,-122 747,-134 "/>
<text text-anchor="middle" x="732" y="-111.1" font-family="Sans" font-size="16.00">H4</text>
</g>
<!-- G&#45;&gt;G2 -->
<g id="edge40" class="edge"><title>G&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M751.972,-71.2222C747.646,-79.5078 742.829,-89.2936 738.986,-97.6005"/>
</g>
<!-- F -->
<g id="node46" class="node"><title>F</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="729,-71 675,-71 675,-35 729,-35 729,-71"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="687,-71 675,-59 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="675,-47 687,-35 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="717,-35 729,-47 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="729,-59 717,-71 "/>
<text text-anchor="middle" x="702" y="-48.1" font-family="Sans" font-size="16.00">H3</text>
</g>
<!-- EF -->
<g id="node53" class="node"><title>EF</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-134 624,-134 624,-98 678,-98 678,-134"/>
<text text-anchor="middle" x="651" y="-111.1" font-family="Sans" font-size="16.00">H()</text>
</g>
<!-- F&#45;&gt;EF -->
<g id="edge38" class="edge"><title>F&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M678.799,-78.9203C673.653,-85.1878 668.383,-91.7597 663.828,-97.6005"/>
<polygon fill="black" stroke="black" points="681.494,-81.1528 685.187,-71.2222 676.107,-76.6826 681.494,-81.1528"/>
</g>
<!-- E -->
<g id="node47" class="node"><title>E</title>
<polygon fill="none" stroke="black" stroke-width="4" points="668,-71 614,-71 614,-35 668,-35 668,-71"/>
<polyline fill="none" stroke="black" stroke-width="4" points="626,-71 614,-59 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="614,-47 626,-35 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="656,-35 668,-47 "/>
<polyline fill="none" stroke="black" stroke-width="4" points="668,-59 656,-71 "/>
<text text-anchor="middle" x="641" y="-48.1" font-family="Sans" font-size="16.00">H2</text>
</g>
<!-- E&#45;&gt;EF -->
<g id="edge36" class="edge"><title>E&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M643.274,-81.4411C644.111,-86.9273 645.059,-92.5385 646.012,-97.6005"/>
<polygon fill="black" stroke="black" points="646.695,-80.6343 641.83,-71.2222 639.764,-81.6135 646.695,-80.6343"/>
</g>
<!-- D -->
<g id="node48" class="node"><title>D</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="607,-71 553,-71 553,-35 607,-35 607,-71"/>
</g>
<!-- CD -->
<g id="node61" class="node"><title>CD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-134 523,-134 523,-98 577,-98 577,-134"/>
</g>
<!-- D&#45;&gt;CD -->
<g id="edge34" class="edge"><title>D&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M569.261,-71.2222C565.066,-79.5078 560.405,-89.2936 556.694,-97.6005"/>
</g>
<!-- C -->
<g id="node49" class="node"><title>C</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="546,-71 492,-71 492,-35 546,-35 546,-71"/>
</g>
<!-- C&#45;&gt;CD -->
<g id="edge32" class="edge"><title>C&#45;&gt;CD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M525.904,-71.2222C529.733,-79.5078 534.546,-89.2936 538.879,-97.6005"/>
</g>
<!-- B -->
<g id="node50" class="node"><title>B</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-71 431,-71 431,-35 485,-35 485,-71"/>
</g>
<!-- AB -->
<g id="node58" class="node"><title>AB</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="485,-134 431,-134 431,-98 485,-98 485,-134"/>
</g>
<!-- B&#45;&gt;AB -->
<g id="edge30" class="edge"><title>B&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M455.938,-71.2222C455.689,-79.5078 455.687,-89.2936 455.933,-97.6005"/>
</g>
<!-- A -->
<g id="node51" class="node"><title>A</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="424,-71 370,-71 370,-35 424,-35 424,-71"/>
</g>
<!-- A&#45;&gt;AB -->
<g id="edge28" class="edge"><title>A&#45;&gt;AB</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M412.582,-71.2222C420.355,-79.5078 429.829,-89.2936 438.117,-97.6005"/>
</g>
<!-- G2&#45;&gt;G -->
<!-- EFG2 -->
<g id="node54" class="node"><title>EFG2</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="678,-221 624,-221 624,-185 678,-185 678,-221"/>
<text text-anchor="middle" x="651" y="-198.1" font-family="Sans" font-size="16.00">H()</text>
</g>
<!-- G2&#45;&gt;EFG2 -->
<g id="edge62" class="edge"><title>G2&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M706.255,-141.431C692.947,-155.405 677.188,-172.404 665.898,-184.997"/>
<polygon fill="black" stroke="black" points="708.959,-143.668 713.353,-134.026 703.906,-138.824 708.959,-143.668"/>
</g>
<!-- EF&#45;&gt;F -->
<g id="edge52" class="edge"><title>EF&#45;&gt;F</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M675.098,-89.8891C680.269,-83.6155 685.515,-77.048 689.998,-71.2222"/>
<polygon fill="black" stroke="black" points="672.38,-87.6835 668.651,-97.6005 677.75,-92.1733 672.38,-87.6835"/>
</g>
<!-- EF&#45;&gt;E -->
<g id="edge50" class="edge"><title>EF&#45;&gt;E</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M649.444,-87.3665C648.615,-81.8774 647.645,-76.2713 646.642,-71.2222"/>
<polygon fill="black" stroke="black" points="646.02,-88.1634 650.836,-97.6005 652.956,-87.22 646.02,-88.1634"/>
</g>
<!-- EF&#45;&gt;EFG2 -->
<g id="edge60" class="edge"><title>EF&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M648.879,-144.184C648.644,-157.59 648.73,-173.22 649.137,-184.997"/>
<polygon fill="black" stroke="black" points="652.382,-144.112 649.136,-134.026 645.384,-143.935 652.382,-144.112"/>
</g>
<!-- EFG2&#45;&gt;G2 -->
<g id="edge70" class="edge"><title>EFG2&#45;&gt;G2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M677.41,-177.594C690.815,-163.625 706.552,-146.625 717.702,-134.026"/>
<polygon fill="black" stroke="black" points="674.685,-175.377 670.246,-184.997 679.716,-180.245 674.685,-175.377"/>
</g>
<!-- EFG2&#45;&gt;EF -->
<g id="edge68" class="edge"><title>EFG2&#45;&gt;EF</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M653.828,-174.842C654.141,-161.439 654.027,-145.808 653.486,-134.026"/>
<polygon fill="black" stroke="black" points="650.324,-174.884 653.485,-184.997 657.32,-175.121 650.324,-174.884"/>
</g>
<!-- ROOT -->
<g id="node56" class="node"><title>ROOT</title>
<polygon fill="lightgrey" stroke="black" stroke-width="1.75" points="628,-277 574,-277 574,-241 628,-241 628,-277"/>
<text text-anchor="middle" x="601" y="-254.1" font-family="Sans" font-size="16.00">H()</text>
</g>
<!-- EFG2&#45;&gt;ROOT -->
<g id="edge74" class="edge"><title>EFG2&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M625.871,-228.632C622.236,-232.676 618.605,-236.786 615.281,-240.622"/>
<polygon fill="black" stroke="black" points="628.649,-230.78 632.786,-221.027 623.469,-226.071 628.649,-230.78"/>
</g>
<!-- ABCD -->
<g id="node55" class="node"><title>ABCD</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="577,-221 523,-221 523,-185 577,-185 577,-221"/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="535,-221 523,-209 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="523,-197 535,-185 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="565,-185 577,-197 "/>
<polyline fill="none" stroke="black" stroke-width="1.75" points="577,-209 565,-221 "/>
<text text-anchor="middle" x="550" y="-198.1" font-family="Sans" font-size="16.00">H1</text>
</g>
<!-- ABCD&#45;&gt;ROOT -->
<g id="edge72" class="edge"><title>ABCD&#45;&gt;ROOT</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M571.101,-228.632C574.759,-232.676 578.541,-236.786 582.136,-240.622"/>
<polygon fill="black" stroke="black" points="573.575,-226.148 564.299,-221.027 568.357,-230.814 573.575,-226.148"/>
</g>
<!-- ABCD&#45;&gt;AB -->
<!-- ABCD&#45;&gt;CD -->
<!-- ROOT&#45;&gt;EFG2 -->
<g id="edge78" class="edge"><title>ROOT&#45;&gt;EFG2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M627.21,-232.997C630.852,-228.949 634.459,-224.846 637.728,-221.027"/>
<polygon fill="black" stroke="black" points="624.405,-230.878 620.245,-240.622 629.574,-235.599 624.405,-230.878"/>
</g>
<!-- ROOT&#45;&gt;ABCD -->
<g id="edge76" class="edge"><title>ROOT&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M580.312,-232.997C576.653,-228.949 572.86,-224.846 569.241,-221.027"/>
<polygon fill="black" stroke="black" points="577.837,-235.48 587.1,-240.622 583.065,-230.826 577.837,-235.48"/>
</g>
<!-- AB&#45;&gt;B -->
<!-- AB&#45;&gt;A -->
<!-- AB&#45;&gt;ABCD -->
<g id="edge56" class="edge"><title>AB&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M475.198,-134.026C490.473,-148.958 512.801,-170.072 529.099,-184.997"/>
</g>
<!-- CD&#45;&gt;D -->
<!-- CD&#45;&gt;C -->
<!-- CD&#45;&gt;ABCD -->
<g id="edge58" class="edge"><title>CD&#45;&gt;ABCD</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M548.136,-134.026C547.621,-148.958 547.621,-170.072 548.137,-184.997"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB