Commit Graph
2121 Commits
Author SHA1 Message Date
jwinterm e3ba9c7bad v5.0.2: hide hardware-restore option + version bump
- wizard: hide the hardware-device wallet option (wownero has no Ledger/Trezor
  support; inherited Feather cruft).
- bump version 5.0.1 -> 5.0.2.

v5.0.2 also rebuilds the Linux AppImage in an ubuntu:24.04 container (glibc 2.39)
so it runs on Ubuntu 24.04 / Mint / Debian — v5.0.1's AppImage was built on
glibc 2.43 and would not start elsewhere. No wallet-code change: wallets created
on pre-table-fix builds carry a stale restore height (blank balance); the fix is
to re-restore from seed.
v5.0.2
2026-06-25 09:19:19 -04:00
jwinterm 6cd7e8bad9 fix: regenerate stale restore-height table (fixes vanishing balance)
restore_heights_wownero_mainnet.txt was last updated 2023-12-15 (h587048).
For wallets created after that, RestoreHeightLookup::dateToHeight extrapolates
forward at 288 blk/day; 2.5y past the last anchor overshoots the chain tip, so
the computed restore height lands ABOVE the current height. The wallet then
skips output-scan on every real block => received funds are never recorded,
while the tx pool still shows them: coins appear pending, then vanish.

