anchor.diff:  
   update(Key, Value, Pid) ->
     gen_server:call(Pid, {update, Key, Value}, infinity).
  +  
  +updatea(Key, Value, Pid) ->
  +  gen_server:cast(Pid, {update, Key, Value}).
   
   equals(A, B) ->
     gen_server:call(A, hash) == gen_server:call(B, hash).
  
positive.code: 
  delete(Key, Tree) ->
    gen_server:call(Tree, {delete, Key}).
  
  key_diff(TreeA, TreeB) ->
    gen_server:call(TreeA, {key_diff, TreeB}).
  
negative.code: %% @doc Handling cast messages
  %% @end 
  %%--------------------------------------------------------------------
  handle_cast({update, Key, Value}, DM = #dmerkle{tree=Tree,root=Root}) ->
    % error_logger:info_msg("inserting ~p~n", [Key]),
    % dmtree:tx_begin(Tree),
    D = dmtree:d(Tree),
    M = m(Root),
    NewTree = if
      M >= D-1 -> %allocate new root, move old root and split
        % ?infoMsg("root M is larged than D-1.  splitting.~n"),
        Root2 = split_child(#node{}, empty, Root, Tree),
        dmtree:update_root(Root2, Tree),
        % error_logger:info_msg("found: ~p~n", [visualized_find("key60", Tree#dmerkle{root=FinalRoot})]),
        Root3 = update(hash(Key), Key, Value, Root2, Tree),
        DM#dmerkle{root=Root3};
      true -> 
        Root2 = update(hash(Key), Key, Value, Root, Tree),
        % ?infoFmt("updated root ~p~n", [Root2]),
        DM#dmerkle{root=Root2}
    end,
    % dmtree:tx_commit(Tree),
    {noreply, NewTree};
    
  handle_cast({delete, Key}, DM = #dmerkle{tree=Tree,root=Root}) ->
    % dmtree:tx_begin(Tree),
    RetNode = delete(hash(Key), Key, root, Root, Tree),
    % dmtree:tx_commit(Tree),
    {noreply, DM#dmerkle{root=RetNode}};
  
  handle_cast(close, Tree) ->
      {stop, shutdown, Tree}.
  
  