You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The enroll anti-flood proof-of-work is ~1M SHA-256 hashes (20-bit difficulty).
Solving it in JS on Hermes takes many seconds AND saturates the single JS
thread, so "Connecting…" dragged, multi-hop (which solved twice, sequentially)
often hit the 40s watchdog ("Connection timed out. Try another location."), and
the UI felt janky mid-connect.
- core: `enroll` accepts an optional `powSolver` override (EnrollOptions).
- Android/iOS: native `solvePow` (Kotlin MessageDigest / Swift CryptoKit) loops
off the JS thread — ~100x faster, sub-second for 20 bits — mirroring core's
hasLeadingZeroBits contract exactly. Random start nonce (no replay).
- mobile: `lib/pow.ts` prefers the native solver, falls back to the JS solver
when absent; single-hop and both multi-hop enrolls use it. The two multi-hop
enrolls now run concurrently (Promise.all) so their solves overlap.
Also fixes a timing-flaky probe test (inject a clock into pingGateway instead of
measuring real setTimeout jitter).
UI:
- Boot: "Connecting to the decentralized Flux network…" + a "Powered by Flux"
footer (leads to runonflux.com); same attribution added to Settings.
- Settings tagline: "Decentralized WireGuard VPN on Flux Cloud."
- ConnectScreen is now scrollable with a floored orb area, so on short screens
the orb no longer overlaps the Fast / Multi-hop toggle.
0 commit comments