anchor.diff:          pubkey => PubKey,
           privkey => PrivKey,
           exposed_ports => ExposedPorts,
  -        local_ports => LocalPorts
  +        local_ports => LocalPorts,
  +        sockets => Sockets
       },
   
       NetworkSpecs = maps:get(networks, Spec, ?DEFAULT_NETWORKS),
  
positive.code:     pubkey := binary(),         % Public part of the peer key
      privkey := binary(),        % Private part of the peer key
      exposed_ports := #{service_label() => pos_integer()},
      local_ports := #{service_label() => pos_integer()}
  }.
  
  -type start_options() :: #{
  
negative.code:     {ok, Socket} = gen_tcp:listen(0, [{reuseaddr, true}]),
      {ok, Port} = inet:port(Socket),
      gen_tcp:close(Socket),
      {ok, Port, Socket}.
  
  allocate_ports(Labels) -> allocate_ports(Labels, #{}, []).
  
  allocate_ports([], Ports, Sockets) -> {Ports, Sockets};
  allocate_ports([Label | Labels], Ports, Sockets) ->
      {ok, Port, Socket} = free_port(),
      allocate_ports(Labels, Ports#{Label => Port}, [Socket | Sockets]).
  
  
  format(Fmt, Args) ->
  