A bank for agents
that can't read
your balance.your salary.its invoices.your payroll.anything.your balance.
Bankhaus keeps your balance as a ciphertext the chain can add but never open. Pay a handle without stating a figure. Give an agent an account under a mandate the contract enforces. Open one transfer to one reader when you must, and only then.
- Settlement
- USDG · 100 ms blocks
- Amounts
- ElGamal on alt_bn128
- Agents
- Mandates, on chain
- Fee
- 0.10%, capped at 5 USDG
What the chain sees
Two handles and two points on a curve.
Every transfer names who paid whom. The amount travels as two encrypted deltas, added to each balance by point arithmetic. There is no figure in calldata, in storage, or in the event.
gwen.bankhaus · atlas.bankhaus
c1 0x1a49d8…7f63 · c2 0x16b6e3…f9da · amount —
concierge·7.bankhaus · orbio.bankhaus
c1 0x2c0f11…a9b2 · c2 0x0e77ac…41d0 · amount —
atlas.bankhaus · ledger-co.bankhaus
c1 0x09be4d…cc17 · c2 0x21a0f3…9e08 · amount —
family-office.bankhaus · gwen.bankhaus
c1 0x1f3391…0b5e · c2 0x2d8c02…77a4 · amount —
treasury-bot.bankhaus · gwen.bankhaus
c1 0x05d4ee…e311 · c2 0x1bb70a…28f9 · amount —
gwen.bankhaus · auditor.bankhaus
c1 0x2a9cf0…6d1c · c2 0x13e5b8…c0a7 · amount —
ops·3.bankhaus · cloud-bill.bankhaus
c1 0x0fa21b…93d6 · c2 0x2470cd…1e55 · amount —
atlas.bankhaus · concierge·7.bankhaus
c1 0x1c6e07…b4e2 · c2 0x0a92d5…f716 · amount —
gwen.bankhaus · atlas.bankhaus
c1 0x1a49d8…7f63 · c2 0x16b6e3…f9da · amount —
concierge·7.bankhaus · orbio.bankhaus
c1 0x2c0f11…a9b2 · c2 0x0e77ac…41d0 · amount —
atlas.bankhaus · ledger-co.bankhaus
c1 0x09be4d…cc17 · c2 0x21a0f3…9e08 · amount —
family-office.bankhaus · gwen.bankhaus
c1 0x1f3391…0b5e · c2 0x2d8c02…77a4 · amount —
treasury-bot.bankhaus · gwen.bankhaus
c1 0x05d4ee…e311 · c2 0x1bb70a…28f9 · amount —
gwen.bankhaus · auditor.bankhaus
c1 0x2a9cf0…6d1c · c2 0x13e5b8…c0a7 · amount —
ops·3.bankhaus · cloud-bill.bankhaus
c1 0x0fa21b…93d6 · c2 0x2470cd…1e55 · amount —
atlas.bankhaus · concierge·7.bankhaus
c1 0x1c6e07…b4e2 · c2 0x0a92d5…f716 · amount —
Privacy study
The chain adds. Only you open.
Your balance is one ElGamal ciphertext on the alt_bn128 curve. A deposit adds amount·G. A transfer adds one delta to you and one to the recipient. Reading it back takes your view key and a bounded search, nothing the chain has.
- The same code runs in this page, in the app and in the contract tests
- Balances are kept in cents, so the read takes milliseconds
- Re-randomise and every byte changes while the figure does not
c1 —
c2 —
Your view key reads
…
A stranger's key reads
…
One account
A bank account that keeps its counsel.
A handle instead of forty hex characters. A balance that is yours to read and nobody else's. Agents that spend from their own vault inside limits you signed, and a queue for anything that needs a person. No desk, no session, no statement in the clear.
- Deposit USDG, send to a handle, withdraw — amounts sealed in the arithmetic
- A view key derived from one wallet signature; nothing stored
- Letters of disclosure when an auditor asks, and a receipt that you answered
Nothing on chain says how much.
Six things a bank needs besides secrecy, kept next to the ciphertext as plain contract state.
Encrypted amounts
Balances and transfers are ElGamal ciphertexts on alt_bn128. The verifier checks that a transfer is sound; the contract adds points. Who paid whom stays public, the figure never is.
Handles
gwen.bankhaus instead of an address. Lowercase, unique, changeable; the wallet behind it never moves.
Mandates
Per payment, per 24 hours, review threshold, allowlist. An agent key can spend inside them and do nothing else.
Letters of disclosure
Open one transfer to one reader. The chain keeps the fact and the moment, not the reader and not the figure.
Requests to pay
A link that asks for a figure, or a commitment to one. Paid in full to the receiver; the fee rides on the payer.
View keys that travel
The private half is a hash of one wallet signature. Same key on every device that holds the wallet, nothing to back up, nothing on a server.
Mandate study
Limits the chain enforces, not a server promises.
An agent signs with its own key. That key can spend from a vault the contract controls, in USDG, inside the mandate, and nothing else: no withdrawals, no re-keying, no widening its own limits. Lose the key and you pause or revoke; you never race it.
- Settles, queues or refuses: the agent asks routeFor before it spends
- x402 invoice ids ride into every settlement event for reconciliation
- Rotate the signer and keep the vault, the policy and the history
Route
Settles
payInvoice: per-payment ✓, window ✓, allowlist ✓, at or under the review threshold
The price list
One rate. 0.10%, capped at 5 USDG.
The same view the contracts call prices every transfer: min(amount × 10 bps, 5 USDG). Agents pay it from their vault, outside the mandate. Requests add it to the payer so the receiver gets the full figure. Fees are off until the house opens them.
Roadmap
Nothing on this list needs a token. All of it needs a verifier.
Done
6 Oct- Seven contracts, MIT, compiled for Robinhood Chain
- ElGamal balances in cents; the read takes milliseconds
- 54 checks on the compiled bytecode: deposits, transfers, withdrawals, mandates, letters, requests, pause
- Paper mode: the whole account in the browser, same arithmetic
- Live mode wired: one signature makes the view key
Next
this week- Deploy on 4663 and open the first handles
- Source-verify on Blockscout
- Indexer for the activity page (events only; still no figures)
- The agent SDK: routeFor → payInvoice / queueInvoice with the x402 header
October
to 31 Oct- The transfer circuit: both deltas encrypt one non-negative figure and the sender stays solvent
- Withdrawal circuit and the verifier swap, no balances touched
- Letters as signed documents the reader can check against the receipt
- Confidential requests to pay in the app
- Fee schedule switched on, treasury published
Q4
Nov – Dec- Multi-path payments: one transfer split across stealth handles
- Passkeys for the view key, no wallet pop-ups
- MCP server so an agent can hold its own account
- External audit of the contracts and the circuits
- Compliance tiers set by a role that can read nothing
Questions
What is hidden, exactly?
Can Bankhaus read my balance?
What does an agent get?
What is a letter of disclosure?
Why cents?
What is not finished?
The house is open.
Deposit. Pay a handle. Sign a mandate. Robinhood Chain.