anchor.diff:                  case do_fetch_block(PeerId, Hash) of
                       {ok, false, _Block} -> {get_block, Height, Hash, PeerId, {ok, local}};
                       {ok, true, Block}   -> {get_block, Height, Hash, PeerId, {ok, Block}};
  -                    {error, _}          -> none
  -            end,
  -            do_work_on_sync_task(PeerId, Task, Res)
  +                    {error, Reason}     -> {error, {get_block, Reason}}
  +                end,
  +            do_work_on_sync_task(PeerId, Task, Res);
  +        abort_work ->
  +            lager:info("~p aborting sync work against ~p", [self(), PeerId]),
  +            schedule_ping(PeerId)
       end.
   
   post_blocks([]) -> ok;
  
positive.code: update_sync_task(Update, Task) ->
      gen_server:call(?MODULE, {update_sync_task, Update, Task}).
  
  next_work_item(Task, LastResult) ->
      gen_server:call(?MODULE, {next_work_item, Task, LastResult}).
  
  handle_worker(Task, Action) ->
      gen_server:cast(?MODULE, {handle_worker, Task, Action}).
  
negative.code:             {Res, S}
      end.
  
  handle_last_result(State, STId, LastResult) ->
      case get_sync_task(STId, State) of
          {ok, ST} ->
              ST1 = handle_last_result(ST, LastResult),
              maybe_end_sync_task(State, ST1);
          {error, not_found} ->
              State
      end.
  
  handle_last_result(ST, none) ->
      ST;
  handle_last_result(ST = #sync_task{ agreed = undefined }, {agreed_height, Agreed}) ->
  