anchor.diff:  code_change(_OldVsn, State, _Extra) ->
       {ok, State}.
   
  +%%%=============================================================================
  +%%% Internal functions
  +%%%=============================================================================
  +
  +-spec hash_uri(http_uri:uri()) -> binary().
  +hash_uri(Uri) when is_list(Uri)->
  +    hash_uri(list_to_binary(Uri));
  +hash_uri(Uri) ->
  +    Hash = crypto:hash(md4,Uri),  %TODO add some random for execution but constant salt, so people can't mess with uri-s to hide on our list.
  +    <<Hash/binary, Uri/binary>>.
  
positive.code: %%% gen_server functions
  %%%=============================================================================
  
  -record(state, {peers :: dict:dict(http_uri:uri(),peer())}).
  
  start_link() ->
      gen_server:start_link({local, ?MODULE} ,?MODULE, ok, []).
  
  init(ok) ->
      {ok, #state{peers=dict:new()}}.
  
  handle_call({info, PeerUri}, _From, State) -> {reply, #peer{}, State}; %TODO implement
  handle_call(all, _From, State) -> {reply, [], State}; %TODO implement
  handle_call(get_random, _From, State) -> {reply, {error, "unimplemented"}, State}. %TODO implement
  
  handle_cast({add, Peer}, State) when is_record(Peer, peer) ->
      {noreply, State}; %TODO implement
  handle_cast({add, PeerUrl}, State) ->
      {noreply, State}; %TODO implement
  handle_cast({remove, PeerUrl}, State) ->
      {noreply, State}. %TODO implement
  
  handle_info(_Info, State) ->
      {noreply, State}.
  
negative.code: %%------------------------------------------------------------------------------
  -spec all() -> list(peer()).
  all() ->
      gen_server:call(?MODULE, all).
  
  %%------------------------------------------------------------------------------
  %% Get random peer. This may return error when no peer is known to us (unlikely).
  %% Normally returns {ok, Peer}
  %%
  %% The peers are randomly distributed in the sorted gb_tree (due to the use of hash_uri), 
  %% so we can find a random peer by choosing a point and getting the next peer in gb_tree.
  %% That's what this function does
  %%------------------------------------------------------------------------------
  -spec get_random() -> get_peer_result().
  get_random() ->
      gen_server:call(?MODULE, get_random).
  
  %%------------------------------------------------------------------------------
  %% Get url from IP and port. IP format: xxx.xxx.xxx.xxx
  