Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
259 commits
Select commit Hold shift + click to select a range
b1971ea
Faster peer discovery: more dials per pass, shorter backoff and sleep
Vic-Nas Jul 26, 2026
aae3f56
Parallel btf peer connections
Vic-Nas Jul 26, 2026
b99e30f
Fix GetMyExternalIP - was disabled, now uses modern IP echo services
Vic-Nas Jul 26, 2026
b80cb56
Fix tunnel disconnect on idle and restore external IP detection
Vic-Nas Jul 26, 2026
3e8928e
Filter stale Nostr descriptors
Vic-Nas Jul 26, 2026
60fae86
Sort peers by freshness, fresh first
Vic-Nas Jul 26, 2026
6a76ec9
Pool: add .btf Stratum listener — miners connect via rendezvous, no p…
Jul 26, 2026
e7f81df
btf pool: self-replacing listeners, one per relay, no queuing between…
Jul 26, 2026
f9fc48d
Mining modes: solo/operator/participant — pool server on-demand, part…
Jul 26, 2026
a780566
Status bar: show external IP and .btf address
Jul 26, 2026
af09cda
README: clean rewrite, concept-first, minimal
Vic-Nas Jul 26, 2026
1c08c38
make linux produces AppImage
Vic-Nas Jul 26, 2026
6134532
make linux produces AppImage
Vic-Nas Jul 26, 2026
1ac33df
Pool dashboard: connect instructions, tabs, share bars
Vic-Nas Jul 26, 2026
0571281
Perf fixes: GetMyExternalIP threaded, btf listener counted
Vic-Nas Jul 26, 2026
1133e11
Perf fixes: GetMyExternalIP threaded, btf listener counted
Vic-Nas Jul 26, 2026
cacbd44
Fix pool payouts: defer until coinbase maturity
Vic-Nas Jul 27, 2026
88a3b69
Pool: clean mode switching, IP warning
Vic-Nas Jul 27, 2026
a690725
Pool: clean mode switching
Vic-Nas Jul 27, 2026
2a63129
Fix gPoolRunning: remove static
Vic-Nas Jul 27, 2026
4aa635c
AppImage: use real icon from bitcoin.ico
Vic-Nas Jul 27, 2026
353fb29
Fix exit crash; Mining menu
Vic-Nas Jul 27, 2026
d043eee
Fix exit crash; Mining menu
Vic-Nas Jul 27, 2026
9133bcf
Fix exit crash; Mining menu
Vic-Nas Jul 27, 2026
973d78c
Fix exit crash; Mining menu
Vic-Nas Jul 27, 2026
56442b3
Fix exit crash; Mining menu
Vic-Nas Jul 27, 2026
ea1d8f4
Windows build: use mingw32-make
Vic-Nas Jul 27, 2026
26354ea
Windows build: simpler make invocation
Vic-Nas Jul 27, 2026
6d0807c
Add deps-windows target
Vic-Nas Jul 27, 2026
178242a
Windows build fixes
Vic-Nas Jul 27, 2026
5509545
Windows build fixes
Vic-Nas Jul 27, 2026
0e90b32
Windows makefile: fix obj dir
Vic-Nas Jul 27, 2026
32379ec
Windows: output to repo root
Vic-Nas Jul 27, 2026
6d47632
Windows: bundle DLLs into zip
Vic-Nas Jul 27, 2026
83af065
Replace wxWidgets with ImGui+GLFW: same build on Linux and Windows
Jul 27, 2026
0e724e9
Fix %I64d that slipped back through rebase (main.h, net.h)
Jul 27, 2026
259a969
MinGW: add _mkdir shim for non-MSVC Windows; fix %I64d
Jul 27, 2026
a9fac4b
Fix gPoolRunning extern outside ifndef _WIN32
Jul 27, 2026
3525e4c
Remove -lboost_system: boost is header-only in this codebase
Jul 27, 2026
826d51b
Status bar: copy buttons for IP and .btf address
Jul 27, 2026
3b3b0d0
Windows: add app icon via windres, strip wx stuff from rc file
Jul 27, 2026
eeef4e4
Clean GUI: single Options menu item, bigger font, better spacing, cle…
Jul 27, 2026
4be73fb
GUI: embed Roboto font at 16px for clear readability on all platforms
Jul 27, 2026
993e927
Windows: windres depends on obj dir target
Jul 27, 2026
a41120e
Fix balance hidden off-screen: put on own line below address bar
Jul 27, 2026
3334fbd
Windows: inline mkdir in every rule, remove dir target that confused …
Jul 27, 2026
8d353ae
Windows: move all target to top so it's the default rule
Jul 27, 2026
b7bbf2e
Fix pool server not starting: always start when operator selected, re…
Jul 27, 2026
87a09e3
Write debug.log to data directory (AppData/Roaming/Bitflash on Windows)
Jul 27, 2026
a4c67f6
Participant miner: use wallet address as username so payouts go to wa…
Jul 27, 2026
8c47149
Add .gitattributes to lock LF line endings, prevent CRLF drift
Jul 27, 2026
4b9db07
Refactor pool mining to btf-only transport
Vic-Nas Jul 27, 2026
affbe54
Persist pool settings and startup wiring
Vic-Nas Jul 27, 2026
a5c934d
Prune stale peers and expose pool queries
Vic-Nas Jul 27, 2026
a9ccc6b
Fix build regressions and add CLI mode/arg parity
Vic-Nas Jul 27, 2026
8f4d245
Fix rpc miner stats declaration order
Vic-Nas Jul 27, 2026
d5feaf2
Centralize pool runtime extern declarations
Vic-Nas Jul 27, 2026
2eb037e
Separate operator/participant dashboards and restore peer stats
Vic-Nas Jul 27, 2026
f0b159b
Add live telemetry strip and clearer per-mode runtime metrics
Vic-Nas Jul 27, 2026
14cfe6b
Reduce mining dashboard clutter and remove manual pool entry
Vic-Nas Jul 27, 2026
6d945fc
Count only authorized pool miners
Vic-Nas Jul 27, 2026
a835d71
Seed initial pool job on startup
Vic-Nas Jul 27, 2026
2871224
Use a real share target for pool work
Vic-Nas Jul 27, 2026
ceaf876
Switch pool accounting to round-based shares
Vic-Nas Jul 27, 2026
3b8551a
Fix nostr pool announcer stats call sites
Vic-Nas Jul 27, 2026
a1beaae
Fix pool stats definition order
Vic-Nas Jul 27, 2026
3caa939
Improve pool worker status display
Vic-Nas Jul 27, 2026
24dd455
Add mutex include for participant status
Vic-Nas Jul 27, 2026
f186b46
Replace ImClamp in dashboard layout
Vic-Nas Jul 27, 2026
c6a0f23
Clarify participant work status
Vic-Nas Jul 27, 2026
92b5d2b
Log participant status transitions
Vic-Nas Jul 27, 2026
6be3b97
Reduce peer discovery log noise
Vic-Nas Jul 27, 2026
4218d75
Add participant status badge
Vic-Nas Jul 27, 2026
cea1ebc
Track participant auth acknowledgements
Vic-Nas Jul 27, 2026
64c6820
Log and validate pool job delivery
Vic-Nas Jul 27, 2026
62b41c8
Stop persisting mining mode/pool settings across restarts
claude Jul 27, 2026
b00bba9
Add explicit Relay mode as the new startup default
claude Jul 27, 2026
f3b8b65
Announce pool changes immediately instead of waiting up to 60s
claude Jul 27, 2026
4e4df8a
Give each pool miner a distinct extranonce2 so jobs no longer overlap
claude Jul 27, 2026
bec097d
Fix debug.log never being written on the real Windows build
claude Jul 27, 2026
960f7b0
Reduce base UI font size one more step (16px -> 14px)
claude Jul 27, 2026
054f3a4
Remove Start/Stop Mining button; mining state follows selected mode
Vic-Nas Jul 27, 2026
3b20827
Fix participant miner stuck waiting for notify after buffered multi-l…
Vic-Nas Jul 27, 2026
46b5e0a
Fix mining.submit rejecting every share due to wrong param-count check
Vic-Nas Jul 27, 2026
c6f60f8
Fix mining.submit rejecting legitimate shares that weren't also winni…
Vic-Nas Jul 27, 2026
3118f7e
Fix dead-peer dial priority: freshness sort was undone by full shuffle
Vic-Nas Jul 27, 2026
bc73dcd
Batch-resolve .btf descriptors to stop hammering public relays during…
Vic-Nas Jul 27, 2026
c3c17d4
Stop reconnecting to relays constantly: pool one persistent connectio…
Vic-Nas Jul 27, 2026
566c64c
Fix wallet crash on rejected send; remove legacy IP-based peer discovery
Vic-Nas Jul 28, 2026
fe7fedd
Raise peer connection target and add dial diversity; fix IPv4-only re…
Vic-Nas Jul 28, 2026
21838f5
Remove accidentally committed build binary; ignore src/bitflash
Vic-Nas Jul 28, 2026
f2307ef
Fix pool participants getting stuck after the first job
Vic-Nas Jul 28, 2026
02e360d
Diversify Nostr discovery relay list
Vic-Nas Jul 28, 2026
e0e4c30
Fix data race in RebuildJob: chain-state reads weren't holding cs_main
Vic-Nas Jul 28, 2026
366d9b0
add operator fee
Vic-Nas Jul 28, 2026
f923b5d
Add categorized, burst-collapsing logging for pool/worker/payout flow
Vic-Nas Jul 28, 2026
46d3b0c
Fix two bugs causing worker stuck + log bloat
Vic-Nas Jul 28, 2026
ece6e01
Fix log bloat, em-dashes, dead code, status bar, Connected/Detected p…
Vic-Nas Jul 28, 2026
c5c2495
Rewrite gui.cpp: proper fixed status bar, scrollable content child
Vic-Nas Jul 28, 2026
e0ed04a
Fix blocking bugs, dead code, pool/participant flow correctness
Vic-Nas Jul 28, 2026
8476e4d
Pool/participant: fix recv blocking, BroadcastJob mutex, listener spa…
Vic-Nas Jul 28, 2026
18ac6ff
Rewrite pool server: single event loop, no per-miner threads
Vic-Nas Jul 28, 2026
b06cd59
Thorough logging and correctness fixes across the full pool/participa…
Vic-Nas Jul 28, 2026
e5a7b06
Fix build error: ImGuiWindowFlags_NoBringToDisplayFront -> NoBringToF…
Vic-Nas Jul 28, 2026
a3aad3c
Remove duplicate status logging from SetParticipantMiningStatus
Vic-Nas Jul 28, 2026
7fa0c04
Implement vardiff: stable share rate instead of fixed difficulty
Vic-Nas Jul 28, 2026
30f2eb3
Fix share target mismatch: pool rejected shares it should have accepted
Vic-Nas Jul 28, 2026
955d7b3
Fix double broadcast, correct block reward calculation, improve payou…
Vic-Nas Jul 28, 2026
89d6df4
Fix 6 bugs found in full flow re-read
Vic-Nas Jul 28, 2026
e87a905
Fix share-target scale mismatch and dead pool hashrate reporting
Vic-Nas Jul 28, 2026
85b2218
Remove stale wxWidgets-era build files and orphaned assets
Vic-Nas Jul 28, 2026
c8e9493
Mine with RandomX fast (2GB dataset) mode instead of light mode forever
Vic-Nas Jul 28, 2026
311caac
Add vardiff stall watchdog: force difficulty down on zero shares, not…
Vic-Nas Jul 28, 2026
b29c4c7
Fix PrintException rethrow killing the whole node on any transient ex…
Vic-Nas Jul 28, 2026
792eb23
Push a fresh job immediately after any difficulty change, not just on…
Vic-Nas Jul 28, 2026
8d0a798
Build RandomX dataset before stratum handshake, not after
Vic-Nas Jul 28, 2026
02cb38b
Reset round shares on externally-found blocks, not just our own
Vic-Nas Jul 28, 2026
8f2cf7c
Show pool hashrate in participant view; show immature coinbase value …
Vic-Nas Jul 28, 2026
ebac203
Persist pending payouts to disk -- survive operator restarts
Vic-Nas Jul 28, 2026
836d930
Fix log escapes, stall timeout 90->45s, save-before-exec ordering, Im…
Vic-Nas Jul 28, 2026
2dd5ed9
Sort transactions by nTimeReceived not chain median time -- new txs a…
Vic-Nas Jul 28, 2026
7f4487e
Sort txs by chain depth not nTimeReceived -- survives resync, unconfi…
Vic-Nas Jul 28, 2026
779719c
Fix orphan block false-positive payout; meaningful tx status instead …
Vic-Nas Jul 28, 2026
f95d3c8
Show Orphaned status in red for orphaned coinbases; distinguish from …
Vic-Nas Jul 28, 2026
0eb58bc
Always reset round shares on new block -- external block left gHaveJo…
Vic-Nas Jul 28, 2026
65977eb
Connect to miners as p2p peers on authorize; send btf address as work…
Vic-Nas Jul 28, 2026
aa43d0e
Fix build: include btfaddr.h for btf::ParseAddress in rpc.cpp
Vic-Nas Jul 28, 2026
2d9c087
Participant connects to operator as p2p peer using already-resolved d…
Vic-Nas Jul 28, 2026
ca94295
Fix relay conflict: pool stratum waits when p2p node holds same relay…
Vic-Nas Jul 28, 2026
1307120
Remove duplicate pool announcement from ThreadNostrSeed -- ThreadBtfP…
Vic-Nas Jul 28, 2026
392913a
Fix relay conflict: ThreadBtfAccept yields to pool stratum in operato…
Vic-Nas Jul 28, 2026
372530e
Fix root cause: relay queues multiple registrations per pubkey (FIFO)…
Vic-Nas Jul 28, 2026
f57fef9
AcceptOneFn skips relay held by ThreadBtfAccept -- clean partition, n…
Vic-Nas Jul 28, 2026
9274b98
Fix stuck miners: ThreadBtfAccept pauses in operator mode, AcceptOneF…
Vic-Nas Jul 28, 2026
816f23a
Remove broken miner-initiated p2p connect -- shared pubkey relay can'…
Vic-Nas Jul 28, 2026
7fe6f5b
Add 15s startup delay to ThreadBtfAccept so pool sets gPoolRunning be…
Vic-Nas Jul 28, 2026
52de2c0
Security: fix OP_RETURN spend bypass, unbounded opcodes, duplicate-tx…
Vic-Nas Jul 28, 2026
5313bf0
nostr: fix relay connect stalls and CDN handshake rejections
Vic-Nas Jul 29, 2026
25dd532
util: rotate debug.log at 20MB instead of growing it forever
Vic-Nas Jul 29, 2026
6603fe8
nostr: shrink dead-peer visibility window instead of tracking failure…
Vic-Nas Jul 29, 2026
3b721c5
nostr: expire stale announcements on-relay, reject private-IP relay a…
Vic-Nas Jul 29, 2026
8ce24a4
util: widen log dedup window from 3s to 5min -- it wasn't collapsing …
Vic-Nas Jul 29, 2026
29c9232
net/rpc: merge p2p and pool accept into one shared pipeline
Vic-Nas Jul 29, 2026
cfa3580
main: restore participant-as-p2p-peer connect (816f23a), now safe
Vic-Nas Jul 29, 2026
2dbc418
review pass: fix a bottleneck I introduced, a misleading GUI number, …
Vic-Nas Jul 29, 2026
6578bd5
add 'make test': targeted tests for peer/pool accept logic
Vic-Nas Jul 29, 2026
d89705b
nostr: fix missing TLS certificate verification (was fully MITM-able)
Vic-Nas Jul 29, 2026
bc619bd
remove make test -- only covered logic, not the network behavior it n…
Vic-Nas Jul 29, 2026
c9aed6b
net: bind listen socket to 0.0.0.0 instead of gethostname-derived addr
Vic-Nas Jul 29, 2026
6de9115
nostr: ship a CA bundle so Windows TLS verification actually works
Vic-Nas Jul 29, 2026
5c068b9
net: legacy direct-IP listener off by default, real single-instance lock
Vic-Nas Jul 29, 2026
689e535
net: remove the direct-IP listener entirely (superseded by prior gating)
Vic-Nas Jul 29, 2026
d6dd806
nostr: replace hand-rolled WebSocket/TLS client with libwebsockets
Vic-Nas Jul 29, 2026
9bc3b81
build: auto-install MSYS2/UCRT64 dependencies before building
Vic-Nas Jul 29, 2026
4d816c4
build: fix the real Windows/Linux dep lists, remove dead build.sh
Vic-Nas Jul 29, 2026
0e69677
relay: harden btfrv.cpp, fix client-side timeout gap, deduplicate rel…
Vic-Nas Jul 29, 2026
a7189f0
util: route error() through the same dedup as LogPrint
Vic-Nas Jul 29, 2026
3f93155
net: compact block relay (BIP152-style), backward compatible with old…
Vic-Nas Jul 29, 2026
7d952b2
windows: package vendored cacert.pem into release zip
Vic-Nas Jul 29, 2026
37fd815
build: single VERSION file drives release filenames + embedded app ve…
Vic-Nas Jul 29, 2026
c0309d1
updater: mandatory-repo GitHub self-update + release automation workflow
Vic-Nas Jul 29, 2026
7d962d7
release: bump version to 1.2.3
Vic-Nas Jul 29, 2026
1e8e65f
build: make UPDATE_REPO mandatory (REPO=owner/repo), no silent default
Vic-Nas Jul 29, 2026
7284876
fix: actually apply the snprintf/nlohmann fix to update.cpp (was only…
Vic-Nas Jul 29, 2026
3109fd5
release: name build artifacts after the repo (APPNAME), not hardcoded…
Vic-Nas Jul 29, 2026
a8c0fb3
build: self-install pillow if missing, don't rely on a separate CI step
Vic-Nas Jul 29, 2026
7a7172c
release: bump version to 1.2.4
Vic-Nas Jul 29, 2026
fa4fd13
main: cap orphan transactions held in memory (#16)
Bitflash-sh Jul 28, 2026
799f4b2
serialize: grow strings as data arrives, not to the declared length (…
Bitflash-sh Jul 28, 2026
9b05b4c
rpc: bound and guard the Stratum surface (#19)
Bitflash-sh Jul 28, 2026
4d9e550
main: cap signature operations per block (#20)
Bitflash-sh Jul 28, 2026
463683f
security: verify Ed25519 signature on downloaded update before instal…
Vic-Nas Jul 29, 2026
4b3d29d
ci: install zip in MSYS2 — windows target needs it to package the rel…
Vic-Nas Jul 29, 2026
1b2a6c1
fix: resolve cacert.pem relative to the exe's own directory, not CWD
Vic-Nas Jul 29, 2026
80e0f24
gui: wire up the auto-updater with an explicit consent dialog
Vic-Nas Jul 29, 2026
eea9a82
release: bump version to 1.2.5
Vic-Nas Jul 29, 2026
c684a97
ci: tolerate UPDATE_SIGNING_KEY being pasted as a flattened single line
Vic-Nas Jul 29, 2026
a5ab16f
release: bump version to 1.2.6
Vic-Nas Jul 29, 2026
be7e3bd
security: rotate the update-signing key (the previous private half ne…
Vic-Nas Jul 29, 2026
e657f18
security: rotate update-signing key again (zip delivery)
Vic-Nas Jul 29, 2026
910a395
security: generate the update-signing keypair locally, never through me
Vic-Nas Jul 29, 2026
409f953
build: add linux-self/windows-self targets, and a CI preflight job
Vic-Nas Jul 29, 2026
876fe07
release: bump version to 1.2.7
Vic-Nas Jul 29, 2026
b4c6e67
rendezvous: split registering from waiting for a dial
Vic-Nas Jul 29, 2026
457b482
net: cache .btf peers that answered, dial them first on start (#25)
Vic-Nas Jul 29, 2026
55ed74e
btfaddr: reject malformed descriptors instead of throwing (#8)
Vic-Nas Jul 29, 2026
0cb0cf5
remove install-bitflash-wine.sh -- pointless now that make linux/linu…
Vic-Nas Jul 29, 2026
85f68b8
nostr/main: guard remaining unchecked json field extractions
Vic-Nas Jul 29, 2026
96e84c4
release: bump version to 1.2.8
Vic-Nas Jul 29, 2026
9ccb576
rpc/main/gui: let participant miners see what a pool actually owes them
Vic-Nas Jul 29, 2026
d90a589
nostr: route libwebsockets' own error/warning log lines into debug.log
Vic-Nas Jul 29, 2026
87c3451
release: bump version to 1.2.9
Vic-Nas Jul 29, 2026
b9abc06
update: log why signature verification actually failed
Vic-Nas Jul 29, 2026
3d8b65f
release: bump version to 1.2.10
Vic-Nas Jul 29, 2026
767ea10
update: fix Windows exe extraction searching for a hardcoded filename
Vic-Nas Jul 29, 2026
a072a71
release: bump version to 1.2.11
Vic-Nas Jul 29, 2026
c40f786
main_gui: install a top-level Windows crash handler
Vic-Nas Jul 29, 2026
913d510
gui: fix About dialog showing a hardcoded 'v1.1.0' regardless of actu…
Vic-Nas Jul 29, 2026
807aed2
gui: bring back the address book, add a Peers panel (View > More)
Vic-Nas Jul 29, 2026
5e54b07
net: exchange signed .btf descriptors between peers (port of bitflash…
Vic-Nas Jul 29, 2026
36c8a79
release: bump version to 1.2.12
Vic-Nas Jul 29, 2026
a6f9c1e
fix: SetAddressBookName name collision with pre-existing db.h function
Vic-Nas Jul 29, 2026
435ff19
release: bump version to 1.2.13
Vic-Nas Jul 29, 2026
050f423
gui: show who a transaction actually went to/came from
Vic-Nas Jul 29, 2026
9aa2d0f
rpc/main/gui: expose round-share counts to participant miners
Vic-Nas Jul 29, 2026
1635774
rpc/main/gui: detect an overdue payout, no new trust required
Vic-Nas Jul 30, 2026
742aaba
net/gui: random node nicknames, exchanged unauthenticated
Vic-Nas Jul 30, 2026
7972019
db/main: add a keypool, fix change-address reuse, per-pool payout add…
Vic-Nas Jul 30, 2026
f7720b9
db/main_gui: catch BDB exceptions so unreadable files fail cleanly (p…
Vic-Nas Jul 30, 2026
c3a6ac2
remove dead code: marketplace subsystem, publish/subscribe P2P layer,…
Vic-Nas Jul 30, 2026
60e5708
remove more dead code: 6 zero-caller utility/db functions
Vic-Nas Jul 30, 2026
5ee959d
release: bump version to 1.2.14
Vic-Nas Jul 30, 2026
d0455da
fix: keypool write/erase called protected CDB methods directly
Vic-Nas Jul 30, 2026
5061a08
release: bump version to 1.2.15
Vic-Nas Jul 30, 2026
4db1c6e
gui: replace update popup with a top-band, simplify the menu bar
Vic-Nas Jul 30, 2026
0558398
Revert "gui: replace update popup with a top-band, simplify the menu …
Vic-Nas Jul 30, 2026
a16db42
gui: show update status in the existing status bar, without touching …
Vic-Nas Jul 30, 2026
1ea7466
gui: restore the menu bar simplification lost in the earlier full revert
Vic-Nas Jul 30, 2026
9d27cc8
gui: actually re-check for updates periodically, not just once at launch
Vic-Nas Jul 30, 2026
b191d1b
release: bump version to 1.2.16
Vic-Nas Jul 30, 2026
bd1031f
gui: add a Logs menu item that opens debug.log in the OS default viewer
Vic-Nas Jul 30, 2026
94a3b8f
docs: remove em-dashes from README.md and relay/README.md
Vic-Nas Jul 30, 2026
7219e61
gui: fix transaction list going empty (and staying empty) under walle…
Vic-Nas Jul 30, 2026
eaf31b0
release: bump version to 1.2.17
Vic-Nas Jul 30, 2026
bb0f1a9
ci: auto-revert the VERSION bump if a release fails partway through
Vic-Nas Jul 30, 2026
91ad198
ci: replace git revert with a literal file restore for the failed-rel…
Vic-Nas Jul 30, 2026
bd31f1f
net/gui: share app version in the handshake, show it instead of the m…
Vic-Nas Jul 30, 2026
c89412a
net: include the repo, not just the version, in the handshake's app-v…
Vic-Nas Jul 30, 2026
b26199d
release: bump version to 1.2.18
Vic-Nas Jul 30, 2026
82fa123
gui: shorten update-check interval to 30min, show 'checked X ago' in …
Vic-Nas Jul 30, 2026
1407942
release: bump version to 1.2.19
Vic-Nas Jul 30, 2026
64db460
gui: show who actually sent a received payment, not which of my own a…
Vic-Nas Jul 30, 2026
0cc5ea0
release: bump version to 1.2.20
Vic-Nas Jul 30, 2026
bf78716
build: headless Linux node that doesn't need libGL (port of bitflash-…
Vic-Nas Jul 30, 2026
a8dc0ef
net: compiled-in bootstrap seeds (port of bitflash-sh#36); sha: fix A…
Vic-Nas Jul 30, 2026
561b461
main_gui: check for updates in headless/daemon mode too
Vic-Nas Jul 30, 2026
80ad3f7
main_gui: add /nickname and /paytxfee CLI flags for headless parity w…
Vic-Nas Jul 30, 2026
f6de663
main: fix solo-mining coinbase paying to a key never backed up (bitfl…
Vic-Nas Jul 30, 2026
6b61a13
docs: bring README up to date
Vic-Nas Jul 30, 2026
b7cf9a0
docs: trim README to essentials
Vic-Nas Jul 30, 2026
3e2ab44
main_gui: live terminal dashboard for headless mode, no new dependency
Vic-Nas Jul 30, 2026
3a1db80
main_gui/dashboard: replace hand-rolled ANSI dashboard with FTXUI (ve…
Vic-Nas Jul 30, 2026
bb21665
dashboard: show address/balance/nickname like the GUI does, match its…
Vic-Nas Jul 30, 2026
5b85320
dashboard: press 'u' to apply an update, no GUI required
Vic-Nas Jul 30, 2026
274eaf4
gui: fix status bar reverting to 'Up to date' after dismissing the up…
Vic-Nas Jul 30, 2026
287c4ec
gui: fix transaction list ordering within unconfirmed/orphaned rows
Vic-Nas Jul 30, 2026
2e495f3
main/gui: fall back to solo mining when the pool goes quiet, with opt…
Vic-Nas Jul 30, 2026
efbe9ee
build: re-enable format-string checking as a hard error, despite -w
Vic-Nas Jul 30, 2026
5626fd7
build: actually enable format-string checking (corrects my own earlie…
Vic-Nas Jul 30, 2026
a8a5297
db/main_gui: make wallet.dat a file you can actually back up (port of…
Vic-Nas Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
254 changes: 254 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
name: Release

# Fires when VERSION changes on main. workflow_dispatch is also enabled so
# the pipeline can be test-run without bumping the version.
on:
push:
branches: [main]
paths:
- VERSION
workflow_dispatch: {}

permissions:
contents: write

jobs:
check-version:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.v.outputs.version }}
should_release: ${{ steps.v.outputs.should_release }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- id: v
run: |
VERSION=$(cat VERSION | tr -d '[:space:]')
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "should_release=true" >> "$GITHUB_OUTPUT"
exit 0
fi
if git rev-parse "v$VERSION" >/dev/null 2>&1; then
echo "Tag v$VERSION already exists, skipping release."
echo "should_release=false" >> "$GITHUB_OUTPUT"
else
echo "should_release=true" >> "$GITHUB_OUTPUT"
fi

preflight:
needs: check-version
if: needs.check-version.outputs.should_release == 'true'
runs-on: ubuntu-latest
steps:
- name: Validate release config before spending build minutes
env:
UPDATE_SIGNING_KEY: ${{ secrets.UPDATE_SIGNING_KEY }}
UPDATE_PUBKEY: ${{ vars.UPDATE_PUBKEY }}
run: |
fail=0

if [ -z "$UPDATE_PUBKEY" ]; then
echo "::error::UPDATE_PUBKEY repo variable is not set (Settings > Secrets and variables > Actions > Variables). Run tools/generate_update_key.sh."
fail=1
elif ! echo -n "$UPDATE_PUBKEY" | grep -qE '^[0-9a-fA-F]{64}$'; then
echo "::error::UPDATE_PUBKEY is set but isn't 64 hex characters — got: '${UPDATE_PUBKEY}'. Re-check tools/generate_update_key.sh output."
fail=1
fi

if [ -z "$UPDATE_SIGNING_KEY" ]; then
echo "::error::UPDATE_SIGNING_KEY secret is not set (Settings > Secrets and variables > Actions > Secrets)."
fail=1
else
python3 - "$UPDATE_SIGNING_KEY" > /tmp/preflight_key.pem <<'PYEOF'
import sys, re, textwrap
body = re.sub(r'-----(BEGIN|END) PRIVATE KEY-----', '', sys.argv[1])
body = re.sub(r'\s+', '', body)
print("-----BEGIN PRIVATE KEY-----")
print("\n".join(textwrap.wrap(body, 64)))
print("-----END PRIVATE KEY-----")
PYEOF
if ! openssl pkey -in /tmp/preflight_key.pem -noout 2>/tmp/preflight_err.txt; then
cat /tmp/preflight_err.txt
echo "::error::UPDATE_SIGNING_KEY doesn't parse as a valid private key, even after PEM normalization."
fail=1
elif [ -n "$UPDATE_PUBKEY" ]; then
# Cross-check the secret and the variable are actually the same
# keypair -- catches "rotated one half, forgot the other" early.
DERIVED=$(openssl pkey -in /tmp/preflight_key.pem -pubout -outform DER 2>/dev/null | tail -c 32 | od -An -tx1 | tr -d ' \n')
if [ "$DERIVED" != "$(echo -n "$UPDATE_PUBKEY" | tr 'A-F' 'a-f')" ]; then
echo "::error::UPDATE_SIGNING_KEY and UPDATE_PUBKEY don't match (public key derived from the secret is $DERIVED). They must come from the same tools/generate_update_key.sh run."
fail=1
fi
fi
rm -f /tmp/preflight_key.pem
fi

exit $fail

build-linux:
needs: [check-version, preflight]
if: needs.check-version.outputs.should_release == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install AppImage icon dependency
run: pip install --break-system-packages pillow
- name: Build AppImage
run: |
if [ -z "${{ vars.UPDATE_PUBKEY }}" ]; then
echo "::error::UPDATE_PUBKEY repo variable is not set. Run tools/generate_update_key.sh and add its hex output as a repo variable (Settings > Secrets and variables > Actions > Variables)."
exit 1
fi
make linux REPO=${{ github.repository }} UPDATE_PUBKEY=${{ vars.UPDATE_PUBKEY }}
- uses: actions/upload-artifact@v4
with:
name: linux-build
path: "*-*-x86_64.AppImage"

build-windows:
needs: [check-version, preflight]
if: needs.check-version.outputs.should_release == 'true'
runs-on: windows-latest
defaults:
run:
shell: msys2 {0}
steps:
- uses: actions/checkout@v4
- uses: msys2/setup-msys2@v2
with:
msystem: UCRT64
update: true
install: >-
base-devel
git
zip
- name: Build (MSYS2 UCRT64)
run: |
if [ -z "${{ vars.UPDATE_PUBKEY }}" ]; then
echo "::error::UPDATE_PUBKEY repo variable is not set."
exit 1
fi
make windows REPO=${{ github.repository }} UPDATE_PUBKEY=${{ vars.UPDATE_PUBKEY }}
- uses: actions/upload-artifact@v4
with:
name: windows-build
path: "*-*-windows.zip"

release:
needs: [check-version, build-linux, build-windows]
if: needs.check-version.outputs.should_release == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true

- name: Build short changelog
id: notes
run: |
PREV_TAG=$(git tag --sort=-creatordate | head -n1 || true)
if [ -n "$PREV_TAG" ]; then
RANGE="$PREV_TAG..HEAD"
else
RANGE="HEAD"
fi
{
echo "notes<<EOF"
echo "Top changes in this release:"
git log $RANGE --no-merges --pretty=format:'%H %s' | \
while read -r hash subject; do
n=$(git show --numstat --pretty=format: "$hash" | awk '{s+=$1+$2} END{print s+0}')
echo "$n|- $subject"
done | sort -t'|' -k1,1 -rn | head -n 8 | cut -d'|' -f2
echo "EOF"
} >> "$GITHUB_OUTPUT"

- name: Sign release assets
env:
UPDATE_SIGNING_KEY: ${{ secrets.UPDATE_SIGNING_KEY }}
run: |
if [ -z "$UPDATE_SIGNING_KEY" ]; then
echo "::error::UPDATE_SIGNING_KEY secret is not set — cannot sign release assets. Auto-update will refuse to install this release."
exit 1
fi
# Tolerate the secret being pasted as a single flattened line (no
# newline between -----BEGIN/body/-----END): strip all whitespace
# and the markers, then rebuild proper 64-char-wrapped PEM.
python3 - "$UPDATE_SIGNING_KEY" > /tmp/update_signing_key.pem <<'PYEOF'
import sys, re, textwrap
raw = sys.argv[1]
body = re.sub(r'-----(BEGIN|END) PRIVATE KEY-----', '', raw)
body = re.sub(r'\s+', '', body)
print("-----BEGIN PRIVATE KEY-----")
print("\n".join(textwrap.wrap(body, 64)))
print("-----END PRIVATE KEY-----")
PYEOF
if ! openssl pkey -in /tmp/update_signing_key.pem -noout 2>/tmp/keyerr.txt; then
cat /tmp/keyerr.txt
echo "::error::UPDATE_SIGNING_KEY secret is not a valid private key even after PEM normalization."
rm -f /tmp/update_signing_key.pem
exit 1
fi
for f in artifacts/*-*-x86_64.AppImage artifacts/*-*-windows.zip; do
[ -f "$f" ] || continue
openssl pkeyutl -sign -rawin -inkey /tmp/update_signing_key.pem -in "$f" -out "$f.sig"
done
rm -f /tmp/update_signing_key.pem

- name: Create release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ needs.check-version.outputs.version }}
name: ${{ github.event.repository.name }} v${{ needs.check-version.outputs.version }}
body: ${{ steps.notes.outputs.notes }}
files: |
artifacts/*-*-x86_64.AppImage
artifacts/*-*-windows.zip
artifacts/*.sig

revert-version-on-failure:
# Only for an actual VERSION-bump push, and only if the bump was real
# (should_release) but something downstream failed before a release
# actually got published. workflow_dispatch runs are excluded -- those
# can be triggered on any commit for testing, not necessarily one that
# bumped VERSION, so there's nothing to revert.
needs: [check-version, preflight, build-linux, build-windows, release]
if: >
always() &&
github.event_name == 'push' &&
needs.check-version.outputs.should_release == 'true' &&
(needs.preflight.result == 'failure' ||
needs.build-linux.result == 'failure' ||
needs.build-windows.result == 'failure' ||
needs.release.result == 'failure')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Restore VERSION to its value before this failed bump
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

# Only proceed if the failed commit is still the tip of main --
# if something else has been pushed since (e.g. a fix, pushed
# right after seeing the failure), don't touch VERSION at all;
# require a manual look instead of guessing what's now correct.
if [ "$(git rev-parse HEAD)" != "${{ github.sha }}" ]; then
echo "::warning::main has moved since this run started -- leaving VERSION as-is. Check manually before reusing v${{ needs.check-version.outputs.version }}."
exit 0
fi

OLD_VERSION=$(git show "${{ github.sha }}~1:VERSION")
echo -n "$OLD_VERSION" > VERSION
git add VERSION
git commit -m "release: restore VERSION to $OLD_VERSION -- v${{ needs.check-version.outputs.version }} release failed"
git push origin main
echo "VERSION restored to $OLD_VERSION -- release of v${{ needs.check-version.outputs.version }} failed, that number is free to reuse once whatever broke is fixed."
20 changes: 20 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,24 @@ wallet.dat
nostr.key
btf_enc.key

# Key material and secrets the node creates in its data directory. *.dat
# above already covers wallet.dat; these aren't .dat files and are every
# bit as sensitive: btf_enc.key/nostr.key are this node's .btf identity,
# walletrpc.token is bearer authority to spend from the wallet.
*.key
walletrpc.token

# Wallet/key backups
bitflash-keys-*

# Mempool dump, if a node is configured to write one
mempool.txt

# Patches and scratch files kept alongside a working tree
*.patch
*.rej
*.orig

# Third-party build trees (rebuilt by the build scripts)
RandomX/
deps/
Expand All @@ -22,9 +40,11 @@ secp256k1-build/

# Distributable binaries (published as GitHub Releases, not committed)
dist/
*.tgz
*.tar.gz
*.zip

# Editor/OS cruft
.DS_Store
Thumbs.db
src/bitflash
Loading