Live on Ethereum Sepolia

Hide the order. Settle the net.

Treasuries submit encrypted orders. Matching opposites cross privately at a reference price. Only the unmatched remainder reaches Uniswap, aggregated across everyone, and only when enough treasuries contributed to hide its parts.

Not audited. Testnet only. No demo data, and the verifier proves it.

Epoch 0x9c4a

What every observer sees. Nothing below is decryptable by anyone but the owning Safe.

Sealing in 04:12
Safe
Status
0x7a3f…2b91
Authorised
0xc1e0…8d44
Authorised
0x4b82…f0a7
Submitted

Side reads Encrypted for every row. An order that filled completely and an order that was underfunded produce byte-identical public traces. Same status, same events, same ordering.

The problem

A public order is a published strategy.

A treasury moving two million dollars from USDC into ETH has a problem that has nothing to do with execution quality. The moment the order is public, so is the intent. Size, direction, and the wallet behind it are readable before the trade fills.

This is not a flaw in Uniswap. Public order flow is what makes these protocols work. It just means any treasury large enough to matter cannot use them without leaking.

Front running

An observable order is an observable opportunity. The treasury pays the difference.

Strategy disclosure

A sequence of public trades is a public thesis. Competitors read it for free.

Counterparty pricing

Anyone quoting you can see your position first, and quote accordingly.

Governance exposure

A DAO debating a reallocation announces it long before it executes.

How it works

Three phases. Two of them nobody can see.

01Confidential

Submit

Amount, direction and limit are encrypted in the browser before anything is sent. The chain records that a Safe submitted an order for a pair, and nothing else.

Public
The Safe, the pair, the expiry
Hidden
Side, amount, limit
02Confidential

Cross

Every thirty minutes an epoch seals. Opposing orders match against each other inside the encrypted computation, at a time-weighted price from the Uniswap pool.

Public
That an epoch sealed
Hidden
Who matched whom, and for how much
03Public

Settle the remainder

Only what did not match is aggregated into one net figure and sent to Uniswap. One transaction, everybody's leftover combined, with no individual attribution.

Public
The aggregate that reached the venue
Hidden
Each treasury's share of it

The floor is why this holds

An aggregate contributed to by one treasury is that treasury's order in plain sight. shrud refuses to publish it. The epoch floor requires three participants, and the residual and supply routes each require two, counted separately so a busy swap route can never authorise a lonely supply. Anything that misses its floor rolls into the next epoch rather than settling.

The boundary

Stated precisely, because it is the product.

A privacy claim that does not say what remains visible is not a claim. Here is the whole line.

That a Safe submitted an order
Which side it is on
The trading pair, for example USDC and ETH
The amount
The expiry
The private limit price
The epoch it joined
Whether it crossed, partly crossed, or held
The aggregate that reached Uniswap
Each treasury's contribution to it
That an epoch settled
Every individual allocation

The public lifecycle has exactly five states, and it must never gain a sixth.

Processed is where every order that entered a sealed epoch ends up. The one that filled completely, the one whose private limit failed, the one that was underfunded, and the one that simply held. A sixth state such as Rejected or InsufficientBalance would turn repeated oversized orders into a binary search over a confidential balance.

SubmittedAuthorisedProcessedExpiredCancelled
Composability

Four protocols. None of them modified.

shrud is a layer on top of infrastructure that is public by design. It adds confidentiality without asking anything underneath to change.

Safe

1.5.0

Every treasury is a standard Safe with a shrud module installed. Version-gated on the VERSION string, because 1.4.1 silently swallows setModuleGuard rather than reverting.

iExec Nox

0.2.4

Confidential computation inside a trusted execution environment. Handles are pointers to encrypted data, decryptable only by the Safe that owns them.

Uniswap v3

Sepolia

Reference prices come from a thirty minute TWAP with a tick deviation bound. Net remainders settle through SwapRouter02 as one unattributed transaction.

Aave v3

Sepolia

Aggregate supply reaches a pooled position. Output is measured as an aToken balance delta, because Pool.supply returns nothing and aTokens rebase.

Verify

Nothing here asks to be believed.

One command reads Sepolia and re-derives every claim this site makes. It needs no private key, so you can run it against this deployment without asking anyone for anything.

$ pnpm verify:live

  ✓ 17 contracts, code hashes match
  ✓ wiring closed, deployer cannot forge intents
  ✓ governance delays as claimed
  ✓ assets, routes and adapters registered
  ✓ privacy floors at least 2
  ✓ nothing has been seeded

  65 checks passed, 0 failed.

17 contracts, live

Deployed to Ethereum Sepolia with no Safes, no orders, no balances and no epochs. The verifier asserts that absence, because a verifier that passes against seeded state is checking numbers the repository wrote itself.

Full set with runtime code hashes and constructor arguments in the deployment manifest.

Bring your Safe. Keep your strategy.

Install the module on a Safe you already control. Nothing custodial, nothing to migrate.

A full clearing epoch needs three participating Safes. That is the privacy floor, not a limitation.