anchor.diff:  
   update_block_candidate(Block, BlockInfo, Txs) ->
       case aec_block_micro_candidate:update(Block, Txs, BlockInfo) of
  +        {ok, NewBlock, NewBlockInfo} ->
  +            new_candidate(NewBlock, NewBlockInfo);
           {error, Reason} ->
  -            failed_attempt(Reason);
  -        {ok, AdjBlock, NewBlockInfo} ->
  -            gen_server:cast(?MODULE, {new_candidate, AdjBlock, NewBlockInfo})
  +            failed_attempt(Reason)
       end.
   
   failed_attempt(Reason) ->
  -    gen_server:cast(?MODULE, {worker_done, {failed, Reason}}).
  +    gen_server:cast(?MODULE, {worker_done, self(), {failed, Reason}}).
  +
  +new_candidate(NewBlock, NewBlockInfo) ->
  +    gen_server:cast(?MODULE, {worker_done, self(), {candidate, NewBlock, NewBlockInfo}}).
   
   publish_candidate(_Block) ->
       aec_events:publish(candidate_block, new_candidate).
  
positive.code: 
  finish_worker(S = #state{ worker = {_WPid, WRef} }) ->
      erlang:demonitor(WRef, [flush]),
      S#state{ worker = undefined };
  finish_worker(S) ->
      S.
  
  start_worker(S) ->
      case aec_chain:top_block() of
  
negative.code: %% Generate block candidate
  create_block_candidate(BlockOrBlockHash) ->
      case aec_block_micro_candidate:create(BlockOrBlockHash) of
          {ok, NewBlock, NewBlockInfo} ->
              new_candidate(NewBlock, NewBlockInfo);
          {error, Reason} ->
              failed_attempt(Reason)
      end,
  