From 6ca1a1d6799474f8ca977b93ab630af7ace879c2 Mon Sep 17 00:00:00 2001 From: Victorio Nascimento <155357371+Vic-Nas@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:45:28 -0400 Subject: Add Linux GUI installer via Wine (#3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Linux GUI installer via Wine * Fix launcher creation and add BTF_RELAY env var support * Pool server, Linux GUI, unified binary, README update * Root Makefile: make linux / make windows, cleaner README * Remove headless.cpp * Fix XPM color count mismatch causing toolbar image errors on Linux * XPM icons: same code on Windows and Linux, no ifdefs around image loading * Fix GTK icon crash and Linux printf format * btfrv: 10s socket timeout on relay connects * Faster peer discovery: more dials per pass, shorter backoff and sleep * Parallel btf peer connections * Fix GetMyExternalIP - was disabled, now uses modern IP echo services * Fix tunnel disconnect on idle and restore external IP detection * Filter stale Nostr descriptors * Sort peers by freshness, fresh first * Pool: add .btf Stratum listener — miners connect via rendezvous, no port forwarding needed * btf pool: self-replacing listeners, one per relay, no queuing between miners * Mining modes: solo/operator/participant — pool server on-demand, participant Stratum client * Status bar: show external IP and .btf address * README: clean rewrite, concept-first, minimal * make linux produces AppImage * make linux produces AppImage * Pool dashboard: connect instructions, tabs, share bars * Perf fixes: GetMyExternalIP threaded, btf listener counted * Perf fixes: GetMyExternalIP threaded, btf listener counted * Fix pool payouts: defer until coinbase maturity * Pool: clean mode switching, IP warning * Pool: clean mode switching * Fix gPoolRunning: remove static * AppImage: use real icon from bitcoin.ico * Fix exit crash; Mining menu * Fix exit crash; Mining menu * Fix exit crash; Mining menu * Fix exit crash; Mining menu * Fix exit crash; Mining menu * Windows build: use mingw32-make * Windows build: simpler make invocation * Add deps-windows target * Windows build fixes * Windows build fixes * Windows makefile: fix obj dir * Windows: output to repo root * Windows: bundle DLLs into zip * Replace wxWidgets with ImGui+GLFW: same build on Linux and Windows * Fix %I64d that slipped back through rebase (main.h, net.h) * MinGW: add _mkdir shim for non-MSVC Windows; fix %I64d * Fix gPoolRunning extern outside ifndef _WIN32 * Remove -lboost_system: boost is header-only in this codebase * Status bar: copy buttons for IP and .btf address * Windows: add app icon via windres, strip wx stuff from rc file * Clean GUI: single Options menu item, bigger font, better spacing, cleaner options dialog; update README * GUI: embed Roboto font at 16px for clear readability on all platforms * Windows: windres depends on obj dir target * Fix balance hidden off-screen: put on own line below address bar * Windows: inline mkdir in every rule, remove dir target that confused make * Windows: move all target to top so it's the default rule * Fix pool server not starting: always start when operator selected, re-sync dialog state on open * Write debug.log to data directory (AppData/Roaming/Bitflash on Windows) * Participant miner: use wallet address as username so payouts go to wallet * Add .gitattributes to lock LF line endings, prevent CRLF drift * Refactor pool mining to btf-only transport * Persist pool settings and startup wiring * Prune stale peers and expose pool queries * Fix build regressions and add CLI mode/arg parity * Fix rpc miner stats declaration order * Centralize pool runtime extern declarations * Separate operator/participant dashboards and restore peer stats * Add live telemetry strip and clearer per-mode runtime metrics * Reduce mining dashboard clutter and remove manual pool entry * Count only authorized pool miners * Seed initial pool job on startup * Use a real share target for pool work * Switch pool accounting to round-based shares * Fix nostr pool announcer stats call sites * Fix pool stats definition order * Improve pool worker status display * Add mutex include for participant status * Replace ImClamp in dashboard layout * Clarify participant work status * Log participant status transitions * Reduce peer discovery log noise * Add participant status badge * Track participant auth acknowledgements * Log and validate pool job delivery --------- Co-authored-by: Bitflash Pool Dev --- src/headless.cpp | 180 ------------------------------------------------------- 1 file changed, 180 deletions(-) delete mode 100644 src/headless.cpp (limited to 'src/headless.cpp') diff --git a/src/headless.cpp b/src/headless.cpp deleted file mode 100644 index cdb8ac9..0000000 --- a/src/headless.cpp +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (c) 2026 Bitflash developers -// Distributed under the MIT/X11 software license. -// -// Headless entry point for the Linux node/miner `bitflash-node`. Replaces the -// wxWidgets GUI (ui.cpp) with a command-line daemon: it loads the chain and -// wallet, starts the P2P/Nostr node (which auto-discovers .btf peers through -// the rendezvous relay), and optionally mines with RandomX. No GUI, no wx. -// -// ./bitflash-node -gen mine with the CPU, auto-connect peers -// ./bitflash-node -gen -datadir=/path use a specific data directory -// ./bitflash-node -rvrelay=host:port use a specific rendezvous relay -// ./bitflash-node -connectbtf=.btf pin a specific peer -// ./bitflash-node -solomine -gen mine without waiting for a peer (test) - -#include "headers.h" -#include - -// ---- UI hooks the core references, provided here as headless equivalents ---- - -// The core asks the GUI to repaint on new blocks/transactions; nothing to do. -void MainFrameRepaint() {} - -// Wallet address book -- defined in ui.cpp on Windows; the core (db.cpp) reads -// and writes it, so the headless build must provide the definition. -map mapAddressBook; - -// Format a unix timestamp for transaction listings (ui.cpp used wxDateTime). -string DateTimeStr(int64 nTime) -{ - time_t t = (time_t)nTime; - struct tm* ptm = localtime(&t); - if (!ptm) - return ""; - char buf[64]; - strftime(buf, sizeof(buf), "%m/%d/%y %H:%M", ptm); - return string(buf); -} - - -// ---- argument parsing (mirrors ui.cpp's ParseParameters) ---- -static map ParseParameters(int argc, char* argv[]) -{ - map mapArgs; - for (int i = 0; i < argc; i++) - { - string s = argv[i]; - string val; - size_t eq = s.find('='); - if (eq != string::npos) - { - val = s.substr(eq + 1); - s = s.substr(0, eq); - } - for (size_t j = 0; j < s.size(); j++) - s[j] = (char)tolower((unsigned char)s[j]); - if (!s.empty() && s[0] == '-') - s[0] = '/'; - mapArgs[s] = val; - } - return mapArgs; -} - - -static void HandleSignal(int) -{ - fShutdown = true; -} - - -int main(int argc, char* argv[]) -{ - map mapArgs = ParseParameters(argc, argv); - - if (mapArgs.count("/?") || mapArgs.count("/help") || mapArgs.count("/h")) - { - fprintf(stderr, - "Bitflash headless node\n" - "Usage: %s [options]\n" - " -gen generate coins (mine with RandomX)\n" - " -datadir= data directory (default ~/.bitflash)\n" - " -port= P2P listen port (default 8433)\n" - " -rvrelay=host:port rendezvous meeting relay (has a seed default)\n" - " -announcerelay=h:p announce a relay you run so nodes discover it\n" - " -connectbtf=.btf keep a connection to a specific .btf peer\n" - " -solomine mine without waiting for a peer (testing)\n" - " -debug verbose logging\n", - argv[0]); - return 0; - } - - // Parameters (same set the Windows UI honors) - if (mapArgs.count("/datadir")) - strSetDataDir = mapArgs["/datadir"]; - if (mapArgs.count("/port")) - nListenPort = htons(atoi(mapArgs["/port"].c_str())); - if (mapArgs.count("/proxy")) - addrProxy = CAddress(mapArgs["/proxy"].c_str()); - if (mapArgs.count("/rvrelay")) - vBtfMeetingRelays = { mapArgs["/rvrelay"] }; - if (mapArgs.count("/announcerelay")) - strBtfAnnounceRelay = mapArgs["/announcerelay"]; - if (mapArgs.count("/connectbtf")) - strBtfConnect = mapArgs["/connectbtf"]; - if (mapArgs.count("/debug")) - fDebug = true; - if (mapArgs.count("/solomine")) - fSoloMineTest = true; - if (mapArgs.count("/gen")) - fGenerateBitcoins = mapArgs["/gen"].empty() ? true : atoi(mapArgs["/gen"].c_str()); - - printf("\nBitflash headless node starting\n"); - - // - // Load data files (mirror of the Windows OnInit2 startup) - // - printf("Loading addresses...\n"); - if (!LoadAddresses()) - printf("Error loading addr.dat\n"); - - printf("Loading block index...\n"); - if (!LoadBlockIndex()) - { - printf("Error loading blkindex.dat\n"); - return 1; - } - - printf("Loading wallet...\n"); - if (!LoadWallet()) - { - printf("Error loading wallet.dat\n"); - return 1; - } - - printf("Done loading. nBestHeight=%d, wallet keys=%d\n", - nBestHeight, (int)mapKeys.size()); - - // Rebroadcast any wallet transactions not yet in a block - ReacceptWalletTransactions(); - - // - // Start the node (P2P + Nostr discovery + .btf rendezvous) - // - string strErrors; - if (!StartNode(strErrors)) - { - printf("StartNode failed: %s\n", strErrors.c_str()); - return 1; - } - - // - // Start mining if requested - // - if (fGenerateBitcoins) - { - if (_beginthread(ThreadBitcoinMiner, 0, NULL) == (uintptr_t)-1) - printf("Error: _beginthread(ThreadBitcoinMiner) failed\n"); - else - printf("Mining enabled (RandomX, CPU)\n"); - } - else - { - printf("Mining disabled (pass -gen to mine)\n"); - } - - // - // Run until interrupted - // - signal(SIGINT, HandleSignal); - signal(SIGTERM, HandleSignal); - printf("Bitflash node running. Press Ctrl-C to stop.\n"); - - while (!fShutdown) - Sleep(500); - - printf("Shutting down...\n"); - StopNode(); - Sleep(500); - printf("Bitflash node stopped.\n"); - return 0; -} -- cgit v1.2.3