How the ledger is anchored
Every entry on the public ledger is hash-chained and signed by a2ally. To make sure nobody, a2ally included, can quietly rewrite history, the ledger is also anchored in three independent places. Any one of them is enough to catch a rewrite, and they don't depend on each other: if one stalls, the others keep going.
Live status
- Bitcoin (OpenTimestamps): 108 of 159 blocks confirmed in Bitcoin, 48 pending. Latest Bitcoin block: 974888.
- EVM chain: Off on this deployment. When the operator switches it on, the same commitments are also posted to Base (an Ethereum layer 2), and optionally to Ethereum mainnet once a day.
- Checkpoint Log: checkpoint #155, 301 entries, published 2026-11-07T05:34:44.658Z.
Machine-readable: /v1/anchors/status.
1. Bitcoin
Each sealed block hash and each daily super-root goes to public OpenTimestamps calendars, which commit it into a Bitcoin transaction. Verify with ots verify using the proof at /v1/ledger/blocks/{height}/anchor.ots. If Bitcoin or the calendars stall, proofs simply wait as pending and are confirmed later, in order.
2. EVM chain (Base, optional Ethereum)
When enabled, the same block hashes and super-roots are posted as the input data of a zero-value transaction from the anchor address to itself: the ASCII bytes RSH1 followed by the 32-byte commitment. Check it on any explorer or RPC for that chain: /v1/ledger/blocks/{height}/eth-anchor gives the transaction hash. A proof can carry Bitcoin only, EVM only, or both; node ledger-witness.mjs verify-anchors --height N (from /cli/ledger-witness.mjs) checks whatever is there.
3. Checkpoint Log
a2ally's own transparency log, built like Certificate Transparency and needing no blockchain. At least every 15 minutes, and whenever the ledger grows, a2ally publishes a signed checkpoint: the size of the ledger's Merkle tree, its root hash and the time, chained to the previous checkpoint.
- Latest:
/.well-known/a2ally-checkpoint.json· history:/v1/checkpoints - Append-only check:
/v1/checkpoints/consistency?first=A&second=Breturns an RFC 9162 consistency proof that the tree of size B starts with the tree of size A, unchanged. - Inclusion:
/v1/checkpoints/inclusion?seq=Nproves entry N is in the tree. - Witnesses: any domain can co-sign checkpoints after checking consistency. The protocol is at
/v1/checkpoints/witness-spec; every cosignature is verified against the key the witness publishes on its own domain. - Copies: checkpoints are also written beside the database on persistent storage, and anyone can keep a verified mirror with
node ledger-witness.mjs checkpoint --state FILE --archive DIR.
Keep the last checkpoint you saw. If a later one isn't consistent with it, the log was rewritten, and you can prove it with the two signed checkpoints.
