anchor.diff:      aeu_env:user_config_or_env([<<"sync">>, <<"ping_interval">>],
                                  aecore, ping_interval, 120000).
   
  -msec_stamp() ->
  -    1000 * calendar:datetime_to_gregorian_seconds(calendar:local_time()).
  -
   try_until(MSec, F) ->
       try F()
       catch 
         _:Reason ->
  -        case msec_stamp() > MSec of
  +        case erlang:system_time(millisecond) > MSec of
             true ->
               error(Reason);
             false ->
  
positive.code: 
      %% Starts with a net split
  
      wait_for_value({height, Length}, [net1_node1, net1_node2, net2_node1, net2_node2],
                      Length * ?MINING_TIMEOUT, Cfg),
  
      {ok, 200, A1} = request(net1_node1, 'GetBlockByHeight', #{height => Length}),
      {ok, 200, A2} = request(net1_node2, 'GetBlockByHeight', #{height => Length}),
  
negative.code:     connect_node(net1_node2, net2, Cfg),
      connect_node(net2_node1, net1, Cfg),
      connect_node(net2_node2, net1, Cfg),
      T1 = erlang:system_time(millisecond),
  
      wait_for_value({height, Top2 + Length * 2}, Nodes, Length * 2 * ?MINING_TIMEOUT, Cfg),
  
      try_until(T1 + 2 * ping_interval(),
              fun() ->
                {ok, 200, D1} = request(net1_node1, 'GetBlockByHeight', #{height => Top2 + Length * 2}),
                {ok, 200, D2} = request(net1_node2, 'GetBlockByHeight', #{height => Top2 + Length * 2}),
                {ok, 200, D3} = request(net2_node1, 'GetBlockByHeight', #{height => Top2 + Length * 2}),
  