digraph G {
  rankdir=LR;

  { rank=source; Network; Block_producer }
  { rank=same; Transition_router; Blockchain_snark }
  { rank=sink; Consensus }

  {Network, Block_producer, Transition_router} -> Transition_frontier_controller;
  Transition_frontier_controller -> Network [label="broadcast_transition"];

  Transition_router -> Consensus [label="should_bootstrap"];

  Transition_frontier_controller -> Consensus [label="select"];
  Transition_frontier_controller -> Consensus [label="frontier_root_transition"];

  Block_producer -> Consensus [label="generate_transition"];
  Block_producer -> Consensus [label="next_producer_timing"];
  Block_producer -> Blockchain_snark [label="prove"];

  Blockchain_snark -> Consensus [label="next_state_checked"];
}
