NozyWallet · LEONINE-DAO · July 2026
This post summarizes how NozyWallet approached Ironwood migration as a privacy decision, what we validated on Zcash testnet, and the v2.4.0 CLI release that ships that work. NozyWallet is an Orchard-first wallet built for Zebrad and lightwalletd with local witness derivation.
Context and links
- Forum thread — Ironwood: Verifying the Soundness of Zcash’s Circulating Supply
- ZIP 318 — wallet migration draft (PR #1317)
- NozyWallet v2.4.0 release — CLI binaries (Windows, Linux, macOS)
- IRONWOOD_WALLET_READINESS.md — full operator readiness log in the repo
Target mainnet NU6.3 activation: approximately 21 July 2026 (miner timeline; final activation height pending in zcash_protocol).
The migration question
Ironwood is not just a new pool name. NU6.3 introduces a new shielded pool, V3 notes, V6 transaction semantics, and a wallet migration story (ZIP 318) written to protect privacy during the move from Orchard.
NozyWallet is already Orchard-first. The design question was separate from “Orchard vs Sapling vs transparent”: how should we move existing Orchard funds into Ironwood without turning a protocol upgrade into a wallet fingerprinting event?
Case breakdown (Cases 1–4)
Case 1 — Do nothing after activation
I could keep scanning and spending only Orchard notes after NU6.3 activation. That is the smallest engineering change, but it makes the wallet lag the network, leaves users on a legacy shielded path, and risks distinctive Orchard-only behavior after activation.
Conclusion: acceptable only as a short safety stop. Post-activation, Ironwood routing is the target.
Case 2 — Migrate everything immediately
I could spend all Orchard notes into Ironwood as soon as activation happens. Simple to explain, but weak for privacy: one-shot migration clusters notes, creates unusual transaction shapes, and removes user control over timing, fees, and network conditions.
Conclusion: too blunt for a privacy-first wallet except as an explicit emergency path.
Case 3 — ZIP 318-style scheduled turnstile migration
NozyWallet’s preferred path: Orchard spend → Ironwood output, planned in staged windows.
- ZIP 318 targets wallet migration behavior, not ordinary payments.
- Canonical power-of-ten denominations reduce amount fingerprints.
- Shared anchor-height buckets reduce timing fingerprints vs ad hoc sends.
- Persisted schedules support recovery from missed windows.
- User consent stays explicit before any migration broadcast.
Conclusion: the right default — Ironwood migration is a privacy operation, not just a balance transfer.
Case 4 — Post-migration normal sends
After migration, normal shielded sends should use Ironwood for recipient and change. Otherwise the wallet keeps recreating the same migration problem with new Orchard outputs.
Conclusion: migration is not complete until normal send routing stops producing new Orchard-only wallet state. Phase 3.4 shipped on testnet; v2.4.0 published the CLI.
Product decision
- Detect NU6.3 activation and Ironwood-capable RPC.
- Show Orchard and Ironwood pool status separately.
- Plan the ZIP 318-style schedule before broadcasting.
- Require user consent before migration execution.
- Prefer scheduled turnstiles over one large migration.
- Route post-activation normal sends to Ironwood once V6 builder support is validated.
Testnet validation (summary)
I ran the full operator loop on a dedicated testnet profile (Ironwood Testnet) against WSL Zebrad and ironwood-valar lightwalletd — not as compile-only checks, but with confirmed transactions on chain.
Operator tooling
ironwood status / plan / preflight / migrate / broadcast
Not in v2.4.0 by design: desktop Send wiring, Keystone Ironwood hardware sign path, API server on releases. The CLI is the authoritative state machine; other surfaces should consume it rather than reimplement migration logic.
Reflection — As a junior mid-level wallet developer
Shipping Ironwood in NozyWallet was one of the most meaningful stretches of work in the project’s first year. The work sits on a real protocol transition in Zcash history and not a cosmetic version bump.
Taking an Orchard-first, Zebra-backed wallet through testnet from mainet because we built Nozywallet on mainnet no testnet into ironwood. From spendable Orchard notes, through turnstile migration, to a confirmed normal Ironwood send and felt like participating in the ecosystem’s next chapter rather than reading about it from the sidelines. No delays in Nozywallet process and we ready for mainnet soon this history in making and the world watching, I had to get on top of this migration to Ironwood.
What made the experience good
- Clear product cases. Cases 1–4 gave vocabulary for trade-offs. When testnet failed (empty Ironwood balance after turnstiles, missing witness hex, send blocked post-activation), we could name which case broke and fix the right layer.
- Evidence over optimism. Milestones tie to commands, TXIDs, block heights, and script output — important when building on pre-release librustzcash pins.
- Real infrastructure. WSL Zebrad, ironwood-valar lightwalletd, local witnesses, and the existing proving stack — integrated into a shielded-first wallet, not a demo.
- Release as closure. v2.4.0 turned months of case notes into binaries other developers can download.
As a mid-level wallet developer, Ironwood was the right difficulty: deep enough to force learning (domains, pools, V6 PCZT, migration windows), bounded enough to ship a CLI milestone before mainnet activation. Remaining work and desktop UX, hardware signers, full compact sync the extends a validated core instead of replacing a guess.
What comes next
- Mainnet week — upgrade Zebrad + LWD, confirm activation height, repeat operator loop on mainnet.
- Desktop / API — wire Send and migration UX to the CLI state machine.
- Keystone — Ironwood hardware sign path (software send validated).
- Compact sync — full scan over Ironwood actions beyond LWD smoke.
Closing
The case breakdown started as a privacy decision document. It ends as a release backed by testnet proof: NozyWallet can scan Ironwood, migrate Orchard funds through ZIP 318-shaped turnstiles, and send normally in the Ironwood pool from the CLI.
That is a good place to be three years into wallet development — and a solid foundation for mainnet.
NozyWallet · LEONINE-DAO ·
NozyWallet · Release