Bankhaus
Private banking house · Robinhood Chain

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.

How it works
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.

Read the protocol

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
Enc(amount, r) · alt_bn128 G1

c1 —

c2 —

Your view key reads

…

A stranger's key reads

…

same figure · new bytes

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
routeFor(agentId, recipient, amount)

Route

Settles

payInvoice: per-payment ✓, window ✓, allowlist ✓, at or under the review threshold

left today 80 USDGvault 300 USDG

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.

Read the schedule

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?
The amount. Your address, your handle, who you paid and when are public, the same as any transfer on Robinhood Chain. The figure moving between two accounts is an ElGamal ciphertext the chain can add but not open.
Can Bankhaus read my balance?
No. There is no server in the path. The view key is derived in your browser from one wallet signature and never leaves the device. The contracts hold ciphertexts and a public key per account; the admin role can pause and swap the verifier, nothing more.
What does an agent get?
An account of its own, funded by you, bound by a mandate: per payment, per 24 hours, a review threshold and an optional allowlist. It pays x402 invoices with its own key. Above the threshold the payment waits for you; above the cap it is refused.
What is a letter of disclosure?
The way you answer an auditor, a counterparty or a court without opening your account to the world. You hand one reader the figure and the blinding of one transfer; the chain records that a letter was issued and when, not to whom and not what it said.
Why cents?
Reading your own balance means recovering an integer from a curve point. With six-decimal USDG a million dollars is 2^40 and the search is slow; in cents it is 2^27 and takes a few hundred milliseconds, cold, in a browser.
What is not finished?
The zero-knowledge verifier. This build runs the bring-up stub that accepts every proof, exactly as the reference deployment it descends from. The arithmetic, the keys, the mandates and the receipts are real and tested on the compiled bytecode; the circuit is the open item, and it swaps in without touching a single balance.
Bankhaus

The house is open.

Deposit. Pay a handle. Sign a mandate. Robinhood Chain.