Verify a Satsignal proof.

Add the original item and the proof bundle to verify three things: the proof is intact, the item matches, and the anchor exists on-chain. Everything runs in your browser — your files never leave your device.

Original file or item

Optional · recommended

We fingerprint the file locally in your browser to compare it against the proof. Nothing is uploaded — the file is only used locally. Verifying a disclosure proof? Add the redacted copy you received here — we check its bytes against the disclosed view the disclosure commits to.

Drop the original file or item here, or click to choose a file.
Optional, but recommended for full verification — the file is fingerprinted locally in your browser.

Proof bundle

Required

Add the .zip proof package or .mbnt bundle. The bundle is located inside the zip.

Drop the proof package (.zip) or bundle (.mbnt) here, or click to choose a file.
(both are accepted — we’ll find the bundle inside the zip)

Other verification methods — transaction ID + canonical JSON

For verifiers who didn’t keep the bundle but kept the transaction id and the canonical proof JSON. If you have the proof package or the .mbnt, drop it above — these fields auto-fill.

No original file? You can still verify the proof’s integrity and that the anchor exists on-chain. Learn more

What verifying actually checks

When you verify, we run three checks in your browser. No data leaves your device.

Proof intact

Confirms the proof bundle is valid, complete, and has not been tampered with.

Item matches

Verifies the fingerprint of your file matches the one committed in the proof.

Anchor exists

Checks that the BSV anchor transaction exists on-chain and is confirmed.

A privacy note on Standard proofs: a Standard anchor is publicly resolvable by the file’s SHA-256. Satsignal’s auth-free, CORS-open /lookup_hash endpoint — callable from any site without an account — returns a Standard proof’s existence, anchor timestamp, and txid for a given file hash, so anyone holding or guessing the exact hash can confirm it was anchored. Sealed proofs are excluded from that endpoint by design; choose Sealed mode when confirm-by-hash itself must stay private.

First time using this? Try a demo.

We load a real bundle and the matching item for you, then run every check end-to-end so you see what a fully-verified result looks like.

Prefer a CLI you can audit and run offline?

A standalone satsignal verify CLI (with --spv / --min-confirmations) is planned but not yet shipped. In the meantime, three verify paths work today:

  1. the hosted verifier at proof.satsignal.cloud/verify — drag-drop the .mbnt, account-free;
  2. by hand — unzip the bundle and run sha256sum bundle/canonical.json | cut -c1-40, compare to doc_hash_expected, then resolve the txid in any block explorer;
  3. python agent_anchor.py verify-handoff (the stdlib helper at scripts/agent_anchor.py).

Everything runs in your browser. Your files never leave your device.

Network behavior: files you add are read and fingerprinted locally and never uploaded. The only network requests verification makes are to two public block explorers — WhatsOnChain and Bitails — to read the anchor transaction. This page carries its full verification code inline: a saved copy re-runs every hash and structure check from a local file: URL without contacting this site, even if this site is gone. Two things still use the network by nature: the anchor lookup (the explorers above) and PDF text recompute, which loads the PDF.js library on demand. Served online, the page loads the same code from this site only (the JSZip library is integrity-pinned with SRI).