pub struct BlobTombstoneJson {
pub stored: StoredBlobRef,
pub deleted_at: String,
pub author_pubkey: String,
pub signature: String,
}Expand description
Serialized form of a blob_tombstones/{exact_object_hash}{suffix} object: the durable,
signed record that a blob was deleted, plus when, so a GC pass can reclaim the
blob once the convergence grace has passed.
author_pubkey/signature cover the BlobTombstoneFields canonical payload
— including the exact stored reference (the slot the tombstone lives under
and the provider object it authorizes deleting) and deleted_at (so the age
can’t be forged to dodge or shorten the grace). The GC verifies this
signature and authorizes the author against the membership chain before
deleting anything.
store_id is part of the signed payload but not stored: the reader supplies
its own store id to Self::verify, mirroring the snapshot meta/pointer.
A member of two stores cannot take one store’s tombstone and replay it as
the other’s — re-verifying under the second store’s id fails, because the
signature was taken over the first’s.
author_pubkey is stored: a tombstone’s
author varies device to device, so the verifier learns who signed it and then
checks that author against the chain (the authorization step).
Fields§
§stored: StoredBlobRefThe exact stored blob authorized for deletion. Its logical key determines the tombstone slot; its object reference determines which provider object GC may delete once the grace has passed.
deleted_at: StringRFC 3339 wall-clock time the deletion was recorded. The grace is measured from here; it is signature-covered so the age can’t be forged.
Hex-encoded Ed25519 public key of the device that wrote this tombstone.
signature: StringHex-encoded detached signature over BlobTombstoneFields.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for BlobTombstoneJson
impl<'de> Deserialize<'de> for BlobTombstoneJson
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for BlobTombstoneJson
impl RefUnwindSafe for BlobTombstoneJson
impl Send for BlobTombstoneJson
impl Sync for BlobTombstoneJson
impl Unpin for BlobTombstoneJson
impl UnsafeUnpin for BlobTombstoneJson
impl UnwindSafe for BlobTombstoneJson
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more