For OpenTimestamps users · free
Check an OpenTimestamps proof here, with no Bitcoin node.
Drop a file and its .ots. The proof is run on this device and its Bitcoin block is checked against the block’s own header: its merkle root, its proof of work, and a pinned difficulty floor. You can also ask the calendars to finish a pending proof, keep the file and proof together in one .zip, and print a plain report.
The file never leaves this device: it is fingerprinted here, and a proof is paired with its file by that fingerprint, never by name. This page reaches the network only when you press one of two buttons, and says what it sent: Fetch the block header sends a block height to two public block explorers, and Ask the calendars now sends the proof’s pending commitment to the calendar that already holds it. Nothing else is fetched, and the browser enforces that.
Nothing here yet. Drop a file and its .ots together.
If this line is still here after the page has loaded, this page’s checker did not load on this device, and nothing you drop will be read.
What this page does, and what it will not do
- It checks the Bitcoin attestation offline
- It runs the proof’s steps from the file’s SHA-256 and compares the result with the merkle root in the named block’s 80-byte header. The header must also meet its own proof of work and clear this page’s pinned difficulty floor for that height, so a header made up on a laptop does not pass for a real block. Past the end of the table the floor is extrapolated for at most four difficulty periods; beyond that the block reads not checked, with the reason.
- A standard .ots does not carry the header
- So the header has to come from somewhere. Press Fetch the block header and two independent public explorers are asked for it (blockstream.info and api.bitaps.com); the two must return the same 80 bytes or nothing is kept. Or paste the header yourself from a node or an explorer you trust. Either way the checks run here.
- It finishes pending proofs, without losing the old one
- A proof saved minutes after timestamping names a calendar, not a block. Ask the calendars now asks that calendar for the finished part, adds its answer beside everything the proof already held, and offers the result as a new download under the same file name. The .ots you dropped is never changed, and no .bak file is needed or made (the stock ots upgrade stops when one is already there). Drop x.ots and x.ots.bak together and they are paired by fingerprint: the more complete one is used. Each press also shows, per calendar, whether it answered, whether it returned a Bitcoin attestation, and the newest block it has for this proof — so a calendar that answers but never reaches a block is visible. Nothing is asked in the background.
- It keeps the file and the proof together
- One .zip with the file, its .ots under the name ots verify looks for, and a README saying how to check it with the stock OpenTimestamps client or this page. No account and no lock-in.
- What a holding proof shows, and what it does not
- It shows that the bytes with that fingerprint existed no later than the block’s time (block time is good to about two hours either way). It does not show who made the file, that anything in it is true, or how much older than the block it is, and it is not an eIDAS qualified electronic time stamp.
- Faces, never a pass
- ◇ holds up: checked here, nothing contradicted it. ◔ not checked: pending, no header yet, or a step this page does not compute — a gap, never a finding against the proof. A header that does not carry the proof’s result, or that this page cannot price, adds nothing and is also ◔.
Want a lower edge too (not before), a qualified EU timestamp, and the Bitcoin edge in one file? Stamp with OpenStamps