A private payments dApp on Miden. Send, pay many people at once, schedule recurring pay, lock transfers you can pull back, swap peer-to-peer, and see how much of your activity stayed private — all from the browser, with proofs generated client-side.
Live: https://miden-private-dex.vercel.app
| Tab | What it's for |
|---|---|
| Send | One private transfer. Optionally recallable, so you can pull it back. |
| Bulk Pay | Pay a list of addresses in one run. |
| Payroll | Fund several future payments at once. Each period unlocks on its own date and lands in the recipient's wallet with no further signing. |
| Vault | Reclaim transfers that were sent as recallable and never collected. |
| Swap | Send someone a swap offer as a link. They open it and settle in one click — no order book, no waiting for a counterparty to appear. |
| Privacy | A breakdown of how much of your activity was private vs public. |
Miden has no allowance model — nobody can move your funds without your
signature. So a schedule is funded up front: the app creates one note per
period, each with a timelockHeight set to its own unlock block. Period one is
payable immediately, period two a full interval later, and so on.
Every note also carries a recallHeight one interval past its unlock, so
anything the recipient never collects can be reclaimed from the Vault tab. The
recipient always has first claim.
The trade-off is explicit in the UI: the full funded amount leaves your wallet when you set the schedule. Fund one period or twelve — that choice is yours.
React 19 · TypeScript · Vite · @miden-sdk 0.15.9 · MidenFi wallet adapter
npm install
npm run devPush to GitHub and import the repo in Vercel. vercel.json sets the COOP/COEP
headers that Miden's WASM requires. A default testnet build needs no env vars.
Everything network-specific lives in src/config.ts and is driven by env vars,
so moving networks is a settings change rather than a code change.
| Variable | Default | Notes |
|---|---|---|
VITE_MIDEN_NETWORK |
testnet |
testnet · devnet · mainnet. Drives every default below. |
VITE_MIDEN_RPC_URL |
follows network | Shorthand or a full RPC URL. |
VITE_MIDEN_PROVER |
follows network | testnet · devnet · local or a URL. |
VITE_NOTE_TRANSPORT_URL |
follows network | Private notes travel peer-to-peer over this service. Without it the client rejects private sends. |
VITE_EXPLORER_URL |
follows network | Where transaction links point. |
To move to mainnet, set VITE_MIDEN_NETWORK=mainnet and redeploy.
Note: as of
@miden-sdk0.15.9 the wallet adapter recognisesdevnet,testnetandlocalnetonly. Mainnet support lands with a future SDK release; the configuration above is already in place for it.
MIT