Daily proofs

Each day's observations (one line per site and file, raw facts only: HTTP status or fetch error, final URL, SHA-256 of the body and of the kept headers) are sorted and hashed into a Merkle root (RFC 6962 hashing). A short statement naming the day, the leaf count and the root is timestamped with OpenTimestamps, which anchors it in the Bitcoin blockchain within hours. One stamp per day.

DayLeavesMerkle rootOpenTimestampsFiles
2026-10-2750,43599abfe21c93f936522d5…complete (bitcoin block 973493)statement · .ots · manifest
2026-10-2650,831eb599ad417c868dbf434…complete (bitcoin block 973294)statement · .ots · manifest

Verify a day

curl -sO https://infrarabbit.com/crawlers/proofs/<day>.txt
curl -s https://infrarabbit.com/crawlers/proofs/<day>.ots -o <day>.txt.ots
ots verify <day>.txt.ots        # pip install opentimestamps-client

Then rebuild the root from /crawlers/data/manifest/<day>.tsv: leaf = SHA-256(0x00 || line), node = SHA-256(0x01 || left || right), split at the largest power of two below n. A single site's line is proven with /crawlers/api/v1/proof/<day>?domain=<site> (audit path).