anchor.diff:  
   transaction(Node, Dst, Statements) ->
     {ok, T} = rpc:call(Node, antidote, start_transaction, [ignore, []]),
  -  lists:foldl(fun(F, Acc) -> F(T, Acc) end, [], Statements),
  -  Dst ! rpc:call(Node, antidote, commit_transaction, [T]).
  +  Last = lists:foldl(fun(F, Acc) -> F(T, Acc) end, [], Statements),
  +  CT = rpc:call(Node, antidote, commit_transaction, [T]),
  +  Dst ! {CT, Last}.
  
positive.code: 
  write_write_check(Node) ->
    ConflictKey = ?KEY(conflict),
    Res = execute([
      read_write_tx(Node, ConflictKey, 1),
      read_write_tx(Node, ConflictKey, 2)
    ]),
    ?assertNotMatch([{ok, _}, {ok, _}], Res),
    ?assert(lists:any(fun({error, {aborted, _}}) -> true; (_) -> false end, Res)).
  
  execute(Funs) when is_list(Funs) ->
    S = self(),
    lists:foreach(fun(F) ->
      _ = spawn(fun() -> F(S) end)
    end, Funs),
    collect(length(Funs), []);
  
  execute(Fun) ->
    [Res] = execute([Fun]),
    Res.
  
  read_write_tx(Node, Key, Value) ->
  
negative.code:     transaction(Node, From, [
        fun(T, _) -> read_objects(Node, T, Key) end,
        fun(T, _) -> update_objects(Node, T, {Key, Value}) end
      ])
    end.
  
  read_only_tx(Node, Key) ->
    fun(From) ->
      transaction(Node, From, [
        fun(T, _) -> read_objects(Node, T, Key) end
      ])
    end.
  
  