anchor.diff:      disconnect_node(net2_node1, net1, Cfg),
       disconnect_node(net2_node2, net1, Cfg),
   
  -    wait_for_value({height, Top2 + Length}, [net1_node1, net1_node2, net2_node1, net2_node2],
  -                   Length * ?MINING_TIMEOUT, Cfg),
  +    wait_for_value({height, Top2 + Length}, Nodes, Length * ?MINING_TIMEOUT, Cfg),
    
       {ok, 200, C1} = request(net1_node1, 'GetBlockByHeight', #{height => Top2 + Length}),
       {ok, 200, C2} = request(net1_node2, 'GetBlockByHeight', #{height => Top2 + Length}),
  
positive.code:     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
            true ->
              error(Reason);
            false ->
  
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}),
  