How it works

The invoke sandwich

How a swap, a bridge or a lending supply happens without your value ever landing on a public address of yours.

Swap, Earn and bridge are the same shape, and it is worth understanding because it is what makes them private at all. The only thing that differs is which contract gets invoked in the middle: an aggregator's executor for a swap, our own helper for a lending supply, and StarkWare's OutboundAnonymizer for a crossing.

A note in the pool

Your value sits as shielded notes. Nothing about which notes are yours is public.

Withdraw to the executor

The input leaves the pool to the venue's privacy executor — not to any address of yours. This is the step that would otherwise deanonymise you: a swap that first withdraws to your own public address and then trades has already told everyone who you are.

Invoke

The executor runs the swap, the lending supply, or the bridge burn, inside the same transaction. There is no window in which the value is sitting somewhere waiting.

Proceeds land back as a note

Output returns into the pool — the bought token, or the lending market's shares. On a bridge it exits through OutboundAnonymizer instead — outbound only, see surface status.

What this hides, and what it does not

It hides who. It does not hide how much.

Any leg that touches an open note publishes its size. A swap, a lending supply, a launch buy and a market bet all reveal their amount to anyone reading the chain. This is why "amounts are private" is a refused claim — the sponsor's own rule is claim identity privacy; never claim amount privacy for swaps, and this product follows it.

Everything is rehearsed first

The pool's compile_actions is a view, so every action list is validated for free before a funded transaction is built. It has to be: a malformed list burns the fee even when it reverts.

Nothing about the fee is hardcoded either. The pool fee is mutable with no upgrade delay, so it is read from the pool at call time, every time.

On this page