Audit export
A whole period, in one file. Nothing else.
A letter opens one transfer to one reader. An audit file opens a period: every sealed transfer you sent between two dates, each as a letter the auditor verifies against the delta the chain holds, and the total. What makes it an audit and not a selection is that the auditor can check it is complete: the chain lists your transfers for the period, and the file must name exactly those. Nothing before the period, nothing after it, and never your balance.
- Complete: a transfer left out shows as missing, one invented shows as extra
- Verifiable line by line: Enc(figure, r, pk) equals the delta on chain, for every line
- Bounded: a digest over the lines, so a cent moved after writing fails the file
- Sealed: the file travels in an envelope only the auditor's key opens
- Scoped: nothing outside the dates, and no balance, is disclosed
lines 3 · total 2,092.50 USDG
0x7c1e…9b04 atlas.bankhaus 1,250.00 opens its delta ✓
0x19aa…02c7 bob.bankhaus 42.50 opens its delta ✓
0xe340…77d1 atlas.bankhaus 800.00 opens its delta ✓
ledger 3 sealed transfers from gwen in the period · none missing, none added
digest keccak(lines) matches
receipt DisclosureLog · audit:2026-10-01..2026-10-31 · reader hashed
On paper, here
Write the month. Then try to hide a line.
Three transfers are made on paper and an audit file for 2026-10-01 to 2026-10-31 is written to the auditor. Verify it: every line opens its delta on the ledger, the total adds up, and the ledger lists exactly those transfers. Then drop a line, as a sender with something to hide would, and verify again.
- One letter per transfer in the period, nothing outside it
- The auditor lists the period on the ledger and matches it against the file
- A line left out is named: the ledger has a transfer the file does not
How an audit file works
You name the period
Two dates. Every transfer you sent between them becomes a line: the figure, the randomness r you kept, the recipient key and the delta. A digest binds the set.
The auditor opens each line
Enc(figure, r, pk) must equal the delta the chain stores for that transfer. One line altered, one cent moved, and the line fails.
The auditor checks the count
They list your ConfidentialTransfer events for the period on Robinhood Chain and read each delta from the calldata. The file must name exactly those transfers.
Where to write one
# terminal
bankhaus audit write --from 2026-10-01 --to 2026-10-31 --reader auditor --seal
bankhaus audit verify audit.txt --chain
# SDK
const file = await bank.audit('2026-10-01', '2026-10-31', 'auditor');
const rows = await live.auditLedger('2026-10-01', '2026-10-31');
audit.verify(audit.decode(file), rows);
# bankhaus-mcp
audit_file { letters, from, to } verify_audit { audit }Who asks for one
- Auditors
A quarter of a company account, complete, with the deltas to check against the chain, and no view key handed over.
- Tax
The year's outgoings as the chain holds them, line by line, without the balance.
- Boards and investors
What the treasury paid in a period, proven, with the rest of the history staying sealed.
- Yourself
A record you can hand to a second firm later; the receipt on DisclosureLog says you answered, and when.