anchor.diff:  %% Generate block candidate
   create_block_candidate(BlockOrBlockHash) ->
       case aec_block_micro_candidate:create(BlockOrBlockHash) of
  -        {ok, NewBlock, BlockInfo} ->
  -            gen_server:cast(?MODULE, {new_candidate, NewBlock, BlockInfo});
  +        {ok, NewBlock, NewBlockInfo} ->
  +            new_candidate(NewBlock, NewBlockInfo);
           {error, Reason} ->
               failed_attempt(Reason)
       end,
  
positive.code:     State2 = State1#state{ candidate = Candidate
                           , candidate_state = CandidateState },
      {noreply, maybe_start_worker_txs(State2)};
  handle_cast({worker_done, Result}, State = #state{ worker = {Pid, _}}) ->
      State1 = finish_worker(State),
      lager:debug("Candidate worker ~p done ~p", [Pid, Result]),
      {noreply, State1};
  handle_cast(Msg, State) ->
      lager:info("Unexpected message ~p", [Msg]),
      {noreply, State}.
  
negative.code: 
  finish_worker(S = #state{ worker = {_WPid, WRef} }) ->
      erlang:demonitor(WRef, [flush]),
      S#state{ worker = undefined }.
  
  start_worker(S) ->
      case aec_chain:top_block() of
  