To be precise, there are two kinds of storage in play here:
- resource commitments and nullifiers, which we may want to associate with (coarse-grained) timestamps so that a given controller does not need to store them forever - and these coarse-grained timestamps would need to correspond to sub-trees so that sub-trees can be pruned
- blob storage, which the RM doesn’t need to be concerned with at all (except to allow reading and writing - but it has nothing to do with resources, commitments, or nullifiers)
The storage engine would be responsible for deleting data, yes, but the RM must be aware of the timestamps insofar as they affect Merkle tree structure. Does that make sense?
In general this makes sense to me, although I think we should note that we will also want the ability to make compact proofs-of-existence for resource commitments in the transparent case.
In the transparent case, we should be able to either:
- look up the resource commitment in the set of commitments stored by the controller (inexpensive, but requires that the commitment be stored by the controller), or
- use a proof of existence for the transparent commitment (in cases where the transparent commitment is not stored by the controller anymore and only the Merkle root is - perhaps because it has been deleted after some time as was discussed earlier in this thread)
Strictly speaking we can even do the first in the shielded case, too - it just leaks information (the input commitment), which is why a ZKP of a Merkle proof is used instead.
I’m not sure what @ray might have had in mind there - @ray can you clarify?