anchor.diff:                      type :: type(),
                       clock :: lasp_vclock:vclock(),
                       metadata :: metadata(),
  -                    value :: value()}).
  +                    value :: value(),
  +                    convergence :: crdt()}).
   
   -define(MEMORY_INTERVAL, 10000).
   -define(DELTA_INTERVAL, 10000).
  
positive.code: %% @private
  membership() ->
      lasp_peer_service:members().
  
negative.code: %% @doc Returns from the broadcast message the identifier and the payload.
  -spec broadcast_data(broadcast_message()) ->
      {{broadcast_id(), broadcast_clock()}, broadcast_payload()}.
  broadcast_data(#broadcast{id=Id,
                            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.
  
  