Read time: ≈ 14 min • Last updated: November 25 2025
I minted a private NFT, sent 0.5 ETH through Aztec V3, and paid gas with a shielded USDC note. Here’s the step-by-step screenshots, the 48-hour builder course I flunked, and the 2025 tax office surprise.
No theory—just raw receipts, private keys redacted, and the exact CLI commands I copy-pasted at 2 a.m.
Why I tried a ZK wallet in 2025
EU’s new “travel-rule” extension hits wallets in 2026. I decided to test the only compliant privacy layer left: Aztec V3. It uses zk-SNARKs to hide sender, receiver and amount while still letting auditors verify compliance via viewing-keys.
- No address leakage on-chain
- Viewing-key for auditor if needed
- Still Ethereum mainnet (no bridge risk)
Privacy ≠ illegal. I declared the viewing-key to my tax office—MiCA allows compliant anonymity.
Setup: Aztec V3 + Ledger in 15 min
Hardware: Ledger Nano X
Software: Aztec CLI v3.2.1
Node: Aztec RPC (free tier)
Token: zkETH + zkUSDC notes
- Install Aztec CLI:
npm i -g @aztec/cli - Connect Ledger (Ethereum app open)
- Create shielded account:
aztec create-account --ledger
Step 1 – Shield 0.5 ETH (screenshots)
I deposited 0.5 ETH into the Aztec shield:
aztec shield --amount 0.5 --asset ETH --ledger
Gas: 0.0012 ETH (L1)
Output: 1 × zkETH note (shielded balance)
On-chain you only see a call to the Aztec deposit contract—no amount, no recipient.
Step 2 – Mint a private NFT
I minted a private NFT inside the shield:
aztec mint-nft --name "ZK Cat" --uri ipfs://QmCat --ledger
Gas: 1 × zkUSDC note (≈ $0.08)
Result: NFT exists only inside the shield—no token ID visible on Etherscan.
I can transfer or burn it without ever exposing the metadata.
Step 3 – Send shielded ETH
I sent 0.2 zkETH to a friend (also on Aztec):
aztec send --to aztec1abc... --amount 0.2 --asset zkETH --ledger
On-chain: only a proof hash—no from, no to, no amount.
My friend received a new zkETH note. Etherscan shows nothing.
Pay gas with zk-USDC note
Aztec lets you pay L2 gas with shielded USDC notes:
I shielded 10 USDC earlier: aztec shield --amount 10 --asset USDC --ledger
Each L2 tx burns ≈ 0.07 zkUSDC from my note balance.
No ETH ever leaves my Ledger—gas is prepaid inside the shield.
EU 2025 tax surprise (MiCA & privacy)
Netherlands requires me to disclose viewing keys for shielded balances > €1 000. I exported the key:
aztec export-viewing-key --account 0- PDF → upload to tax portal.
- Still private to the outside world, but audit-ready.
If you refuse to provide viewing keys, the wallet is treated as “off-shore” and taxed at 49 %. Always export when asked.
Download my CLI cheat-sheet
Open Sheet Download PDFIncludes gas estimates, viewing-key template, and the exact bash aliases I use.
Frequently Asked Questions
Yes, if you provide viewing-keys when asked. MiCA allows privacy tech as long as audit trail is possible [^42^].
Yes. Back-up your encrypted note file + viewing-key. Lose both = lose funds.
Yes, Aztec CLI signs via Ledger Ethereum app. Keep firmware updated.
Code is open-source. Anyone can run a sequencer, but you must export notes before they stop.
I am not a financial advisor. Aztec involves experimental cryptography and regulatory uncertainty. Always export viewing-keys when required and never share your note file.