Quickstart | Concepts | API | Verify
Verifying an evidence pack
The pack (deus-witness-evidence-<account>-<time>.zip) contains the ledger, signed checkpoints, receipts, the key registry log, anchor proofs, hashes of the page scripts, and a copy of the verifier.
1. Python verifier (offline)
unzip deus-witness-evidence-*.zip -d pack && cd pack
pip install cbor2 cryptography # plus opentimestamps for the online anchor check
python verify/verify_pack.py . --offline
Output lines: ledger: valid (N entries) or ledger: invalid <CODE>@<seq>; receipts: K/K included; anchor <batch>: bitcoin block <h> (mempool.space=OK blockstream.info=OK), pending or MISMATCH; last line RESULT: VALID or RESULT: INVALID (exit code 0 / 1). Without --offline the anchor is checked against two block explorers.
2. Independent verifier (Swift, aarc-wa)
aarc-wa verify-pack pack
Prints ledger: valid and RESULT: VALID. It does not check the anchor. It shares a specification with the Python verifier but not code: two implementations, one author team.
3. What a VALID result means
The ledger chain and signatures are intact, every receipt is in it, the registry entry matches the key that signed your mandate and approvals. It does not prove that the agent had no other channels, nor that the page you signed on was honest (see concepts). Corrupt any byte and both verifiers must say INVALID; the e2e test of the project does exactly that.
4. The anchor
Hourly the server commits a Merkle root over new checkpoints to OpenTimestamps calendars. pending is normal for hours; once Bitcoin includes it the pack (downloaded again) shows the block height. A MISMATCH is an alarm: keep the pack and tell the operator.