mixFetch / mixWS (WASM + TypeScript)

A drop-in fetch / WebSocket replacement — the only in-browser option. Routes over the 5-hop mixnet. Not for block syncs or short-timeout requests.

Runtime: TypeScript + WASM — WebView and web walletsMixnet (5-hop)Speed: Slow
Mixnet (5-hop)
Mix L1+50 msMix L2+50 msMix L3+50 msClientEntry GWExit GWlightwalletd
ClientEntry GWMixExit GWlightwalletd
Mixnet (5-hop) (mixing delays)

Latency model

Regional (40)Continental (120)Intercontinental (300)
Mixnet (5-hop)1.6 s (6 hops, 3 mix layers)
Geographic propagation (speed-of-light)Per-hop mixing delayReliable-channel ACK (return, geographic only)

What to send over it

  • Transaction broadcasts
  • Small requests

Notes

  • mixFetch replaces fetch; mixWS covers WebSocket interfaces
  • Do not send block syncs, heavy traffic, or time-critical (short-timeout) requests
  • Slow — it is a mixnet over 5 hops globally

Per-actor assessment (inherited)

The same four threat actors apply. This architecture inherits the assessment of the configuration it implements: Mixnet · single IPR. Layer-2 baseline hygiene remains the wallet’s responsibility.

Sees

  • Exit gateway / IPR IP
  • All requests and contents

Can't see

  • Client IP

Residual / countermeasure

  • The wallet's TCP connection to lightwalletd is an ordinary end-to-end connection arriving from the exit's IP. Per-packet unlinkability in transit does not translate into request unlinkability at the destination.
  • With a fixed IPR, P2 behaves exactly like the dVPN single-exit case — rotate the IPR per request to restore it (see the rotating-IPR scenario).

Sees

  • Constant-size packets at a Poisson rate with cover traffic
  • That the client uses the Nym mixnet

Can't see

  • Reliable destination, volume or activity

Sees

  • Per-packet timing (hampered by mixing delays and cover traffic)

Residual / countermeasure

  • The extent to which bulk transfers of many packets can be correlated over time is an open question. The mixnet is strongest for small, independent messages and weakest for bulk sync — one reason bulk sync does not belong on the mixnet (the other is throughput).
Baseline hygiene applies here tooWhatever the transport, the wallet still owes the same Layer-2 discipline: randomize request times, obfuscate the start height, and never broadcast on reaching the tip.Full detail →