Purpose. Create a public, day-level no-later-than time bound for a set of SSM-Clock Stamp lines without changing any past stamps. The anchor is a single ASCII digest you can publish anywhere.
What an anchor does (at a glance)
- Select a UTC day: derive the day key from each stamp’s
iso_utc→YYYY-MM-DD. - Canonically order that day’s stamps so everyone rebuilds the same sequence.
- Join the lines literally and hash the joined ASCII to produce one digest:
rollup_D = sha256( ascii(Stamp_1 "|" ... "|" Stamp_n) ) - Publish
rollup_D(and a small ASCII note). Its publication time supplies the public no-later-than bound for the included stamps.
Canonical selection (same-day set)
- Day key (UTC): from
iso_utc = "YYYY-MM-DDThh:mm:ssZ"takeYYYY-MM-DD. - Inclusion: all stamps whose
iso_utcshare that UTC day. - Identity of a stamp: the entire line as recorded (base or with
kv:tail):SSMCLOCK1|iso_utc|rasi_idx|theta_deg|sha256(file)|chain[|kv:...]
Canonical ordering (deterministic)
Sort by the tuple (ascending):
iso_utc(string compare on fixedYYYY-MM-DDThh:mm:ssZ)stamp_core = "SSMCLOCK1|" + iso_utc + "|" + rasi_idx + "|" + theta_deg + "|" + sha256(file)chain
This yields(Stamp_1, ..., Stamp_n).
Anchor digest (the roll-up)
- Formula:
rollup_D = sha256( ascii(Stamp_1 "|" ... "|" Stamp_n) ) - Separator: literal
|between full stamp lines; no leading/trailing|. - Empty set: if
n = 0, definerollup_D = sha256( ascii("") )andcount = 0. - Output: lowercase
64-hex. (Anchor algo is fixed tosha256in v1.3 for universal verifiability.)
Publish a tiny ASCII note (recommended)
Minimal fields (one per line):
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>
Optional clarity fields: from_iso_utc=<ISO_Z>, to_iso_utc=<ISO_Z>, publisher=<ascii>, anchor_id=<8-hex>.
Verify an anchor (observer, quick)
- Re-collect stamps for the UTC date.
- Canonical sort by
(iso_utc, stamp_core, chain). - Rebuild the joined string
"Stamp_1|...|Stamp_n". - Compute
rollup_D' = sha256( ascii(joined) ). - Pass if
rollup_D' == rollup_sha256and (if present)n == count.
Dual-source parity (should)
Compute the day’s anchor from ledger rows and independently from discovered sidecars. Expect parity: same rollup_D and count. Any difference → investigate for missing sidecars, stale ledger, or edits (use chain rewalk).
Operational cautions (summary)
- UTC discipline:
iso_utcis...Z, seconds only; no subseconds. - Angle print:
theta_degmust use exactlytheta_precdigits (default5) with IEEE-754 binary64 round-half-to-even; compare as strings. - Digests: lowercase
64-hex. - ASCII only: serialize with literal
|, no extra spaces. - Leap second:
23:59:60is forbidden. - Chain rewalk: use each row’s declared
kv:chain_algo; seedchain_0 = "0"*64. - kv policy: ignore unknown keys; duplicates are invalid;
floatmust beieee75464. - Cadence: publish anchors regularly (e.g., daily) to bound backdating:
max_backdating_window_sec <= anchor_period_sec.
Why it works
Local integrity and ordering hold via sha256(file) and chain_k. The public rollup_D is a cheap, composable claim: these lines existed no later than the publication time. No keys, servers, or blockchain required, and past stamps remain untouched.
Optional witnesses (nice-to-have)
Publish alongside the note:witness_chain_tip=<64-hex> (last ledger tip of the day)policy_sha256=<64-hex> (e.g., sha256(ascii(POLICY.txt|ALGO.txt|FORMAT.txt)))
These improve provenance without affecting verification.
Navigation
Back: SSM-Clock Stamp – Minimal Verifier Outline (2.10)
Next: SSM-Clock Stamp – Canonical Day & Selection (3.1)
Explore Further
https://github.com/OMPSHUNYAYA/Symbolic-Mathematical-Clock-Stamp