Straight to the provider
203.0.113.7 eth_getBalance(0x7a3f…c21e)
Your address, next to your IP. Every read, every day.
A post-quantum security layer for Ethereum, more than a wallet. Pay, receive, hold a name and swap, every move signed by FORS+C: hash-based keys with no known quantum attack. Protect what you already have, too: any protocol's admin keys, any Uniswap position, any MetaMask wallet. Read the chain through the Ethereum Foundation's anon-rpc, so nobody sees who asks, and leave any pool without a single server of ours. Each one works now, on Sepolia and on Ethereum's EIP-8141 devnet.
Opaque Unseen · EF's anon-rpc · Live on Sepolia
Every wallet reads the chain, and every read hands an RPC provider your IP beside your address. Opaque Unseen sends your wallet's reads and transactions through the Ethereum Foundation's anon-rpc and the Nox mixnet. The chain answers. Nobody learns who asked. Not even us.
Your request is the orange one. By the exit, it looks like everyone else's.
One balance check, three ways
203.0.113.7 eth_getBalance(0x7a3f…c21e)
Your address, next to your IP. Every read, every day.
opaque-exit eth_getBalance(0x7a3f…c21e)
Your IP is hidden, but every relay is ours: one operator to trust.
nox-exit eth_getBalance(0x7a3f…c21e)
A mixnet anyone can run. Nobody in the path knows it was you.
How a read leaves your browser
The wallet reads the Nox worker's bundle hash from its IWorkerSpecifier contract and runs only bytes that match it. Nobody can quietly swap the code.
A Web Worker inside a sandboxed, null-origin iframe. It can't reach the page, its storage, or your keys. All it gets is the request.
Each request becomes Sphinx packets. Each Nox node peels one layer, waits, and passes it on among everyone else's. TLS to the RPC runs inside the worker, so the exit relays bytes it can't read.
Balances, your key's state, and your account's operations to the public bundler: all answered, none tied to you. That's about a second a read.
What goes through it
Pay alice.opaque.eth: the lookup on ENSv2's UniversalResolver goes through Nox, so no provider learns who you're about to pay.
Turn on Unseen in Privacy. Balances, key state, nonces and every UserOperation then reach a public RPC and bundler through the mixnet, with nothing of Opaque's in the path.
0 of this wallet's reads and operations answered through anon-rpc
If Opaque's servers ever stop or refuse you, your notes still leave their pools, signed by your own post-quantum key, with every call through Nox.
Receive · Live on Sepolia
Post-quantum stealth addresses. Your wallet publishes one ML-KEM-768 key in Ethereum's stealth-address registry (ERC-6538). Each payer uses it to make a fresh one-time address that only your key can find, and announces it on ERC-5564's Announcer. Your wallet spots its own and sweeps them into your notes.
How a post-quantum stealth payment works
A quantum computer reading old announcements recomputes every shared secret, and links each payment to its recipient.
It can't. ML-KEM has no known quantum attack, so the announcements stay sealed, old ones included.
Until Alice sweeps, Bob also holds the one-time account's keys: hash-based keys can't be tweaked the way elliptic-curve ones can. Her wallet sweeps as soon as the payment lands.
Names · ENSv2 · Live on Sepolia
opaque.eth is held by PQNameController, the sole holder of every role on the name, and it acts only on a FORS+C signature. Under it, yourname.opaque.eth can be claimed only by a post-quantum account. ENSv2's own UniversalResolver walks the tree and returns that account, so paying a name pays a key a quantum computer can't take.
setResolver includedrelease() frees itSwap · Uniswap v4 hook · EIP-8141 devnet
PQPoolHook is a Uniswap v4 hook that admits only accounts whose one authority is a FORS+C key. It checks every swap, every liquidity change and every donation, so a cracked ECDSA key can't touch the pool, and a position moved to an ECDSA wallet freezes instead of leaving. It's live on Ethereum's EIP-8141 devnet, where accounts validate themselves: no bundler, no paymaster.
NotPostQuantumUniswap v4 · Uniswap's own deployment · Live on Sepolia
On Sepolia, at Uniswap's own v4 PoolManager, the same rule runs for Opaque's ERC-4337 accounts. PQAccountPoolHook lets only PQ accounts swap in, add to, remove from or donate to its pool. Each one is a clone of one PQAccount implementation whose only authority is a FORS+C key, so its code hash says what it is, and there's nothing to register.
NotPostQuantum(wallet)Liquidity guard · Any wallet · Live on Sepolia
PQGuardHook protects liquidity anyone provides, ECDSA wallets included. Register a FORS+C key once, with an ordinary transaction. From then on, every removal from your position, fees too, needs that key's signature over the exact amount, a recipient and a deadline. The hook pays the recipient it names itself, so whoever cracks your ECDSA key can't take the liquidity, or redirect a removal you sign.
BadSignatureBadSignatureKeep MetaMask
Two ways to go post-quantum without leaving it, both live on Sepolia.
Keep MetaMask, and protect what's in it. ETH and tokens you put in the vault come out only with a FORS+C signature, so whoever cracks the ECDSA key finds nothing to move.
Open the vaultWith the Opaque extension, any dapp's wallet list shows Opaque next to MetaMask (EIP-6963). Connect, and each transaction is approved in Opaque and signed by a post-quantum account.
Try it on a dappAvailable now
Why now
Every ECDSA signature ever published reveals its public key, so the day a large quantum computer exists, those accounts can be taken. The cheapest time to move is before anyone has to.
Honest about it
Built on the Ethereum Foundation's anon-rpc and the Nox mixnet. Opaque's code is open source (Apache-2.0). On Sepolia today.
Make a wallet on Sepolia: free test funds, a name under opaque.eth, private payments in and out, a swap in the post-quantum pool. Every signature it makes is post-quantum, and one switch in Privacy sends every read through the mixnet.
Take free test tokens on Sepolia and send some privately. They have no value, so nothing is at stake.
Get test tokensFollow one payment from deposit to app in five short scenes, told with eight dots.
Follow a payment