Audifact Beta
Independent verification

Verify snapshot hashes with OpenTimestamps

How Audifact stamps each snapshot’s ledger_hash via OTS calendars and Bitcoin — and how anyone can check that proof.

What Audifact stamps

Periodically Audifact writes a ledger snapshot. Each snapshot has a 64-character hex ledger_hash that commits to the ledger state at that sequence (and chains to the previous snapshot).

The OpenTimestamps (OTS) process stamps that hex hash as 32 raw bytes (not a JSON file, not every event individually). The proof file is named by snapshot sequence, e.g. 000000000006.ots for snapshot 6.

  • Calendar anchored — OTS calendars have attested the stamp (fast).
  • Bitcoin confirmed — the stamp is upgraded into a Bitcoin attestation (slower; includes a block height).

You will not find the string “Audifact” or the full hex hash by browsing a mempool.space block. OTS embeds a Merkle commitment in a transaction (often OP_RETURN). The .ots file is the path from your hash to that commitment.

1. Get the snapshot ledger_hash

Public API (no login):

# Use HTTPS (same host as the site; avoid bare http without -L)
# Latest snapshot
curl -sS https://audifact.io/ledger/snapshot/latest | jq .

# Specific sequence (example: 6)
curl -sS https://audifact.io/ledger/snapshot/6 | jq .

# Extract only the hash
curl -sS https://audifact.io/ledger/snapshot/6 | jq -r .ledger_hash

Example response fields: snapshot_seq, ledger_hash, prev_snapshot_hash, snapshot_signature, snapshot_signing_key_id.

Write the hash as raw bytes for OTS (32 bytes from hex):

HASH=$(curl -sS https://audifact.io/ledger/snapshot/6 | jq -r .ledger_hash)
python3 - <<PY
import pathlib, sys
h = "${HASH}".strip()
pathlib.Path("ledger_hash_6.bin").write_bytes(bytes.fromhex(h))
print("wrote ledger_hash_6.bin", len(bytes.fromhex(h)), "bytes")
PY

2. Get the .ots proof file

When a snapshot is calendar- or Bitcoin-anchored, Audifact stores a detached OTS proof next to the public ledger exports:

public_ledger/ots/000000000006.ots   # snapshot_seq zero-padded to 12 digits

Download via API when the proof exists:

# Prefer HTTPS (HTTP may 301; curl without -L saves the HTML redirect body as a junk file)
# Explicit filename — path ends in /ots, so bare -O would name the file "ots"
curl -sS -f -o 000000000006.ots https://audifact.io/ledger/snapshot/6/ots

# If you must use HTTP, follow redirects:
# curl -sS -f -L -o 000000000006.ots http://audifact.io/ledger/snapshot/6/ots

file 000000000006.ots
# expect: OpenTimestamps Proof
# 404 if this snapshot is not anchored yet

Anchor status in the product UI: Calendar anchored means an OTS file should exist; Bitcoin confirmed means the same file has been upgraded with a BTC attestation (Explorer may link a block explorer when height is known).

3. Verify with the OpenTimestamps CLI

Install the official tools (opentimestamps.org), then verify the binary hash against the proof:

# Debian/Ubuntu example — use your OS’s recommended install
# pipx install opentimestamps-client
# or: apt install opentimestamps-client

# Upgrade proof toward Bitcoin if still calendar-only (needs network)
ots upgrade 000000000006.ots

# Verify: proof must match the 32-byte file of the ledger_hash
ots verify --timestamp 000000000006.ots ledger_hash_6.bin

A successful verify means: this 32-byte digest existed no later than the attested calendar/Bitcoin time. Combined with Audifact’s signed snapshot metadata, that timestamps the ledger commitment.

Operators can also run internal checks (verify_anchors) that assert the OTS digest equals the DB ledger_hash and that Bitcoin height matches the proof.

4. Bitcoin block links (what they mean)

When status is Bitcoin-confirmed, Audifact may show a link such as mempool.space to the including block. That page is the public timestamp environment, not a search UI for the hex hash.

Independent check remains: ledger_hash bytes + .ots + ots verify. Optional geek path: find the OTS commitment transaction in the block; without the Merkle path in the .ots file you cannot identify your hash from the block alone.

Common questions

Is every event on Bitcoin?
No. Events are hash-chained in the ledger. Snapshots commit state; OTS stamps the snapshot ledger_hash.
Calendar vs Bitcoin?
Calendar is faster external attestation. Bitcoin is stronger, slower finality once the proof is upgraded.
Where is event-level proof?
Per-event pages at /e/{event_hash}, Explorer, and the verify API. Snapshot OTS is the calendar/BTC timestamp layer on top of signed snapshots.
Related docs
FAQ · Quickstart · Explorer

Questions? support@audifact.io · send feedback