Same bug class as 8686e9bf (which fixed the block-time CONSTANT from monero's
120s/720-per-day to wownero's 300s/288); here the constant was right but the
TABLE went stale. Regenerated with contrib/generate-restore-heights/heights.py
to h849000 (2026-06-19). Verified dateToHeight < tip for all dates 2019..today.
v5.0.1
2026-06-23 21:25:18 -04:00
jwinterm 0d5d745311 v5.0.1: Windows QtQuick crash fix + node/Tor lifecycle overhaul
Windows crash chain (exposed by the embedded-node default):
- main.cpp: force the QtQuick software renderer. The Mining tab's QQuickWidget
  drove the default RHI/GL path and faulted (0xc0000005) on broken-GL hosts
  (VirtualBox VMSVGA), crashing the app and orphaning the embedded node.
  Real hardware was unaffected.
- ChildProcessGuard + DaemonManager/TorManager: kernel-level die-with-parent
  (Windows Job Object KILL_ON_JOB_CLOSE / Linux PR_SET_PDEATHSIG) so the
  embedded wownerod and bundled tor never survive a wowlet exit or crash.
- DaemonManager: verify-before-adopt via get_info (nettype/height) instead of
  trusting a bare open RPC port, so a stale/orphan node is never adopted.

Node/Tor lifecycle + remote-node connectivity:
- config: torPrivacyLevel default -> allTorExceptNode. NEVER sync blocks over
  Tor; the wallet's node connection is always clearnet. Tor is only for tx
  broadcast, so remote nodes work with or without Tor.
- nodes: add Nodes::reconnect() (clear failure blocklist + force reconnect);
  node/Tor toggle handlers use it so a transient outage no longer strands the
  wallet at "Disconnected".
- MainWindow/SettingsDialog: reconnect on node/Tor toggle and on the async
  daemonStateChanged (closes the start() race; a freshly-toggled local node
  connects immediately).
- TorManager: reset retry/unpack state in init() so a system<->bundled Tor
  re-toggle can start again; quiesce on stop(). Linux unpackBins() rework
  (mkpath + presence-based unpack + graceful return-false), getVersion() arg
  fix, and a missing-binary start guard.
- build.yml: derive TOR_VERSION from the embedded tor binary (a hardcoded
  bundle number made unpackBins rewrite Tor every launch).
- depends/funcs.mk: confine cross-cmake find_package to the depends sysroot so
  host -dev libraries don't leak into the build.
2026-06-23 17:45:39 -04:00
jwinterm a1ae9735d5 release: bump version to 5.0.0 + defer arm64/riscv64 (continue-on-error)
v5.0.0 ships Windows x86_64 + Linux x86_64. arm64/riscv64 (Qt static-link gap) and macOS deferred to v5.0.1. continue-on-error keeps the cross job from failing the release run while I keep iterating it.
v5.0.0
2026-06-21 21:12:20 -04:00
jwinterm 57531a9d09 depends(libxkbcommon): explicit xkb extension paths for cross + cache restore-keys
libxkbcommon 1.13.1 meson.build adds empty pkgconfig vars when xkeyboard-config is absent from the cross sysroot (XKEYBOARD_CONFIG_ROOT='') while has_extensions_directories is true -> meson hard-errors at pkgconfig.generate. Pass non-empty -Dxkb-config-(un)versioned-extensions-path.

Add restore-keys to all 4 depends cache restores: a busted exact key (any packages/* edit) now falls back to the newest prefix match, so make resumes from the partial built tree instead of rebuilding the static-Qt6 toolchain from scratch.
2026-06-21 15:09:15 -04:00
jwinterm 82bb6460a7 depends(wayland): native wayland-scanner.pc is in the multiarch pkgconfig dir
The find debug showed wayland-scanner.pc at <build_prefix>/lib/x86_64-linux-gnu/pkgconfig (multiarch layout), not lib/pkgconfig or share/pkgconfig. Add that path to the pkg-config vars so cross-meson finds the native scanner. Keeps native Wayland support (no disabling).
2026-06-21 12:34:48 -04:00
jwinterm 7e936ba968 depends(wayland): one-line config_cmds (fix recipe parse) + find debug 2026-06-21 11:13:34 -04:00
jwinterm a4e38fc712 depends(wayland): search share/pkgconfig for native wayland-scanner (+ debug find)
wayland-scanner.pc is a noarch .pc -> build_prefix/share/pkgconfig, not lib/pkgconfig, so the earlier PKG_CONFIG_PATH_FOR_BUILD missed it. Add share/pkgconfig to LIBDIR/PATH/PATH_FOR_BUILD + a find to log the real location.
2026-06-21 09:38:43 -04:00
jwinterm 1529edc432 depends(wayland): expose native wayland-scanner to cross meson
Target wayland (-Dscanner=false) resolves the host scanner via dependency(..., native: true), which uses meson's BUILD-machine pkg-config — not pointed at build_prefix. Add PKG_CONFIG_PATH_FOR_BUILD=build_prefix + a [binaries] wayland-scanner in the cross-file. Fixes 'Dependency wayland-scanner not found' on aarch64/riscv64.
2026-06-21 07:54:52 -04:00
jwinterm 97a4304add ci(linux-cross): add meson + ninja-build for native_wayland (wayland is linux-only) 2026-06-20 23:35:06 -04:00
jwinterm b353b08ba2 ci: add linux arm64 + riscv64 depends AppImage builds (matrix)
Cross-build wowlet via depends for aarch64/riscv64 (reusing the zeromq/ICU/qt/testlib fixes), embed the matching wownerod + depends-built tor, package an AppImage via contrib/AppImage/build-appimage.sh (its hardcoded /feather runtime path relativized to GITHUB_WORKSPACE). Cached per-host, save-always.
2026-06-20 23:22:59 -04:00
jwinterm b422ba383a monero: bump submodule — link ICU only when depends ships it (fixes mingw cross link) 2026-06-20 22:51:52 -04:00
jwinterm c87d807443 cmake: don't link ICU/iconv on cross-builds (vestigial without system boost)
feather.exe links ${ICU_LIBRARIES}, set by the monero submodule's static-build branch assuming depends ships ICU + libiconv. Feather's depends doesn't, and its depends boost is --without-icu, so nothing references ICU/iconv symbols — the mingw link failed on missing -licu*/-liconv. Clear ICU_LIBRARIES when CMAKE_CROSSCOMPILING; native (system boost, built with ICU) unchanged.
2026-06-20 22:20:35 -04:00
jwinterm f93b3f705e depends: add zeromq (wownero needs zmq.h) + cache depends save-always
wowlet.exe reached 27% then hit 'zmq.h: No such file' — feather strips zeromq from depends (its wallet does not use zmq) but wownero cryptonote_core/net does. Port the wownero zeromq.mk + patch, register it in packages. Also switch the depends caches to restore + save(if:always) so the completed toolchain banks even when the wowlet build fails (auto post-save is skipped on job failure).
2026-06-20 19:33:43 -04:00
jwinterm 95a0fa3a3c depends(native_qt): keep testlib enabled so the host builds qmltestrunner
Cross qtdeclarative builds tools/qmltestrunner (QtQuickTest, needs testlib) and demands a matching HOST tool; the host's -no-feature-testlib left it without one, failing 'Configuring qtdeclarative' with 'Failed to find host tool Qt6::qmltestrunner'.
2026-06-20 16:38:28 -04:00
jwinterm 6a1fc084c2 ci(windows): -j2 + 10G swap so the static Qt6 depends build fits 16G RAM
Disk fix let it run 50min (vs ~10min) before the runner lost communication again -> OOM during the parallel Qt6 compile, not disk. Drop both builds to -j2 and add a 10G swapfile for headroom. Slower but should complete + cache depends for fast future runs.
2026-06-20 15:11:26 -04:00
jwinterm 6cc92a5bc4 ci(windows): drop container + free disk so the depends build fits the runner
First run was killed mid depends build (runner lost communication = CPU/Memory/disk starvation). Inside a container we cannot reclaim the runner's pre-installed bloat, leaving the static-Qt6 build only ~14G. Run on ubuntu-latest directly, free ~25G (dotnet/android/ghc/CodeQL), sudo the apt steps.
2026-06-20 14:43:39 -04:00
jwinterm 626d1a6ab7 ci: add Windows x86_64 cross-build job (mingw depends)
Builds wowlet.exe via contrib/depends (static Qt6 + tor), embeds wownerod.exe from the wownero mingw release, packages a .zip. Caches the depends tree so only the first run pays the ~1h toolchain cost. Tor shipped loose next to the exe (TOR_INSTALLED).
2026-06-20 13:41:48 -04:00
jwinterm 3d1424869d wowlet: clearer Tor status for external Tor + lift mining stats into the dark bar
- TorInfoDialog: when wowlet reuses an already-running external/system Tor (isLocalTor), show 'Connected (using external Tor)' instead of the misleading 'Not running'.

- mining.qml: raise + tighten the Block Height / Sync Progress block so it sits in the dark header bar instead of clipping the scene art (first pass, may need a small tweak).
2026-06-20 12:09:43 -04:00
jwinterm 83a4582266 wowlet: fix tx-proxy port, add configurable node data-dir, mining sync hint
- DaemonManager --tx-proxy now uses the Tor that is actually running (torManager()->isLocalTor()) instead of the stored useLocalTor preference, which selected the wrong SOCKS port (managed 19450 vs system 9050) and silently stalled outbound tx broadcasts.

- Embedded node: nodeDataDir setting points wownerod at an existing chain (e.g. ~/.wownero) to skip a full re-sync; empty keeps the managed isolated default.

- mining.qml: tell the user mining waits until the node is synced.
2026-06-20 08:58:47 -04:00
jwinterm cae730ff27 ci: bundle Tor in the wowlet AppImage (embed tor binary + libs)
So wowlet works for users without a system Tor. The build fetches the
tor-expert-bundle (linux x86_64), patchelfs the tor binary + its libs to
$ORIGIN, and passes -DTOR_DIR/-DTOR_VERSION so cmake embeds them into
:/assets/tor and sets HAS_TOR_BIN=1. wowlet then extracts + manages its own
Tor daemon -> remote node connections route over Tor out of the box.
2026-06-20 06:23:04 -04:00
jwinterm 35af2db2ef wowlet: keep wownero clearnet nodes usable in Tor mode (fix empty remote-node list)
feather's websocket-node filter drops every non-onion node once the Tor privacy
level flips to onion-preferred (after initial sync) — it assumes an onion node
ecosystem. wownero's public nodes are clearnet, so the Settings list went empty
and autoConnect had nothing eligible -> Disconnected. Keep clearnet nodes
eligible in every proxy mode (routed over Tor's SOCKS proxy when Tor is on, so
still private); only hide onion/i2p nodes when their anonymity mode isn't active.
2026-06-20 06:05:47 -04:00
jwinterm ea22d5dbe4 wowlet: pull the live remote-node list from wownero.org/nodes
The feather websocket is disabled (no WOW backend); replace it with a Tor-routed
HTTP poll of https://wownero.org/nodes/api/nodes/wallet (the live, health-checked
node-map feed). Builds the managed node list from the feed's plain-http nodes
(skips SSL-only nodes feather can't reach), falls back to the bundled nodes.json
if the feed is unreachable, refreshes hourly. So users who don't run a local node
get a fresh, working remote-node list instead of a stale hardcoded one.
2026-06-19 22:02:53 -04:00
jwinterm 4d5805a75c wowlet: fix remote-node connect when the built-in node is off. (1) nodes.cpp loadConfig: when the websocket discovery is disabled, ignore the cached ws node list (stale / polluted with monero nodes from an early build) and use the bundled wownero list. (2) nodes.json: managed clearnet list -> the 4 current healthy wownero nodes (node2/node3.monerodevs.org, spippolatori.it, wownerod.foolsump.com) 2026-06-19 16:39:59 -04:00
jwinterm 3eab1e14fa wowlet: first-run 'be your own node' welcome + deferred startup + non-blocking node toggle. On first launch a welcome dialog lets the user choose own-node vs remote BEFORE any node starts (gated on firstRun; later launches use the saved choice); node start moved past it in WindowManager. Settings toggle now stops wownerod non-blocking (no UI freeze while it flushes LMDB). Copy: 'many recommended', no em-dash 2026-06-19 16:02:17 -04:00
jwinterm 487875ee9e wowlet: local/remote node toggle in Settings -> Network. Checkbox 'Run your own Wownero node (much recommended)' + doge-y copy on privacy/network-health; toggling live-starts/stops the embedded wownerod and reconnects (autoConnect honours runLocalNode: local when on, chosen remote when off); remote list greys out while the built-in node is active 2026-06-19 14:53:42 -04:00
jwinterm 527bcfae57 wowlet: wownero loose-string sweep + P0 send fix. Bump monero submodule -> gui@1ed9d64c (drops feather's monero-checkpoint check_rct_distribution() that made every send throw 'Output distribution size too small'). feather-src: local-node probe + wizard port 18081->34568 (Utils.cpp getDefaultRpcPort, PageNetwork.ui); confirmationsRequired + lock display 10->4 = wownero spendable age (TransactionRow, TxInfoDialog, BalanceDialog, SendWidget); amount precision 12->11 (config, SettingsDialog); tx-pool backlog x2->x5 (5-min blocks); revuo + CCS off default plugins 2026-06-19 14:10:58 -04:00
jwinterm 8686e9bfe8 fix: vanishing balance — RestoreHeightLookup used monero block time (120s/720-per-day) to extrapolate the date->height table past 2023, computing restore heights ~400k blocks INTO THE FUTURE for 2026 wallets. Restore height > chain tip => wallet skips output-scan on every real block => received funds never recorded (pool scan unaffected, hence pool-shows-then-vanishes). Use wownero 300s/288-per-day. Also: block explorers -> explore.wownero.com / explore.wowne.ro 2026-06-19 10:08:46 -04:00
jwinterm 519187b8a1 depends: build qtdeclarative (Qt Quick/QML) in cross + host Qt — required for the mining tab on every depends cross-target (upstream Feather is widgets-only; native build only worked via distro QML) 2026-06-19 08:30:28 -04:00
jwinterm 35628cc5d8 wowlet: mining tab uptime — anchor start-time on mining transition, emit HH:MM:SS via uptimeChanged (was never emitted → stuck at '-') 2026-06-19 08:30:28 -04:00
jwinterm 0544837cff fix: white mining tab — remove vestigial 'import QtQuick.Controls' (eagerly registers Calendar singleton → QtQuick.Templates plugin missing → whole QML fails to load). Also make QML bundling complete: blanket-copy QtQuick/QtQml trees + ldd-resolve plugin .so lib deps into usr/lib, guard against re-adding Controls 2026-06-19 07:41:03 -04:00
jwinterm be3de5a4ce fix: bundle QtQml.WorkerScript in AppImage — qmlimportscanner skips qmldir transitive 'depends', so copy QtQml tree in explicitly between linuxdeploy populate + appimagetool package 2026-06-19 07:04:38 -04:00
jwinterm 43f7cc4e7a fix: SIGILL on launch — pin -DARCH=x86-64 for the Linux build instead of wownero's default ARCH=native (CI runner CPU baked in instructions older user CPUs lack) 2026-06-18 20:50:18 -04:00
jwinterm feeafbfdce wowlet: broadcast txs over Tor via wownerod --tx-proxy (gated on HAS_TOR_BIN; Config::broadcastOverTor default on) — hides tx origin IP, complements embedded-node receive privacy; activates when Tor is bundled (depends build) 2026-06-18 20:34:14 -04:00
jwinterm bf2d4e39bf wowlet: fix white mining tab — AppImage now bundles QtQuick QML modules (apt qml6-module-*, QML_SOURCES_PATHS for linuxdeploy-plugin-qt) + tls backend for HTTPS prices; QML cleanup (variant→var, child-id ref) 2026-06-18 20:22:01 -04:00
jwinterm 75fba57fc5 wowlet: About dialog — codeberg.org/wownero/wowlet, Telegram (t.me/wownero), Matrix (#wownero-gen:wowne.ro) 2026-06-18 20:00:44 -04:00
jwinterm 1aa34f0d75 wowlet: fix mining-tab white screen (root anchors.fill→size), visible radio selectors (wow.qss :/wow/→:/dark/), wizard+window titles, debrand live strings (tray/tor/webcam), About+website URLs→wownero, config dir →wowlet (also fixes stale Monero wallet dir) 2026-06-18 19:50:55 -04:00
jwinterm 421f57832c wowlet: fix mining-tab QQuickItem connect; wizard overhaul — skip first-run node-picker (embedded node default), disable feather-server websocket 2026-06-18 19:13:18 -04:00
jwinterm 341be7f7e4 fix: mining methods are on WalletManager not Wallet — delegate + setDaemonAddress to embedded node (fixes red builds) 2026-06-18 18:59:27 -04:00
jwinterm e0c06d6526 wowlet: pixel-art mining tab — port mining.qml (Qt6) + 25 assets, MiningWidget/MiningBackend hosting QQuickWidget, wired to embedded-node solo miner (hashrate/sync feedback); adds Qt6 Quick 2026-06-18 18:51:05 -04:00
jwinterm ccd53f59af wowlet: branding sweep — XMR→WOW, title/dir, .ui+wizard text Feather→wowlet/Monero→Wownero, flip+recolor sidebar (M→W, pink/yellow) 2026-06-18 18:27:28 -04:00
jwinterm 640a478b1b wowlet: solo-mining toggle — Wallet startMining/stopMining (RandomWOW via embedded node) + Wallet-menu action 2026-06-18 17:06:06 -04:00
jwinterm 5206dbdf8a ci: package wowlet as a portable Linux AppImage (linuxdeploy + qt; bundles Qt6, node already embedded) 2026-06-18 16:47:37 -04:00
jwinterm 28c04e8e6a ci: upload wowlet binary as artifact (downloadable from the run) 2026-06-18 16:43:02 -04:00
jwinterm 15a9a4ba20 ci: embed wownerod into wowlet (single-file build) — download release wownerod, pass WOWNEROD_DIR 2026-06-18 11:20:59 -04:00
jwinterm 3e9743a9c4 wowlet: embed wownerod (WOWNEROD_DIR, mirrors Feather's Tor embedding) — single self-contained binary; DaemonManager unpacks it 2026-06-18 11:16:13 -04:00
jwinterm d03fe4994d wowlet: wallet connects to the embedded local node by default (Nodes::autoConnect) 2026-06-18 08:28:15 -04:00
jwinterm e9ecb63a9b wowlet: embedded wownerod DaemonManager (modeled on TorManager) — spawn/monitor/graceful-stop, run-own-node default 2026-06-18 08:23:02 -04:00
jwinterm 22553065e3 wowlet: wownero mainnet restore heights (correct wallet restore scan start) 2026-06-18 08:01:59 -04:00
jwinterm c343ffcc55 wowlet: WOW/USD price feed from neroswap (HTTP poll); fix fiat conversion to use WOW not XMR 2026-06-18 07:45:54 -04:00