anchor.diff:      lager:debug("ZZPC: connecting to ~p", [{Host, Port}]),
       Pid = spawn(fun() -> try_connect(Self, Host, Port, 1000) end),
       {noreply, S#{ status => {connecting, Pid} }};
  -handle_cast(owns_tcp_socket, S = #{ role := responder, tcp_sock := TcpSock }) ->
  -    #{ version := Version, genesis := Genesis,
  -       seckey := SecKey, pubkey := PubKey } = S,
  +handle_cast(owns_tcp_socket, S0 = #{ role := responder, tcp_sock := TcpSock }) ->
  +    S = #{ version := Version, genesis := Genesis,
  +           seckey := SecKey, pubkey := PubKey } = ensure_genesis(S0),
       NoiseOpts = [ {noise, <<"Noise_XK_25519_ChaChaPoly_BLAKE2b">>}
                   , {s, enoise_keypair:new(dh25519, SecKey, PubKey)}
                   , {prologue, <<Version/binary, Genesis/binary>>}
  
positive.code:     Rs = maps:get(requests, S, #{}),
      S#{ requests => maps:remove(Kind, Rs) }.
  
  try_connect(Parent, Host, Port, Timeout) ->
      Res = gen_tcp:connect(Host, Port, [binary, {reuseaddr, true}, {active, true}], Timeout),
      case Res of
          {ok, Sock} -> gen_tcp:controlling_process(Sock, Parent);
          {error, _} -> ok
      end,
      Parent ! {connected, self(), Res}.
  
  is_non_registered_accept(State) ->
      maps:get(role, State, no_role) == responder
  
negative.code:         close ->
              {stop, normal, S}
      end;
  handle_info({connected, Pid, {ok, TcpSock}}, S0 = #{ status := {connecting, Pid} }) ->
      S = #{ version := Version, genesis := Genesis,
         seckey := SecKey, pubkey := PubKey, r_pubkey := RemotePub } = ensure_genesis(S0),
      lager:debug("ZZPC: connected to ~p", [{maps:get(host, S), maps:get(port, S)}]),
      NoiseOpts = [ {noise, <<"Noise_XK_25519_ChaChaPoly_BLAKE2b">>}
                  , {s, enoise_keypair:new(dh25519, SecKey, PubKey)}
  