digraph {

size=6.25;
rankdir=LR
//splines = ortho;
ranksep = 0.2;
nodesep = 0.1;

edge [ penwidth = 1.75, fontname="Sans" ]
node [ penwidth = 1.75, shape = "box", fontname="Sans", label = "", width=0.3, height=0.3 ]
graph [ penwidth = 1.75, fontname="Sans" ]

invis1 [ shape = "none", label = "Blocks\nFrom\nUpgraded\nNodes" ]
invis0 [ shape = "none", label = "Blocks\nFrom Non-\nUpgraded\nNodes" ];

subgraph cluster_honest {
block0 [ label = "Follows\nOld\nRules" ];
block1 [ label = "Follows\nOld\nRules" ];
block2_1 [ label = "Follows Old Rules\nBut Violates\nNew Rules", style = "filled" ];

block2_1 -> block4 [ style = "invis", minlen = 2 ];

block4 [ label = "Follows\nOld\nRules" ];

style = "invis";
}


subgraph cluster_attack {
block2 [ label = "Follows\nOld & New\nRules" ];
block3 [ label = "Follows\nOld & New\nRules" ];

style = "invis"
}



invis0 -> block0 [ minlen = 2, style = "dashed" ];

block0 -> block1 -> block2 -> block3 -> block4;

block1 -> block2_1



label = "A Soft Fork:  Blocks Violating New Rules Are Made Stale By The Upgraded Mining Majority"
}
