digraph wallet_program { size="6.25"; rankdir=LR; //ratio=fill; splines=true; fontname=Sans ranksep=0.3; penwidth=1.75; overlap = false; edge [ fontname=Sans, penwidth=1.75, style = "invis" ]; node [ fontname=Sans, shape = box, penwidth=1.75 ]; subgraph cluster_distributing { penwidth=0; distributing_priv [ label = "Create\nParent\nPrivate\nKey", style="invis" ]; distributing_pub [ label = "Derive\nChild\nPublic\nKeys" ]; distributing_distribute [ label = "Distribute\nPublic\nKeys" ]; distributing_monitor [ label = "Monitor\nFor\nOutputs", style="invis" ]; distributing_create [ label = "Create\nUnsigned\nTxes", style="invis" ]; distributing_sign [ label = "Sign\nTxes", style="invis" ]; distributing_broadcast [ label = "Broadcast\nTxes", style="invis" ]; distributing_priv -> distributing_pub -> distributing_distribute -> distributing_monitor -> distributing_create -> distributing_sign -> distributing_broadcast; label = "Distributing-Only Wallet" } subgraph cluster_networked { penwidth=0; networked_priv [ label = "Create\nParent\nPrivate\nKey" ]; networked_pub [ label = "Derive\nParent\nPublic\nKey" ]; networked_distribute [ label = "Distribute\nPublic\nKeys", style="invis" ]; networked_monitor [ label = "Monitor\nFor\nOutputs" ]; networked_create [ label = "Create\nUnsigned\nTxes" ]; networked_sign [ label = "Sign\nTxes" ]; networked_broadcast [ label = "Broadcast\nTxes" ]; networked_priv -> networked_pub -> networked_distribute -> networked_monitor -> networked_create -> networked_sign -> networked_broadcast; label = " Other Wallet(s)" } networked_priv -> networked_pub [style=""]; networked_pub -> distributing_pub [ constraint = false, style = ""]; distributing_pub -> distributing_distribute -> networked_monitor -> networked_create -> networked_sign -> networked_broadcast [style=""]; }