FAQ

What is zk.money?

zk.money is an open source, self-custodial wallet that lets people send and receive crypto privately, available in your browser or as a locally-run desktop app. Your funds are held privately on the Aztec Network, so balances, amounts and history are not published on a public chain.

Users can deposit from Ethereum, pay people via their tags, share payment links, and withdraw back to Ethereum at any time. As a completely self-custodial wallet, users hold their own keys, and there is no privileged admin role in the system.

Is this the same zk.money as before?

Same name, but a new product on a new architecture. The original zk.money was a private DeFi app on Aztec Connect, which stopped accepting deposits in 2023 and shut down in March 2024. Accounts and funds do not carry over.

What network is zk.money built on, and which tokens can I use?

zk.money runs on the Aztec Network, a privacy-focused Layer 2 on Ethereum. Transactions are proven on your device before they are sent, so your keys never leave your device. Initially, the system supports DAI, with more tokens to be added over time, but you can deposit USDC, USDT, or DAI directly, and they will be swapped to DAI as they are deposited. Withdrawals go back to Ethereum mainnet.

Who can see my payments?

Deposits and withdrawals to Ethereum are public by design, as they would be for any Ethereum transaction. Within the zk.money system, no one can see your transactions.

Amounts, sender, recipient and balances are private on the Aztec Network, and that includes zk.money itself; no operator can see or redirect your funds. The only other thing that is public by design is your tag, so people can pay you to your tag, but knowing your tag does not allow anyone to see your transaction history whatsoever.

Is my tag private?

Your tag is a public handle, so people can pay you by name. Everything you do with it stays private: your amounts, your balance, your payment history, and who you transact with.

Tags are first come, first served. Pick any name that is not taken; a small number of names are reserved by the zk.money team.

Why does zk.money say a name is reserved?

A small number of names are reserved by the zk.money team, and the sign-up flow will not issue them.

A reserved name can be claimed only by messaging the zk.money account on X, @zk_money, from the X account whose handle exactly matches the reserved tag. If the handle matches, you are sent a claim link for that tag.

Every other tag is first come, first served.

Can zk.money freeze my account or block my funds?

No. Nobody can spend or take your funds; only you control them. Individual operating roles within zk.money can go down or refuse service, but your existing balance can still be withdrawn.

Deploying a portal contract renounces administrative ownership of it, so nobody holds admin power over a portal. Portals can be frozen by anyone if the Aztec Network migrates to a new rollup instance, but a freeze only stops new deposits from coming in, and does not stop funds coming out (for example, for a migration to the new rollup).

Oxide is open source, so anyone can run an Oxide instance.

Is there a seed phrase? What if I lose my passkey?

No seed phrase, and no separate key to write down. Both your keys come from your passkey. When you sign in, the wallet works out your secret key and keeps it, unencrypted, in your browser's storage until you sign out, so a refresh, a new tab or closing the browser does not ask for your passkey again. The secret key shows your balance and history, but it cannot move your funds; see Trust model. Backing up your passkey (iCloud Keychain, Google Password Manager or 1Password) is what backs up your account. A passkey on a security key has no backup: lose the key and you lose the wallet. If you lose a device, signing in with the same passkey on a supported setup restores your funds. If the passkey is gone everywhere, no one can reconstruct it.

What is a payment link?

A payment link holds funds: you lock an amount, share the link, and whoever you send it to claims it with their passkey. They do not need a zk.money account beforehand.

Each link has a claim window you choose (1, 7 or 30 days) and a refund window that opens the moment you create it. If it is not claimed, you can take the funds back at any time. While a direct link is claimable, anyone who has it can claim it, so treat it like cash. A link can never be both claimed and refunded.

A request link is the reverse: it asks someone to pay you and gives them a deposit address, so it holds no funds until they send.

Can I receive funds from someone who does not use zk.money?

Yes. Anyone can send DAI, USDC or USDT to your Ethereum deposit address from any wallet or exchange, like a normal transfer. They do not need a zk.money account, and the deposit is swept into your private balance automatically. Each deposit address is single-use, so get a fresh one for every payment. Only transactions originating from, or withdrawing to, Ethereum are public.

There are two ways to skip handing out an address. Send a request link, and whoever opens it pays you from there. Or, in an Ethereum wallet that uses ENS CCIP, someone can type your tag as bob.zk.money and the resolver derives a fresh deposit address behind it, so the payment reaches you privately.

How do I refund a payment link?

Until somebody claims a payment link you can take the funds back: cancel it before the expiry, or reclaim it after. A link is never both claimed and refunded — the first of the two to land is the only one that counts.

Receive and send has the windows, the timing, and what a refund needs.

What if I pay the wrong person?

Payments are final. zk.money shows you the resolved recipient before you confirm, so check carefully. To pay someone you do not fully trust, send a payment link instead. If they never claim the payment link, you get the funds back.

Does zk.money charge fees?

There is a small fee on deposits and withdrawals, taken out of the total deposited or withdrawn amount. Part of each fee goes directly towards topping up a standalone fee-paying contract that covers network fees for everyone using zk.money, which is why what you do inside zk.money is free: up to 100 transactions a day, with no account data collected. The rest pays the Ethereum gas of moving your funds in and out. The free cover is subject to change in the future.

A deposit costs $0.35 and a withdrawal costs $0.20; Limits breaks both down.

Claiming a tag costs $4.90, and an additional $0.10 goes to that contract. That $5 comes out of your first deposit, which must be at least $15 in USDC, USDT or DAI, so $15 in DAI leaves you with $10 (USDC and USDT are swapped to DAI on the way in, so the exact figure moves with the swap rate). You can waive the $4.90 tag fee in the sign-up flow if you're eligible: prove that you own a wallet from the prior zk.money system that sunset in 2024, or get three people to claim zk.money tags through your share link. A first deposit of at least $5 is still required, and you'll pay $0.60 in fees, so $5 in DAI leaves you with $4.40.