How verification works
Your usage records live in our database — but a cryptographic commitment to them is anchored on Base, so you never have to take our word for what we recorded or billed.
What gets anchored
Each turn becomes a leaf committing its one-way content fingerprint (never the content) plus its billing fields — model, tokens, cost, economy lane. Leaves are built into a per-user Merkle subtree, then an hourly epoch tree, and the root is written to an append-only ledger contract on-chain, chained to the previous root.
Only hashes ever touch the chain. No prompts, no content, no PII.
- • The records we show you are the ones anchored on-chain.
- • Your turns' fingerprints and billing can't be altered after anchoring.
- • The ledger is append-only — no epoch can be rewritten or reordered.
- • You can check all of this yourself, reading the root straight from Base.
- • That we recorded every turn — omission before anchoring is invisible to third parties. Your local corpus (
ir data show) is the check for that. - • Content authenticity — fingerprints are computed on your machine; a lying client only corrupts its own records.
- • Privacy — that's the separate TEE track. Anchoring proves “can't be rewritten”, not “we can't read it.”
Verify it yourself
ir verify
It fetches your records' Merkle proofs, reads the roots directly from the anchor contract on base-sepolia (0x29Da07051225b2aB5EebAfeE642EfecA792d92aC), and checks each proof against the on-chain root — trusting nothing we serve. A mismatch means the data doesn't match what was anchored.
The proof format, leaf derivation, and contract address are all public, so you can reimplement the check in any language. Browse the anchored ledger on the transparency page.