digraph { size=6.25; rankdir=TB //splines = ortho; ranksep = 0.2; nodesep = 0.3; edge [ penwidth = 1.75, fontname="Sans" ] node [ penwidth = 1.75, shape = "box", fontname="Sans", ] graph [ penwidth = 1.75, fontname="Sans" ] { node [ shape = "none" ]; txids [ label = "Row 1: Transaction hashes (TXIDs)\n(A is coinbase; C can spend output from B)" ]; row2 [ label = "Row 2: Hashes of paired TXIDs" ]; rootrow [ label = "Merkle root" ]; txids -> row2 -> rootrow [ style = "invis" ]; } txid_a [ label = "A" ]; txid_b [ label = "B" ]; txid_invis [ label = "C", style = "invis" ]; txid_c [ label = "C" ]; row2_ab [ label = "H(A|B)" ]; row2_cc [ label = "H(C|C)" ]; root [ label = "H(H(A|B)|H(C|C))" ]; txid_a -> row2_ab [ weight = 1 ]; txid_b -> row2_ab [ weight = 1 ]; txid_c -> row2_cc; txid_invis -> row2_cc [ style = "invis" ]; row2_ab -> root; row2_cc -> root; label = "\n Example Merkle Tree Construction [Hash function H() = SHA256(SHA256())]" }