Hello everyone,
Been busy with making sure the goals in the roadmap are reach, Nym VPN is one of them so. It’s crazy cool this ties into early post like this The Nym mixnet for Network Privacy for Zcash Thank you to Harry and Mark at Nym for publishing the wallet integrator site at zcash-sdk.nym.com. The Ironwood turnstile makes migration amounts public by design; the hard problem left for wallets is attribution and who can join those amounts to a person, IP, or lightwalletd session. This what we ship so far and the SDK ticketbooks ready.
We treated hygiene as Priority 0 for the Nym workstream an it helps even when the user is on a local Zebrad and never opens a remote tunnel.
Landed in Nozy (defaults on):
-
Sync start obfuscation
Auto-resume rewinds a random overlap (default up to 128 blocks) and snaps down to a 256-block checkpoint (aligned with ZIP 318 anchor spacing). Explicit --start-height stays deterministic for debugging.
-
Randomized migrate-broadcast delay
Real ironwood broadcast sleeps a uniform 30–300s delay before submit (configurable). Dry-run still shows the policy without sleeping the full window in a misleading way for operators reading blockers.
-
Tip-sync decorrelation
When sync catches tip we record last_tip_sync_unix. Migrate-broadcast refuses if tip was caught fewer than 120s ago (configurable). This is the “do not broadcast on reaching the tip” rule as a hard gate, not a suggestion.
-
Operator surface
config.baseline_hygiene, nozy ironwood preflight notes, desktop/API baseline_hygiene_notes, and –skip-broadcast-hygiene for tests only.
Numbers are engineering defaults, not a claim of a measured anonymity set. Nym correctly leaves the quantitative sizing of overlap/checkpoint as an open question. We want community feedback if wallets should converge on shared defaults.
Nym’s writeup separates two layers cleanly, and that split should be normative for wallet work feedback will be good:
-
Transport: Hide the client from network observers and from the destination’s view of the real IP (mixnet for small sensitive submits; 2-hop dVPN for bulk compact sync on native apps).
-
Baseline hygiene: disciplines the Destination still sees: request content and wall-clock arrival. The network cannot do this part for you.
The threat
Inside a shielded pool, light servers do not learn amounts. At the Ironwood turnstile, amounts are public. If a wallet syncs and broadcasts in the clear (or even over a private path but with naive timing and exact resume heights), an L2 operator or correlated observer can still:
-
chain sync sessions via exact start heights,
-
join “this IP just caught the tip” to “this turnstile appeared,”
-
treat broadcast arrival time as a fingerprint even when packets were mixed in transit.
Canonical denominations and shared ZIP 318 buckets fix on-chain collision. They do not replace network hygiene. Happy to take technical pushback on the defaults