Log  Anchor  Verify  offline, no key
The public log

Every committed record is published here.

The log is an append-only tree. Each committed record is a leaf, and the signed head of the tree is anchored to Bitcoin.

The signed head

A checkpoint names the log, its size, and the root of the tree at that size, and is signed by the log's key. This is the exact object a witness cosigns and the exact bytes anchored to Bitcoin.

markovianprotocol.com/log reading…
Records committed
Consistency proof
Tree root (sha256, base64)
fetching the signed checkpoint…

Cosigned by eight independent witnesses

Unrelated operators. The signed trust root names seven of them and the quorum is four of those seven; the eighth cosigns and is not counted until a v3 manifest names it. Cosignatures attest single history, not content truth. Machine-readable policy: /policy (c2sp.org/tlog-policy).

Anchored to Bitcoin

The checkpoint bytes above are timestamped into Bitcoin every hour. A fresh stamp stays pending until a block confirms it.

OpenTimestamps · Bitcoin reading…
Confirmed in block
Checkpoint size anchored
What the proof commits to

Query it as 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 sequence, not a database. The function that turns one into the other is written down and its hash is a leaf in this log, so the interpretation is as checkable as the data. A receipt carries the row, its leaf, an inclusion proof and the cosigned checkpoint — four links a stranger checks without us. Tools: tlog-search.

A host's answer can change without the thing changing

# 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

The commit did not change — same tree, same parents, same dates. A signing key was registered in between, and GitHub's verdict about an immutable object moved with it. Ask today and you get the second answer, with nothing showing there was a first. Both readings are in this log, cosigned and anchored, because they were written down at the time.

Notarize anything

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

Hash-only — the log stores 32 bytes, you keep the file. Returns a JSON receipt with proof URLs. Witnessed within the hour, Bitcoin-anchored after. 10/hour per address.

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

Verify without trusting us

# 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

Full surface: /checkpoint · /proof/<i> · /policy · /inclusion · /consistency · /leaves · /tile/… · /receipt/scitt/<i> · /badge.svg · POST /submit · /anchor — index at log.markovianprotocol.com. Run this exact stack yourself: log-server. Offline export: log-terminal-export. Query with completeness proofs: Ask the log. Search and reduce it offline: tlog-search — a miss is a claim, not an empty result.