Purpose. Publish a tiny ASCII note that commits a UTC day’s stamps to public time. The note carries one digest: rollup_sha256 = sha256( ascii(Stamp_1 "|" ... "|" Stamp_n) ). Publication time provides the no-later-than bound.
Minimal anchor note (copy-ready, ASCII)
SSM-Clock Stamp (SSM-CS) -- Daily Anchor
date=YYYY-MM-DD
count=<n>
rollup_algo=sha256
rollup_sha256=<64-hex>
sort=iso_utc,stamp_core,chain
source=<ledger|sidecars>
Fields (concise)
date— UTC day key (YYYY-MM-DD).count— number of stamps included (n).rollup_algo— must besha256.rollup_sha256— lowercase 64-hex ofsha256( ascii(Stamp_1 "|" ... "|" Stamp_n) ).sort— literaliso_utc,stamp_core,chain(documents canonical order).source— where the set came from (e.g.,ledger,sidecars).
Semantics (what the note means)
- The moment this note is made public, all included stamps gain a no-later-than T_pub bound.
- The note does not alter any stamp; it only attests the day’s joined string and its digest.
Optional clarity fields (non-normative)
from_iso_utc=<YYYY-MM-DDThh:mm:ssZ>
to_iso_utc=<YYYY-MM-DDThh:mm:ssZ>
publisher=<ascii>
anchor_id=<8-hex>
These improve provenance; verification does not require them.
Verifier steps (at a glance)
- Rebuild the day’s set; sort by
(iso_utc, stamp_core, chain). - Join literally as
"Stamp_1|...|Stamp_n"(single|, no leading/trailing). - Compute
rollup_D' = sha256( ascii(joined) ). - PASS if
rollup_D' == rollup_sha256and, if provided,n == count. - Treat the note’s publication time as the no-later-than bound.
Practical tips
- Keep everything plain ASCII; avoid spaces around
=and never reformat inner stamp fields. - Publish in multiple places (mirrors) if you want redundant witnesses.
- If the day has no stamps, publish
count=0androllup_sha256 = sha256( ascii("") ).
Navigation
Back: SSM-Clock Stamp – Roll-up Hash (3.3)
Next: SSM-Clock Stamp – Dual-source Parity (3.5)