Documentation
Sealed-size private trade
Goal: trade without printing full size to the public book. Live on Robinhood Chain testnet with fixed rates and dev proving keys. Real rates and production keys still ship next.
What lives today
Private trade (sealed path)
Pick direction + vault note
Buy (ETH → stock) or sell (stock → ETH). Spend a note you already hold in the vault.
Prove the trade
Browser builds a sealed-swap proof. Size stays private; the chain only sees a vault proof.
Settle in vault
You receive the out asset as a new vault note, plus change. No public DEX hop.
- 1
Pick direction + vault note
Buy (ETH → stock) or sell (stock → ETH). Spend a note you already hold in the vault.
- 2
Prove the trade
Browser builds a sealed-swap proof. Size stays private; the chain only sees a vault proof.
- 3
Settle in vault
You receive the out asset as a new vault note, plus change. No public DEX hop.
Testnet rates use coarsened display marks (Yahoo / CoinGecko for the UI), not an on-chain oracle. If marks fail, 1:1 fallback. Dev ceremony keys only.
Size privacy (default on): public amountOutMin is a 1-wei floor, not your real output. Your first private trade leaked size because min-out equaled the exact amount, that is fixed. Rates and asset pair remain public. Cash out still publishes amount. See privacy model · production gate.
Vault trade adapter (fallback)
From vault (public swap step)
Cash out
Unshield a vault note to your open wallet (public edge).
Swap
Public DEX swap. Size and pair are visible on the explorer.
Re-shield
Proceeds go back into the vault. Hold is private again.
- 1
Cash out
Unshield a vault note to your open wallet (public edge).
- 2
Swap
Public DEX swap. Size and pair are visible on the explorer.
- 3
Re-shield
Proceeds go back into the vault. Hold is private again.
Useful on thin books. Not sealed trade: the swap edge still leaks size. The product shows both paths honestly.
What “sealed” means
- Public observers do not get your exact size as a free signal (with max size privacy on)
- Settlement still ends on-chain (we do not claim invisibility)
- No theatrical “private success” without a real proof
- Explorer shows
sealedSwap+ pair, not a Uniswap fill
What ships next
- On-chain rates, replace display-mark rates with oracle-bound or pool-bound pricing (Pyth / AMM). Full write-up: Prices & oracles.
- Vault inventory, seed faucet stocks so cash-out after a sealed trade does not fail for empty
deposited. - Production ceremony keys, multi-party proving keys before any mainnet value.
- Ethereum expansion, same private rails where the largest onchain audience already sits.
- Deeper liquidity design, intent batching or vault-native pool when books are thin.
Each step keeps the same rule: no fake private fills. See Production gate.
What we will not do
- Hide a public swap behind a “private” button
- Claim production readiness on dev proving keys
- Promise dark-pool guarantees on thin testnet liquidity
Repo pointers
- Engineering design:
contracts/SEALED_TRADE.md - Status helper:
app/src/lib/sealedTrade.ts(sealedTradeReady() === truewhen artifacts ship; panel still checks the on-chain verifier) - UI:
app/src/components/app/SealedTradePanel.tsx - Production keys gate: /docs/production
Try it: Trade → Private trade. Adapter fallback: From vault. Hold/move: Move.