anchor.diff:  %%     State;
   
   on({new_node_id, Id}, State) ->
  -    tx_tm = state_get_role(State),
  +    %% only in tx_tm not in rtm processes!
  +    ?ASSERT(tx_tm =:= state_get_role(State)),
       RTMs = state_get_RTMs(State),
       IDs = ?RT:get_replica_keys(Id),
       NewRTMs = [ set_rtmkey(R, I) || {R, I} <- lists:zip(RTMs, IDs) ],
  
positive.code: 
  %% do not accept new commit requests when not enough rtms are valid
  on_init({tx_tm_rtm_commit, _Client, _ClientsID, _TransLog} = Msg, State) ->
      %% only in tx_tm
      tx_tm = state_get_role(State),
      %% forward request to a node which is ready to serve requests
      DHTNode = pid_groups:get_my(dht_node),
      %% there, redirect message to tx_tm
  
negative.code:     end;
  
  on_init({new_node_id, Id}, State) ->
      %% only in tx_tm not in rtm processes!
      ?ASSERT(tx_tm =:= state_get_role(State)),
      case state_get_RTMs(State) of
          [] ->
              %% new_node_id before first get_node_details: delay this info.
              comm:send_local(self(), {new_node_id, Id}),
              State;
          [_|_] = RTMs ->
              %% tx_tm processes have always #replicas entries here,
              %% crashed rtms are listed as 'unknown' (so using
              %% lists:zip is safe here)
              IDs = ?RT:get_replica_keys(Id),
              NewRTMs = [ set_rtmkey(R, I) || {R, I} <- lists:zip(RTMs, IDs) ],
              state_set_RTMs(State, NewRTMs)
  