anchor.diff:  %% @private
   membership() ->
       lasp_peer_service:members().
  -
  -%% @private
  -convergence() ->
  -    {ok, Convergence} = lasp:read(?CONVERGENCE_ID, undefined),
  -    lager:info("*** read: ~p", [Convergence]),
  -    Convergence.
  -
  -%% @private
  -bind_convergence({Id, Type, Metadata, Value}) ->
  -    {ok, Result} = ?MODULE:local_bind(Id, Type, Metadata, Value),
  -    {ok, Result}.
  
positive.code:                           type=Type,
                            clock=Clock,
                            metadata=Metadata,
                            value=Value,
                            convergence=Convergence}) ->
      {{Id, Clock}, {Id, Type, Metadata, Value, Convergence}}.
  
  %% @doc Perform a merge of an incoming object with an object in the
  %%      local datastore, as long as we haven't seen a more recent clock
  %%      for the same object.
  -spec merge({broadcast_id(), broadcast_clock()}, broadcast_payload()) ->
      boolean().
  merge({Id, Clock}, {Id, Type, Metadata, Value, Convergence}) ->
      case is_stale({Id, Clock}) of
          true ->
              false;
          false ->
              %% Bind information.
              {ok, _} = ?MODULE:local_bind(Id, Type, Metadata, Value),
              bind_convergence(Convergence),
              true
      end;
  merge({_Id, _Clock}, Payload) ->
      lager:error("Incoming merge didn't match payload: ~p", [Payload]),
      false.
  
  %% @doc Use the clock on the object to determine if this message is
  
negative.code: -type broadcast_message() :: #broadcast{}.
  -type broadcast_id() :: id().
  -type broadcast_clock() :: clock().
  -type broadcast_payload() :: {id(), type(), metadata(), value()}.
  
  %% @doc Returns from the broadcast message the identifier and the payload.
  -spec broadcast_data(broadcast_message()) ->
  