Hidden recipient
Get paid without the chain knowing it was you.
Until now the chain could not read how much you were paid, but it could see that you were paid. This fixes that. You publish one public address once. From then on, every payment to you lands in a brand-new account that nobody can link to you: the chain only sees money going to an address it has never seen before. Your key is the only one that can tell which of those accounts are yours, read them, and spend them.
- A fresh account for every payment, made by the payer from your public address and a random number
- Nobody else can tell those accounts are yours: not the payer's other payments, not the chain, not an observer
- You find them by scanning with your key, then spend from them like any other account
1 bob, once publishes a public address
2 gwen pays makes a brand-new account from it and a random number
pays that account, sealed, as usual
3 the chain sees gwen paid an address with no past
cannot tell it is bob's
4 bob, later scans with his key, finds it, reads it, spends it
under the hood: a shared secret from bob's public address and gwen's random number gives both a fresh account and a fresh view key
Try one
Pay bob without naming him.
bob published his public address once. Each payment to him lands in a brand-new account: the ledger shows an address it has never seen, and no name. Then switch to bob's side: his key finds the accounts that are his and reads them. gwen's key finds none.
- A fresh account for every payment, nothing on the ledger links it to bob
- bob finds his accounts by scanning with his key
- Anyone else scanning finds nothing
Pay bob, hidden and the ledger rows appear here: an announcement with an ephemeral point and a one-byte tag, then a transfer to an address with no handle.
Who learns what
The chain
That gwen paid some address, and four curve points. Not who got it, not how much. Five payments to bob look like payments to five strangers.
The recipient
Everything: which accounts are theirs, what each holds, and the keys to spend from them. Spending from one of them is a normal sealed transfer.
The payer
The address they paid and the figure. They can write a letter for it like any other transfer; the letter names the address, never bob.
On chain
PosteRestante.setMeta(spendX, spendParity, viewX, viewParity) // once PosteRestante.announce(oneTime, ephemeralX, parity, viewTag, pkX, pkY) → ConfidentialToken.registerFor(oneTime, pk) // only the counter may ConfidentialToken.confidentialTransfer(oneTime, Δs, Δr, proof) // as usual // a real owner's register() always replaces a key that came through the counter
From the terminal or an agent
bankhaus poste publish # your public address, from your view key bankhaus send bob 80 --poste # pay bob under a fresh account bankhaus collect # find what is yours, read it, get the keys send_poste · collect_poste # the same two in bankhaus-mcp
One honest limit: when you spend from one of these accounts, the chain links it to wherever the money goes next. Spend to payees directly, or over several paths; sweeping everything to your main handle undoes the point.