anchor.diff:                 {update_RTMs}),
       State;
   on({update_RTMs_on_init}, State) ->
  +    %% only in tx_tm not in rtm processes!
  +    ?ASSERT(tx_tm =:= state_get_role(State)),
       State;
   %% accept RTM updates
   on({get_rtm_reply, InKey, InPid, InAcceptor}, State) ->
  
positive.code: % timeout on Tid maybe a proposer crashed? Force proposals with abort.
  on({tx_tm_rtm_propose_yourself, Tid}, State) ->
      ?TRACE("tx_tm_rtm:propose_yourself(~p) as ~p~n", [Tid, state_get_role(State)]),
      %% after timeout take over and initiate new paxos round as proposer
      {ErrCodeTx, TxState} = get_tx_entry(Tid, State),
  %%    log:pal("propose yourself (~.0p/~.0p) for: ~.0p ~.0p~n",
  
negative.code:     -> state() |
         {'$gen_component', [{on_handler, Handler::gen_component:handler()}], State::state()}.
  on_init({get_node_details}, State) ->
      %% only in tx_tm not in rtm processes!
      ?ASSERT(tx_tm =:= state_get_role(State)),
      util:wait_for(fun() -> comm:is_valid(comm:this()) end),
      comm:send_local(pid_groups:get_my(dht_node),
                      {get_node_details, comm:this(), [node]}),
  