digraph blockchain { //splines = "ortho"; rankdir=LR; size=6.66; node [ shape = "box", penwidth = 1.75 ]; edge [ penwidth = 1.75 ]; penwidth = 1.75; nodesep = 0.3; _transactions0 [ label = "Block 1\nTransactions", width = 2 ]; subgraph cluster_block0header { _blockHeader0 [ style = "invis", label = "", width = 0, height = 0 ]; hashBlock9 [label = "Hash Of Previous\nBlock Header", shape = box]; hashMerkleRoot0 [label = "Merkle Root"]; label = "Block 1\nHeader" } _transactions1 [ label = "Block 2\nTransactions", width = 2 ]; subgraph cluster_block1header { _blockHeader1 [ style = "invis", label = "", width = 0, height = 0 ]; hashBlock0 [label = "Hash Of Previous\nBlock Header", shape = box]; hashMerkleRoot1 [label = "Merkle Root"]; label = "Block 2\nHeader" } _transactions2 [ label = "Block 3\nTransactions", width = 2 ]; _block2 [ style = "invis", label = "", width = 0, height = 0 ]; subgraph cluster_block2header { _blockHeader2 [ style = "invis", label = "", width = 0, height = 0 ]; hashBlock1 [label = "Hash Of Previous\nBlock Header", shape = box]; hashMerkleRoot2 [label = "Merkle Root"]; label = "Block 3\nHeader" } invis0 [ style = "invis", label = "", width = 0, height = 0 ]; invis1 [ style = "invis", label = "", width = 0, height = 0 ]; invis0 -> hashBlock9 [ style = dotted ]; _blockHeader0 -> hashBlock0 [ minlen = 2 ]; //hashBlock0 -> hashBlock1 [ style = "invis" ]; _blockHeader1 -> hashBlock1 [ minlen = 2 ]; hashMerkleRoot0 -> hashMerkleRoot1 -> hashMerkleRoot2 [ style = invis, weight = 100, minlen = 2 ]; _transactions0 -> hashMerkleRoot0 [constraint = false, minlen = 1]; _transactions1 -> hashMerkleRoot1 [constraint = false, minlen = 1]; _transactions2 -> hashMerkleRoot2 [constraint = false, minlen = 1]; _transactions0 -> _transactions1 -> _transactions2 [ style = "invis", minlen = 2 ]; invis1 -> _transactions0 [ style = "invis", minlen = 1 ]; label = "\nSimplified Bitcoin Block Chain"; }