Recommended Architecture for Native App Wallets
The most practical target is the hybrid, deployable now: bulk sync over the dVPN, ideally with exit rotation; broadcasts, t-address queries and other small sensitive requests over the mixnet with an IPR session per request, or to an SP-integrated lightwalletd where available; taking into account the scheduling discussed in Section 5. This is the configuration we recommend implementing for the migration.
Block sync (dVPN) uses a single exit gateway; tx broadcasts (mixnet) fan out across several exit gateways — an IPR session per request — all reaching one lightwalletd. Mixnet responses flow back to the client through the mixnet.
Bulk block sync over fast dVPN; tiny, timing-sensitive tx broadcast over the mixnet — from one wallet process. See the full hybrid scenario for the per-actor assessment.
Operator checklist
An IPR session per request, or to an SP-integrated lightwalletd where available. This is what protects broadcast timing against network observers (L3L/L3G) and gives per-request unlinkability at the destination.
Bulk, bandwidth-bound sync over the fast dVPN, ideally with exit rotation per request. Hides the client IP from the destination.
Decorrelate broadcast times from sync milestones and never broadcast on reaching the tip. This is a V2 (timing) countermeasure against the destination (L2): the mixnet shapes packet timing in transit, but the destination still sees the broadcast's wall-clock arrival time, so only the wallet can fix it.
Start a random number of blocks before the true resume point (or snap the start down to a standard checkpoint). This is a V3 (content / start-height) countermeasure against the destination (L2); it costs only re-downloaded blocks.
Access to the Nym network — in both dVPN and mixnet mode — requires NYM for bandwidth credentials. Acquire NYM ahead of time, e.g. swap ZEC for NYM with Nym’s swap API (https://swap.nym.com/).
Items 1–2 are Layer 1 transport choices; items 3–4 are Layer 2 baseline hygiene the wallet owes regardless of transport; item 5 is the prerequisite for both.
Baseline hygiene
Since the linking key is the start height (V3, content), it is enough to obfuscate the start. Both approaches cost only re-downloaded blocks and work in every configuration.
Broadcast timing is a V2 (timing) leak at the destination. In-transit mixing does not remove it — the destination still observes wall-clock arrival time — so the wallet must decorrelate broadcasts itself.
How aggressively to obfuscate the start is a design choice with a clear qualitative shape but no settled numbers. A larger overlap, or a wider checkpoint spacing, widens the collision window — and therefore the anonymity set of clients emitting an indistinguishable start — at the cost of more re-downloaded blocks. Both approaches cost only re-downloaded blocks and apply in every configuration.
Full detail on the Baseline hygiene page.
Recommendation from §6 of the network privacy analysis. Only native wallets get the full hybrid — see Web Wallet vs Native Wallets.