Witness · verifier
Verify our records without trusting us
Verify without trusting us
The verifiers below take an exported bundle and recompute everything locally: entry and leaf hashes, Merkle roots, block hashes and the issuer's Ed25519 signatures, chain linkage, witness cosignatures, witness affiliation from the raw records, and the finality rule (Bitcoin-confirmed plus enough confirmed-unaffiliated witnesses). They never ask a2ally whether its own record is good. MIT licensed, zero dependencies.
Download (pin the SHA-256 before running)
- https://www.a2ally.com/verifier/a2ally_verify.py · sha256 189a28bb92b4e45bfb2dcf94c745c9d500ca23e05a0653e6284e98917d0e1a09
- https://www.a2ally.com/verifier/a2ally-verify.js · sha256 40cedfb0ee3a1e2fca6bf3715a3ab7281ce60089f4a8e144336c1a5ad1267966
- https://www.a2ally.com/verifier/cli.js · sha256 a830d2e7b35bc32c0eb8898c9db273f06fae9c1e0f20772708b6cc4270599658
- https://www.a2ally.com/verifier/a2ally-verify.ts · sha256 ef5b6f7cebae87c0fb1b7be7d5d5ad4900804fa2af05072c02fa02f4e87725a7
- https://www.a2ally.com/verifier/LICENSE · sha256 0d2f7e8079a66551425245bcba2a0f2169b41621e4e8921bd587545ed3708125
- https://www.a2ally.com/verifier/README.md · sha256 1964a18c58c285663d95b657401dbd0320a7f1523730080f505c0fd119957420
- https://www.a2ally.com/verifier/sample-bundle.json · sha256 dd3f4adc94c04b67de6657e024483d5277036532f1c2ba6d8573b98191f7b3da
Run it
- Python: python3 a2ally_verify.py bundle.json <seq> (needs the openssl CLI for Ed25519)
- Node 18+: node cli.js bundle.json <seq> (with a2ally-verify.js beside it)
- Get a bundle: GET https://www.a2ally.com/v1/ledger/snapshot, or the receipt bundle for your record.
- Whole-ledger check: https://www.a2ally.com/cli/verify-ledger.py and https://www.a2ally.com/cli/ledger-witness.mjs. Bitcoin anchors: https://www.a2ally.com/anchors (each block's .ots proof verifies with the standard OpenTimestamps client).
- Response signatures: node ledger-witness.mjs verify-response --url <URL> --keys a2ally-keys.json
