Bankhaus

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
Audit · gwen.bankhaus → auditor · 2026-10-01 to 2026-10-31

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

period onlyno balancecomplete

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
audit · gwen.bankhaus → auditorempty until written

How an audit file works

01

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.

02

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.

03

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.