Log  … Anchor  … Verify  offline, no key
The public log

Every record anyone has added is here.

Records only ever get added to the end. We sign the log's current state, the witnesses sign it too, and every hour that state is stamped into Bitcoin.

The signed state

This short note gives the log's name, how many records it holds, and a fingerprint of all of them together, signed with our key. It's exactly what the witnesses sign and exactly what gets stamped into Bitcoin.

markovianprotocol.com/log reading…
Records
…
Proof it only grew
…
Fingerprint of everything (sha256)
…
fetching the signed checkpoint…

Signed by eight outside witnesses

Seven of them, run by six operators, are on our signed list of trusted witnesses, and any four are enough. The eighth also signs, but it doesn't count until we add it to that list. Their signatures mean this log has only one history. They don't mean any record is true. Machine-readable policy: /policy (c2sp.org/tlog-policy).

Stamped into Bitcoin

The signed state above is stamped into Bitcoin every hour. A new stamp shows as pending until a Bitcoin block confirms it.

OpenTimestamps · Bitcoin reading…
Confirmed in block
…
Log size stamped
…
What the stamp covers
…

Search it like a table

# every row, keyed on (issuer, subject), derived by a published function
python3 reduce.py --export ./log-terminal-export

# one row, with everything needed to check it elsewhere
python3 reduce.py --export ./log-terminal-export --receipt ISSUER SUBJECT
python3 verify_receipt.py receipt.json --trust-root trust-root.json

A log is a list, not a database. The code that turns it into a searchable table is published, and its hash is a record in this log, so you can check the table the same way you check the data. Every search result comes with its record, a proof it's in the log, and the signed state: everything a stranger needs to check it without us. Tools: tlog-search.

GitHub changed its answer about a commit that never changed

# the same commit, twice, as github.com reported it
leaf 7942  git:github.com/MarkovianProtocol/tlog-search@2af8946c  unknown_key
leaf 7944  git:github.com/MarkovianProtocol/tlog-search@2af8946c  valid

Same commit: same files, same history, same dates. In between, a signing key was added to the account, and GitHub's answer on whether the commit's signature checks out went from “unknown key” to “valid”. Ask GitHub today and you only get “valid”, with nothing showing it ever said otherwise. This log has both answers, signed and stamped, because we wrote each one down when GitHub gave it.

Notarize anything

h=$(sha256sum yourfile | cut -c1-64)
curl -X POST -d "sha256:$h" https://log.markovianprotocol.com/submit

We store only your file's fingerprint, 32 bytes, and you keep the file. You get a receipt with links to the proofs. The witnesses sign within the hour, and the Bitcoin stamp follows. Up to 10 an hour per address.

drop a file here — hashed in your browser, never uploaded

Check it without trusting us

In a browser: verify.html?leaf=N fetches one leaf, recomputes its inclusion proof, checks the log’s and the witnesses’ signatures against pinned keys, and gives you the Bitcoin proof with the command to check it. What each layer proves and what none of it does: what a stamp proves. A frozen copy of every leaf, anchor and key, deposited where we cannot withdraw it: Zenodo 10.5281/zenodo.23304783. Or by hand:

# offline proof bundle (c2sp.org/tlog-proof) for any leaf
curl -O https://log.markovianprotocol.com/proof/7271

# run the same monitor that watches this log hourly
git clone https://github.com/MarkovianProtocol/log-monitor
cd log-monitor && cp config.example.json config.json
python3 monitor.py --once

# search the export, or reduce it to a table (stdlib only, offline)
git clone https://github.com/MarkovianProtocol/tlog-search
python3 tlogsearch.py --export ./log-terminal-export --field kind=anchor
python3 reduce.py --export ./log-terminal-export

Every endpoint: /checkpoint · /proof/<i> · /policy · /inclusion · /consistency · /leaves · /tile/… · /receipt/scitt/<i> · /badge.svg · POST /submit · /anchor — index at log.markovianprotocol.com. Run the same software yourself: log-server. Download everything for offline use: log-terminal-export. Search with proof that nothing was left out: Ask the log. Search it offline with tlog-search: when a search finds nothing, you get proof there's nothing to find.