ZKJEV · Shielded pools on Robinhood Chain · decided by Jev
Shielded ZK swaps
decided by Jev
ZKJEV on Robinhood Chain: a shielded pool whose exit is a swap. Deposit a fixed note, prove it in your tab, leave as another token at an address that never touched your wallet. Every timing and routing call is made by Jev, a System One model that answers in probabilities, not prose.
Numbers, not prose. The state carries counts and ages, never an address or a note. Read the exact request in the Jev section below, or in the app before you withdraw.
ZK hides. Jev decides.
Two layers, one boundary. The zero-knowledge layer never learns who you are. The decision layer never gets a chance to: it sees counts, ages and liquidity, and answers with a number.
- Pools
- 3 on chain 4663
- Notes
- 0.01 / 0.1 / 1 ETH
- Exit
- Uniswap v4 native · v3 WETH
- Decides
- Jev · noul, choice, score
- 3 fixed pools
- ·poseidon tree · 20 levels
- ·7 public signals
- ·jev system one
- ·relayed exits · v3 + v4
How it runs
One note, one proof, one transfer
A deposit puts a commitment in a Merkle tree. A withdrawal proves a note is in that tree and has not been spent, binds who receives what, and swaps on the way out. A relayer submits it and pays the gas, so the receiving address needs nothing and knows nothing.
Pools
Three pools, read on every visit
Each row is a pool contract on Robinhood Chain holding one fixed denomination of ETH. Fixed sizes are what stop an amount from giving a swap away. Your browser reads the note count, the balance and the current root straight from the chain; this table has no database behind it.
| Pool | Contract | Deposits | Unspent | Held | Root | Jev · withdraw_now |
|---|---|---|---|---|---|---|
| 0.01 ETH | 0xf8ade8…3edb7c | ··· | ··· | ··· | ··· | ··· |
| 0.1 ETH | 0x23a7c8…4142c1 | ··· | ··· | ··· | ··· | ··· |
| 1 ETH | 0xb41c39…262732 | ··· | ··· | ··· | ··· | ··· |
reading the chain…
A thin crowd is a thin disguise: with few deposits a withdrawal can be matched to one of few wallets. Jev scores that before you withdraw, and the MCP server refuses to send unless you force it.
Jev · System One
Ask Jev, get a verdict
Jev, from TypeSafe AI, does not generate text. You send it a state and typed questions; it returns one answer per question in about a hundred milliseconds: a probability, a pick from options you defined, or a place on a scale you defined. ZKJEV asks it whether a withdrawal should go now, through which venue, and how to spread a bundle.
Without a key this route answers the same questions locally, from the rules the app shipped with, and says source: "local". Nothing is labelled Jev that Jev did not answer. ZKJEV is a customer of TypeSafe’s API, not a partner, and nothing here is endorsed by TypeSafe AI.
The pool contract
A proof alone can’t pick the recipient
The seven public signals of the proof include the recipient, the relayer, the fee, the output token and the minimum out. Whoever relays it can submit it or drop it, but cannot change where the money goes or what it becomes. The contract checks, in order:
- ✓ fee ≤ denominationelse FeeExceedsDenominationelse FeeExceedsDenomination · the relayer cannot quote itself the whole note
- ✓ nullifier never seenelse AlreadySpentelse AlreadySpent · one note, one exit, forever
- ✓ root is one of the last 100else UnknownRootelse UnknownRoot · the proof was made against a tree this pool had
- ✓ groth16 verifies on 7 public signalselse InvalidProofelse InvalidProof · root, nullifier, recipient, relayer, fee, tokenOut, minOut
- ✓ amountOut ≥ minOut after the swapelse TooLittleOutelse TooLittleOut · a sandwiched exit reverts instead of paying less
- ✓ venue is None, V4 or V3else BadVenueelse BadVenue · v4: unlock → swap → settle → take · v3: swap + guarded callback
- emits Withdrawal(recipient, nullifierHash, relayer, fee, tokenOut, amountOut)
The proof
One proof, then a withdrawal that links to nothing
A withdrawal carries a Groth16 proof made in your browser, against a 20-level Poseidon tree rebuilt from the chain. It shows a note exists and is unspent. It does not say which.
- ✓ a note is in this pool’s tree
- ✓ its nullifier has not been used
- ✓ recipient, relayer, fee, token and minimum out are the ones it was made for
- ✕ which deposit the note came from
- ✕ who deposited it
- ✕ the secret, and the nullifier’s preimage
- ✕ which withdrawals belong together
The proving key comes from a public ceremony you can join from your browser; the circuit, the wasm and the verification key are published with their hashes in the docs. A forged proof would need the ceremony’s toxic waste from every contributor at once.
For agents · MCP
Let agents swap in private
ZKJEV is also an MCP server and a one-file skill. Seven tools over stdio: pools, quote, plan, decide, deposit, notes, withdraw. It runs on your machine, notes and proofs never leave it, and it asks Jev before it sends.
Live
Running on Robinhood Chain
What is on and what is not, read as you look at it. No status page can lie about a number it did not fetch.
| Service | What it does | Where | Status |
|---|---|---|---|
| pools | Three fixed-denomination shielded pools, native ETH, v3 and v4 exits | chain 4663 | live |
| prover | Groth16 in the browser; wasm and zkey served from this origin | your tab | live |
| relayer | Submits withdrawals and pays gas; balance and fee floor on the stats page | /api/relay | see stats |
| decide | Typed questions to Jev; local answers until the key lands, and it says so | /api/decide | see stats |
| ceremony | Public contribution to the proving key, from the browser | /ceremony | open |
Open a note on Robinhood Chain
Deposit a fixed note, let Jev call the moment and the venue, prove it in your tab, and leave as something else at an address that was never yours.