Backfill against epoch-keyed replica storage #
A stream owner rewrites every box once per replica epoch so every position stays populated. See "Backfill" in the group chat spec. A replica keeps the current and previous epochs; a data write matching what is stored stores nothing, so a rewrite does not move a box into the current epoch.
Instances For
@[instance_reducible]
@[reducible, inline]
One box at one replica: what is stored, by the epoch it was stored in. At most one entry per epoch; storing again in the same epoch replaces it.
Equations
Instances For
Nothing stored in an epoch that has not begun.
Equations
- Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Backfill.Settled now b = ∀ (x : ℕ × Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Backfill.Kind), x ∈ b → x.1 ≤ now
Instances For
As deployed, a rewrite does not keep a box #
Without refresh, a box written in epoch e and rewritten in e + 1 is gone in e + 2.
Storing a matching write again would keep it #
Tombstones #
theorem
Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Backfill.tomb_kept
(refresh : Bool)
{now : ℕ}
{b : Box}
(hb : Settled now b)
:
A tombstone is stored at the current epoch and read through the next.