Deus Witness

Quickstart | Concepts | API | Verify | Coverage | Teams | Anchors | Recovery

Anchors: Bitcoin as an internal guarantee, RFC 3161 timestamps

The ledger of each organisation is append-only and signed by the witness; checkpoints are collected into an hourly batch and the

Merkle root of the batch is anchored outside. An anchor proves one thing: **this root (and so every checkpoint under it) existed no

later than time T.** It does not prove that the actions were good, that the witness was honest about what it was asked, or anything

about calls that never reached the witness (see the coverage page).

1. Bitcoin through OpenTimestamps (since 0.1)

can be upgraded and checked against a Bitcoin block header.

check it; nobody, including us, can backdate it.

block headers; it says nothing about time after the root was made.

against our own later edits, not a headline feature for a small business.

2. RFC 3161 timestamps (0.2, second anchor)

responses (.tsr) and the TSA certificate chains go into the evidence pack (anchors/<batch>.tsr.<tsa>, roots in anchors/tsa-ca/).

messageImprint equals the root, and genTime (tsa <batch>: OK (<tsa>, ...)).

pack comes from the pack's author (the verifier prints its fingerprint; --tsa-ca lets you pin your own).

Qualified stamps are separate paid services (a contract for the enterprise plan, not a free second anchor).

2.1 Switching it on: DW_TSA_URL (0.2.9)

Off by default: with neither DW_TSA_URL nor DW_TSA=on set, no timestamp request ever leaves the server.

allow it: setting the URL is your statement that they do; see section 3 for the services excluded in code).

refuses to start rather than collect tokens nobody can check. Compare its fingerprint with the TSA's published one over a second channel.

otherwise the process does not start (startup refused: DW_TSA_URL: ...).

verifies against DW_TSA_CA (signature, imprint = root, chain, timeStamping EKU), next to the batch's .json/.ots in the anchors

folder, and goes into the evidence pack with the root (anchors/tsa-ca/<name>.pem). verify_pack.py checks it offline;

--tsa-ca=<dir> pins your own copy of the root instead of trusting the one in the pack.

no Bitcoin, and no inclusion promises (those need DW_ANCHOR=on, 0.2.5).

3. Status in 0.2.1 - read this before relying on the second anchor

first-hand): a provider in cloud/lib/tsa/providers.json is queried only if take: true AND terms: "allowed" AND its root

certificate is on disk. FreeTSA is take: true (commercial use allowed per research, 1 request/s, no SLA, own root, not

qualified); DigiCert is off (terms: "unconfirmed") until it confirms in writing. Sectigo, Apple, GlobalSign, Entrust are

excluded in code (EXCLUDED in server/app/jobs.py, by name and by host): their free endpoints are for code signing only.

freetsa.org), so the anchor job writes tsa=0 and a WARN line. A person with a browser has to add the root (fingerprint checked over

two channels), quote the terms in USLOVIYA.md and make one live stamp.

second independent TSA = DigiCert after a written answer, or a paid TSA under contract.

(19.10.2026) printed tsa 20261019T020441Z-b2995c14: OK (tsa-a, tsa-b) and, for the Bitcoin anchor with DW_ANCHOR=off,

anchor 20261019T020441Z-b2995c14: pending (inclusion in batch root proven; not stamped).

4. Which anchor answers which question

questionledger + witness signatureBitcoin (OTS)RFC 3161 (each enabled TSA)
was entry N changed or removed later?yes (hash chain, checkpoints)yes, against our own later edits tooyes, for the batch time
did the root exist by time T?no (the witness's own clock)yes, block time, trustlessyes, genTime, trusting the TSA
how soon is it checkable?at oncehours (pending first)at once
who must be trusted?the witnessnobody (Bitcoin consensus)each TSA
what the action was, whether it was goodreceipt + mandate + approvalsnono
calls that bypassed the witnessnonono