A new wallet for every trade.
Trade Polymarket, Hyperliquid and Solana privately, from shielded ZEC.
Open Mitoshi · Demo · YouTube · Pitch · Docs · Who sees what · Proof · Status
Predictions, stocks and crypto from one shielded balance: every trade gets a brand-new wallet, funded through NEAR Intents, with no history to follow. From one shielded ZEC balance you bet on prediction markets, trade US stocks, indices, gold and oil, go long or short on crypto perps, and buy Solana tokens, with one portfolio across all of them. The privacy is the engine: a real Zcash wallet runs in your browser, every funding is one standard amount sent at a random moment, every call about your wallets travels over Oblivious HTTP, and Send home swaps the money back to a fresh shielded address.
Built for ZECATHON · Private Markets (how Mitoshi meets the hackathon). Mitoshi (見通し) means outlook: the view ahead.
Judges: try it in 30 seconds. The Working demo link in our submission opens judge.mitoshi.xyz with a shared wallet that already holds real money on Hyperliquid, funded from shielded ZEC. Press Trade BTC now and go long or short ($2.50 at 5× clears Hyperliquid's $10 minimum). Then the Judge button at the top walks you through what the public sees and the funding on the Zcash explorer. No link to hand? Look around.
On Polymarket, Hyperliquid and other onchain markets, every trade is public. Each wallet's positions, wins and losses can be read by anyone, and tools rank those wallets so others can copy the best ones: one graded 7,756 Polymarket wallets for copy trading (r/Polymarket, 2026-08-21). "The copy traders literally ruin my trading," one trader said (via @kai_xbt, 2026-09-25).
Traders tell each other to "use a new wallet for every trade" (@remusofmars, 2026-09-25). Today that means:
- make a new wallet;
- send it money from your main wallet or an exchange;
- trade, and hope nobody connects the two.
Step 2 gives it away. A transfer from your main wallet is public, and an exchange records every withdrawal under your name. "I created another wallet to trade in peace and people found it" (@DegenCapitalLLC, 2026-10-01). Privacy pools don't fix it when they are small: Solana's largest held $1.9M on 2026-10-22 (DefiLlama), so a deposit and a matching withdrawal stand out. A few new apps hide positions, but each covers a single venue.
Mitoshi keeps your money in shielded ZEC, where nobody can see it, and opens every position from a brand-new wallet funded from there. You choose the market and the amount. Mitoshi makes the wallet, pays one standard amount out of the shielded pool through NEAR Intents at a random moment, places your order on the venue's real book, and later sends what the wallet holds back to a fresh shielded address. Where that money came from hides among every note in Zcash's shielded pool: about 4.96 million ZEC on 2026-10-22 (openzcash.org). A copy trader who finds the wallet sees one funding, one trade and no history.
- A private balance. Create a wallet at mitoshi.xyz/wallet: 24 words, made and kept in
your browser. Deposit from Zodl to a fresh shielded address, or from an exchange to a fresh
t1…address that Mitoshi shields for you. No account, no sign-up. - Pick a market. Say NVIDIA on Polymarket Perps. The ticket starts with the amount: $25 at 5× is a $125.00 position, 0.58164 NVDA, fee $0.05.
- A wallet nobody has seen. Mitoshi derives a new key for this position and pays one standard amount (0.005, 0.01, 0.02 … ZEC) from the shielded pool into NEAR Intents at a random moment. On 2026-10-27 a real 0.005 ZEC funding arrived as 6.13 USDC on Hyperliquid, ready to trade 14 minutes later.
- Trade. The order goes to the venue's real book, signed by that wallet's own key (on Polymarket Perps, by a 7-day proxy that key authorises).
- See what a copy trader sees. "What the public sees" opens the wallet's public record: one funding from a NEAR swap, one trade, no history, no link to your other wallets.
- Come home. Close the position, then Send home: it cancels open orders and swaps what the wallet holds back to a fresh shielded address (on Polymarket it also sells or redeems the shares first).
| Party | Sees | Never sees |
|---|---|---|
| The venue (Polymarket, Hyperliquid, Jupiter) | One fresh wallet's own trades, sent from Ireland | Your other wallets, your balance, your IP or country |
| A copy trader | A wallet with one funding from a NEAR swap and one trade | Whose it is, or any other wallet of yours |
| NEAR Intents | One swap per funding or trip home, confidential except Polymarket's trip home; a funding refunds to a fresh shielded address, a trip home to its own wallet | Who sent it, or any other swap of yours |
| The Zcash chain | Shielded transactions, plus each wallet's hops through NEAR: a standard amount in, its trip home out | Your balance, your addresses, or that it was you |
| Relay (Cloudflare) | Your IP and which public markets you look at | What you ask about your wallets: every user call is an encrypted Oblivious HTTP message |
| Gateway (Vercel, Dublin) | One decrypted request, from the relay's address | Your IP, or which requests come from the same person |
No server holds your keys, your list of wallets or your positions; they live only in your browser, encrypted. What is public on purpose (each wallet's own trades, one hop in at a standard amount and one hop home, NEAR's swap record, and Polymarket's builder attribution on gasless wallet calls) is in the threat model.
Play it on mitoshi.xyz/demo · Watch on YouTube
Follow the proof on the live app:
- Open a stock: NVIDIA on Polymarket Perps, live candles and the order sheet.
- Open an event: Predict, any market's odds history and Yes/No ticket.
- Open DevTools → Network on any page: every request goes to mitoshi.xyz, and every user call is
POST /relay/ohttp. - Read who sees what and the service status of each hop.
Open the detailed map · Edit the Mermaid source
Open the step-by-step guide · Edit the Mermaid source
- One wallet per position. An order goes to the wallet that already trades that market, otherwise to a ready wallet that has never traded, otherwise a new one is funded; another position's wallet is never used. Keys come from your 24 words on a hardened path of their own, so no two wallets share a key, a proxy, a refund address or a request.
- Standard amounts at random times. Fundings offer the canonical denominations of ZIP 318 (n × 10^k ZEC, n ∈ {1, 2, 5}) first; any other amount (typed in ZEC or dollars, or a share of your balance) is allowed, and the leak meter says it is easier to match. Fundings start 20 s to 3 min after you ask, and never at a deposit or when the app opens. A keep-ready replacement waits a random delay (90 min on average, at most 12 h), so a new wallet never appears right after your trade. ZEC that arrived from a public address rests 2–6 hours first.
- Two hops, nothing third-party. Every page and every worker may reach mitoshi.xyz only (CSP with per-page script
hashes), and pages are sent
no-transform, so no proxy can add a script. Pictures of what you hold come over OHTTP too. - One pool per transaction. Payments spend Ironwood notes only, so no send publishes a pool crossing beside it; ZEC in the old Orchard pool moves across as ZIP 318 canonical crossings, after you agree to the schedule.
- A leak meter on every send flags a withdrawal that matches a recent payout in amount or timing.
| Built on | What it does | Where |
|---|---|---|
| Zcash · librustzcash | zcash_client_sqlite 0.23 and zcash_client_backend 0.25 (zcash_protocol 0.11, NU7-ready), compiled to wasm32-wasip1: sync, Ironwood and Orchard notes, proofs and sends in a Web Worker, encrypted into IndexedDB |
packages/zwallet |
| Zcash · ZIPs 32, 317, 318 | Keys from the 24 words; fees; canonical amounts and timing; Orchard moved to Ironwood as canonical crossings | packages/engine · send.rs |
| NEAR Intents · 1Click | Every rail in and out of the shielded pool, in confidential mode, with signed quotes checked before any deposit and the granted mode and fees read back from them | packages/rails |
| Oblivious HTTP (RFC 9458) | The client, the relay and the gateway with its upstream allowlist | packages/net · services/web · services/gateway |
| Venues | Polymarket (Deposit Wallets, CLOB), Polymarket Perps, Hyperliquid, Solana through Jupiter | packages/venues |
ZECATHON's brief: "Thirty days to build something on Zcash that does not leak."
| Requirement or criterion (verbatim) | How Mitoshi meets it | Check it |
|---|---|---|
| Privacy: "Does it actually preserve privacy, or does it only look like it does? Leaks are disqualifying, not deductions." | Shielded balance in the browser, one fresh wallet per position, standard amounts at random times, confidential NEAR swaps, every call over Oblivious HTTP, no server-side state. Residuals are written down, not hidden | Who sees what · threat model · gateway allowlist |
| Usefulness: "Would someone use this on Monday." | Traders on public venues get copied and front-run through their wallet, in their own words; Mitoshi trades the venues they already use (predictions, US stocks, gold, crypto perps, tokens) with no account and no sign-up | The problem · mitoshi.xyz |
| Execution: "Does it run. Working beats ambitious." | Live on mainnet with live venue data; a full mainnet round trip on Hyperliquid (fund, trade, close, home to shielded ZEC); 42 unit tests | Proof and evidence |
| Originality: "Built for this hackathon, not repackaged." | Written during the build window; a full Zcash wallet on librustzcash compiled to WASI for the browser, and one shielded balance behind four public venues | Commit history |
| Private Markets: "anything where the price should be public and the participants should not." | The venues' prices and books stay public; the trader behind each position does not | One trade, start to finish |
| Working demo: "Something the judges can open and use." | A shared wallet with real money on Hyperliquid, opened by the link in the submission at judge.mitoshi.xyz; or mitoshi.xyz with your own wallet | judge.mitoshi.xyz |
| "All code written during the build window. Libraries are fine; existing products are not." | The repository's history starts on 2026-10-22; libraries are listed above and in the lockfile | Prior work |
| "Open source at submission." | MIT, public | LICENSE |
Dated: the mainnet round trip on 2026-10-28, the mainnet funding on 2026-10-27, the rest checked on 2026-10-23.
| What | Evidence |
|---|---|
| A mainnet round trip on Hyperliquid (2026-10-28) | A fresh wallet funded from shielded ZEC, Hyperliquid user 0xd3e31bdd4ddcda81600e6e52624591e4fd789390, went long 0.00019 BTC at 81,637: 0x97d69e42c5226f5f995004478cdc490202cd002860258e313b9f49958426494a, block 1,200,413,769. It closed, and Send home paid 0.00366141 ZEC into the shielded pool: 84dcc1af2b7d8ad3428e9c9e4a4021f259be63169132703755c947f08291bdb7, block 3,533,665, 14:32:12 UTC. The explorer does not decode that v6 transaction's shielded part; its sums show it (0.02337471 ZEC in from NEAR's public addresses, 0.0195633 back as change, 0.00015 fee, 0.00366141 shielded). Both explorers are on screen in the demo video |
| A mainnet funding, end to end (2026-10-27) | The browser wallet proved an Ironwood spend of 0.005 ZEC (fee 0.00015) into NEAR Intents 1Click: fd46b7ee43b4c5ce10844f0dff51902d7945c6ce66327b8752504b3e26ecfdf5, block 3,532,740. The fresh wallet held 6.13 USDC on Hyperliquid, ready to trade, 14 min later; NEAR's swap cost $0.35 |
| The browser wallet builds, proves and broadcasts an Ironwood spend | NU7 testnet ceb45a85df00f55d8a7b6c4318c65aa22c33c702a4bff476c2feef0dee7d4e5d, height 4,529,708, 9,166 bytes; proving-key warm-up 11.8 s, proof about 17.5 s single-threaded |
| Sends from the app, direct and over OHTTP | c1569f9f34a75c6896b272f7804ed501285acbfb472ce1dcf53fc869fa6938e2 (height 4,529,789) and 8a14a08bc1af88c6b8f644fdc22d11731e431a8b2257fccac4a3768430981b86 (height 4,529,846) |
| No third-party request from a page | On mitoshi.xyz the resource list holds one host, mitoshi.xyz; /demo loads YouTube's player only after you press play |
| Confidential swaps on NEAR | A dry 1Click quote over OHTTP accepted in confidential mode: 0.01 ZEC → 11.86 USDC on HyperCore, about 465 s |
| Polymarket over OHTTP | Market lookup, pUSD reads, a bridge quote (60 USDC → 59.987 pUSD), and the gateway's builder signer returning signed relayer headers |
| Gateway egress | Ireland (Vercel dub1) for every visitor, so no venue learns a user's country |
| Unit tests | 42 passing: engine 25 (denominations, rest rules, scheduling, one wallet per position, registry, keys, leak meter, ZIP 318 migration), rails 8 (1Click quotes, the signature check, the mode and fees read back), venues 9 (4 Polymarket Perps signing, 2 Perps candles, 3 Solana transactions) |
The testnet transactions were read back with GetTransaction from the light server the wallet syncs from; public
testnet explorers follow an older testnet chain and do not show them.
| Surface | What you do there | Open it | Guide |
|---|---|---|---|
| Markets | Every venue's live markets in one place, with live prices | /markets | Markets |
| Predict · Polymarket | Events with their odds history, every outcome, Yes or No at market or limit, the order book, redeem after resolution | /predict | Polymarket |
| Perps · Polymarket Perps and Hyperliquid | US stocks, indices, gold and oil, and crypto: live candles, long or short, leverage and TP/SL in their own sheets, close | /trade | Perps · Hyperliquid |
| Tokens · Solana through Jupiter | Trending tokens, a live chart, buy and sell | /tokens | Solana |
| Portfolio | One live total for everything you own, your assets token by token, open positions with live P&L, history, deposit and withdraw | /portfolio | Portfolio |
| Wallets | Each private wallet's timeline, "keep one ready", what the public sees, send home | /wallets | Private wallets |
| Privacy and status | Who sees what and the leak meter; the live state of every hop | /privacy · /status | Privacy · Verify |
| Settings | Recovery words and an encrypted backup file, a passphrase lock, Forget | /settings | Backup and recovery |
Needs Node 24+ and pnpm 12. The wallet's WASM build is committed, so Rust is not needed.
pnpm installpnpm --filter @mitoshi/web devThat serves localhost:3300 on Zcash testnet through the deployed relay; dev:main serves mainnet on port 3301.
Checks: pnpm lint && pnpm typecheck && pnpm test. Rebuild the wallet WASM with
pnpm --filter @mitoshi/zwallet build:wasm (Rust, LLVM clang and the wasi-libc sysroot). Deploy with
pnpm --filter @mitoshi/web-worker run deploy (app and relay), pnpm --filter @mitoshi/docs run deploy (docs) and
pnpm --filter @mitoshi/gateway run deploy (gateway); its secrets are set on the host, never in the repository.
| Area | Where |
|---|---|
| Screens, flows and states | apps/web/src/features |
| Docs site and its system maps | apps/docs |
| Zcash wallet (Rust → WASM) and its worker | packages/zwallet |
| Amounts, timing, registry, leak meter | packages/engine |
| NEAR Intents 1Click | packages/rails |
| Venue adapters | packages/venues |
| OHTTP client and pinned key | packages/net |
| Chart engine | packages/chart |
| Relay, live feeds, hosting | services/web |
| Gateway and upstream allowlist | services/gateway |
| README diagrams | .github/diagrams |
- Marks. Coin and network marks from
@web3icons/core(MIT); the Polymarket and Jupiter marks are vendored as described in SOURCES.md. Every mark belongs to its owner and is used only to name the venue. - Fonts. Sora, Inter and JetBrains Mono (SIL OFL), self-hosted; a Noto Serif JP subset for 見通し (SIL OFL 1.1, licence).
- Images. The brand banner, the banner and the demo cover are composed in HTML (.github/assets/source); the banner and cover from unchanged captures of the live app, and the cover is artwork with a play button, not a recording; see provenance.json.
Mitoshi was written for ZECATHON; this repository's history starts on 2026-10-22.
- One venue's round trip has run on mainnet so far. Hyperliquid's did on 2026-10-28 (see Proof); Polymarket's and Solana's have not run end to end on mainnet yet.
- The venue sees the trade. Each wallet's orders are public on its venue; Mitoshi hides who placed them, not what was traded.
- Polymarket's trip home is not a confidential swap. Its bridge pays out an inexact amount, which NEAR's confidential mode cannot take, so NEAR's public record pairs that payout with the fresh shielded address it goes to.
- Funding takes minutes: about 7.5 by 1Click's estimate, unless a wallet is kept ready.
- Timing analysis. Random start times, standard amounts and rest periods make it hard, not impossible, for someone holding the whole public record.
- One operator runs both hops and serves the app, so keeping relay and gateway apart is a promise you can check in this repository, not something the code enforces.
- Public light servers serve the compact blocks; they only ever see the gateway.
- No outside testers yet. The demand above is traders' own public posts; nobody outside the team has traded through Mitoshi.
- Web only.
MIT



