anchor.diff:  %% large enough to reflect only error conditions. Expected wait time
   %% should be a fraction of a second, if any.
   await_aehttp() ->
  -    gproc:await({n,l,{epoch,app,aehttp}}, 10000). % should never timeout
  +    try
  +      gproc:await({n,l,{epoch,app,aehttp}}, 10000), % should (almost) never timeout
  +      ok
  +    catch error:{_Reason, _Args} ->
  +      {error, timeout}
  +    end.
   
   lookup_peer(Uri, #state{aliases = As, peers = Peers}) ->
       case gb_trees:lookup(Uri, As) of
  
positive.code:     ok.
  
  %%------------------------------------------------------------------------------
  %% Register an reported source address of known peer P. Ignored if P is unknown
  %%
  %% This is mainly intended to handle cases where a pinging peer and the
  %% pinged peer use different uris (peer uri vs "source" elem in ping obj).
  
negative.code:     %% needed for the ping itself, but given that a ping can quickly
      %% lead to a greater discovery, we should be prepared to handle pings
      %% ourselves at this point.
      case await_aehttp() of
          ok ->
              Res = aeu_requests:ping(Peer),
              lager:debug("ping result (~p): ~p", [Peer, Res]),
              case Res of
                  {ok, Map} ->
                      log_good_ping(Peer#peer.uri),
                      Peers = maps:get(<<"peers">>, Map, []),
                      add_and_ping_peers(Peers);
                  _ ->
                      log_ping_error(Peer#peer.uri)
              end;
          {error, timeout} ->
              lager:debug("timeout waiting for aehttp - no ping (~p) will retry", [Peer#peer.uri]),
              ping_peer(Peer)
      end.
  
  %% The gproc name below is registered in the start function of
  