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.
Round each requested range's start down, and its end up, to grid multiples, so every wallet resuming in the same cell emits an identical request. This is a V3 (content / start-height) countermeasure against the destination (L2); it costs only re-downloaded cover 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 requested range (V3, content), above all its start height, the fix is to make ranges collide: quantize every requested range to a network-wide grid, so that every client resuming anywhere in the same grid cell emits exactly the same request.
The cost is re-downloaded cover blocks only: for catch-ups above a day, typically 1.5x to 2x the blocks actually needed, never more than 3x; below a day the cost is bounded in absolute terms, at most one grid cell (~0.5 MB of compact blocks).
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.
The parameters are part of the protocol, not per-wallet tuning: the mechanism works by every wallet emitting the identical rule.
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.