Zcash

Built on Zcash

Zcash's own wallet code, compiled for the browser, holds your balance in the shielded pool and proves every payment on your device.

Umbra Trade's balance is a real Zcash wallet. Not a custodial account, not a wrapped token: Zcash's own Rust wallet library, compiled to WebAssembly, running in a Web Worker in your browser. It scans the chain, holds your notes, builds the zero-knowledge proof for each payment and signs it, all on your device.

What runs where

PieceWhat it isCode
Wallet libraryzcash_client_sqlite 0.23, zcash_client_backend 0.25, zcash_protocol 0.11, orchard 0.16packages/zwallet/rust/Cargo.toml
Targetwasm32-wasip1, run through a WASI shim in a Web Workerpackages/zwallet/src/worker.ts
PoolsSpends Ironwood (NU6.3) and Orchard notes, change always to Ironwood; Sapling is never spentpackages/zwallet/rust/src/send.rs
AddressesA fresh unified address with only an Orchard receiver, never reusedpackages/zwallet/rust/src/wallet.rs
Light clientSix lightwalletd calls, every one sealed with Oblivious HTTPpackages/zwallet/src/sync.ts
StorageThe wallet database, encrypted with AES-GCM into IndexedDB after every changeapps/web/src/features/vault

Why the shielded pool matters here

Every private wallet is funded from this balance, and every trip home lands back in it at a fresh address. On the Zcash chain an outside observer sees that a shielded transaction happened, not its amount, its sender or its receiver. Two steps per wallet are public: the payment to NEAR Intents' deposit address, always at a standard size, and NEAR's payout into a fresh shielded address when the wallet comes home.

Mainnet and testnet

mitoshi.xyz runs on Zcash mainnet. The browser wallet's proofs and sends were checked on testnet, where blocks come faster; the testnet proof lists them. Private wallets are funded on mainnet only, because NEAR Intents takes mainnet ZEC.

On this page