upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/README.md
AgeCommit message (Collapse)Author
2026-09-05Merge upstream/main into the forkbitflash-maintainer
Brings the nine commits that are actually the latest on our lineage: isolated testnet parameters and genesis, optional 2 MB large pages for RandomX, and five README changes. This is what "up to date" means here -- not the 1.2.2x tags, which carry higher version numbers but were cut 2026-07-30, three weeks before the line we ship, and which upstream/main does not contain. Three conflicts, all resolved toward upstream's structure while keeping what this fork knows: main.cpp -- upstream moved genesis construction into BuildGenesisBlock() so mainnet and the new testnet can share it. Verified byte-for-byte before taking it: MAINNET_GENESIS_TIMESTAMP, _TIME (1753315200), _NONCE (3141), _HASH, _MERKLE, the scriptPubKey, nBits and nVersion all equal what this tree built inline. The mainnet genesis hash is unchanged and the asserts still guard it. Kept our warning about never editing those inputs, and kept our note that 1753315200 is 2025-07-24, not 2026 -- upstream's comment on that constant states the wrong year. net.h -- DEFAULT_PORT = htons(8433) becomes MAINNET_PORT/TESTNET_PORT in host order. Nothing is lost: net.cpp's GetDefaultPort() applies htons() itself and is what every caller uses, so the value reaching a sockaddr is unchanged and mainnet stays on 8433. selftest.cpp -- the known-tests string had diverged in both directions. Took the union: upstream's network-params alongside our payout-ledger, rather than dropping either. Gates: 15/15 selftests (our 14 plus upstream's network-params), consensus constants unchanged against e4f898c except the pre-existing MAX_BLOCK_SIZE_GEN, mainnet genesis intact, compactblock's 17 checks still pass, money-log check ok, GNU_STACK RW.
2026-09-02docs: third-party RandomX miners cannot mine Bitflash poolsbitflash-maintainer
The README offered XMRig and SRBMiner command lines pointed at the local Stratum bridge. Neither can work. In RandomX mode both target the Monero-style JSON-RPC protocol (login/job/submit) while the pool speaks Bitcoin-style Stratum (mining.subscribe/notify/submit); both place the nonce at byte 39 of the job blob, which in an 80-byte Bitflash header is inside the merkle root, not the nonce at byte 76; and both require a 32-byte seed hash as 64 hex characters, where randomx_pow.cpp keys RandomX from a fixed 36-byte string that is not a hash at all. None of it is configurable. -stratumbridge is a byte relay between a local socket and the .btf tunnel (BridgePump, main.cpp) -- it fixes reachability, the one blocker an operator could otherwise do something about, and translates nothing. Say that where the commands used to be, so the question gets answered instead of asked again. Also correct the magic bytes in src/readme.txt, which documented bf 1a 5c fd; net.h has bf 20 5c fd.
2026-08-20chain: add isolated testnet genesisNsable-sh
2026-08-20net: add isolated testnet parametersNsable-sh
2026-08-20readme: link the Discord communitybitflash
2026-08-19readme: drop "experimental" from the closing notebitflash
Match the wording already used on the site and in the manual: the closing line no longer calls the software experimental, keeping only the young-network and stay-current caution.
2026-08-19readme: document -walletbackend and the automatic managed Torbitflash
- name the -walletbackend=sqlite|bdb override and the wallet-backend marker in the wallet section - add -nomanagedtor to the Tor flag list and note that the desktop app starts a managed Tor automatically, while a headless node asks for it
2026-08-19readme: name the BIP44 derivation and the SQLite wallet defaultbitflash
- describe the recovery phrase as a BIP44 tree on m/44'/4346950'/0'/..., coin type 4346950 = 0x425446 "BTF", registered in SLIP-0044 - note the SQLite default in "The file" and that -backupwallet writes a matching self-contained copy; scope the Berkeley DB recovery notes to a legacy wallet.dat - at-a-glance: name BIP44 and add a wallet-storage row
2026-08-19readme: add Tor badge, fix Download link, note the SQLite wallet defaultbitflash
- add a Tor badge to the header row - point Download and the quick-start link at releases.bitflash.network; the relative ../../releases/latest 404s outside GitHub - windows quick start: the published package bundles Tor and starts a managed Tor automatically, with -nomanagedtor to turn it off - note the single-file SQLite wallet default (1.2.20) and link docs/storage.md - bump the checksum-mirror example to v1.2.20
2026-08-13release: v1.2.19 (nHDNext restore fix, Tor onion transport: managed Tor, ↵bitflash
direct onion peers, onion-only mode)
2026-08-13release: verify bundled Tor signaturesNsable-sh
2026-08-13release: package Windows builds with managed TorNsable-sh
2026-08-13net: add managed Tor hidden service bootstrapNsable-sh
2026-08-13net: add signed direct onion peer endpointsNsable-sh
2026-08-12site: document public deployment contractNsable-sh
2026-08-12test mergebitflash
# Conflicts: # src/makefile.mingw
2026-08-12Merge pull request 'net: add Tor mode for outbound discovery' (#28) from ↵Bitflash
tor-mode into main
2026-08-12Merge pull request 'net: add optional SOCKS5 outbound proxy' (#27) from ↵Bitflash
socks5-proxy into main
2026-08-11net: replace peer select loop with pollNsable-sh
2026-08-11net: add Tor mode for outbound discoveryNsable-sh
2026-08-11net: harden SOCKS5 proxy parsing and testsNsable-sh
2026-08-11net: add optional SOCKS5 outbound proxyNsable-sh
2026-08-11tools: harden chain audit scriptsNsable-sh
2026-08-11tools: add UTXO inclusion proofsNsable-sh
2026-08-11Merge pull request 'tools: add deterministic UTXO commitment verifier' (#19) ↵Bitflash
from utxo-set-commitment into main
2026-08-11Merge main into utxo-set-commitment (union README)bitflash
2026-08-11Merge main into mining-calculator (union README)bitflash
2026-08-10tools: add Bitflash mining calculatorNsable-sh
2026-08-10tools: add deterministic UTXO commitment verifierNsable-sh
2026-08-10tools: add fair launch verifierNsable-sh
2026-08-07pool: publish round proof ledgerNsable-sh
2026-08-07pool: add local Stratum bridgeNsable-sh
2026-08-07pool: write dashboard status JSONNsable-sh
2026-08-04docs: one documentation directory, not two (#137)Bitflash
docs/ has held the README's images since the fair-launch release. I added doc/ yesterday for the derivation spec without looking, and #108 then correctly used docs/ -- leaving the repository with both, one letter apart, which is the kind of thing that quietly costs someone ten minutes a year forever. The mistake was mine, so the move is mine: derivation.md and verify-derivation.py go to docs/, and the two README links follow. No content changes. The verifier still reproduces the wallet from its new path, which is the only thing here that can actually break.
2026-08-04Add release verification tooling (#108)mtg0001
Co-authored-by: Gilcimar Duarte <ti@gpm.infra>
2026-08-03doc: write down the derivation, so the words work without us (#128)Bitflash
The twelve words were only as good as this binary staying alive. The derivation path, the address version byte and the public-key encoding existed nowhere outside src/, so anyone holding a phrase and no working Bitflash had the keys and no way to find them. doc/derivation.md states all of it: BIP-39 to seed, BIP-32 to children, both layouts this wallet has used (legacy m/i' and BIP-44 m/44'/4346950'/0'/{0,1}/i), secp256k1 with UNCOMPRESSED public keys, and Base58Check with version byte 25. The uncompressed part is the trap worth naming. Hashing the same key in compressed form yields a different, perfectly valid-looking address that holds nothing, and nothing in the source says out loud which one is used -- it falls out of OpenSSL's default in code inherited from 0.1.0. doc/verify-derivation.py implements the document from scratch, sharing no code with this project and importing nothing outside the standard library, then checks it against addresses the wallet actually produced. Both tables were generated by a binary first: the legacy one by the published v1.2.15, which knows only that layout, and the BIP-44 one by the current tree. The script reproduces all eight. That is the point of shipping the checker rather than only the prose: if the two ever drift, the script fails and says which side is wrong.
2026-08-01docs: put the production numbers in the upgrade note (#107)Bitflash
The deaf-node paragraph cited the bench A/B -- two nodes on one machine for half an hour. Both mining machines have since run 1.2.13 in production: zero spurious disconnections against the 741 the unpatched side logged, and 13 and 18 peers held where the unpatched node held 11, ten of them inbound. Also says what the pre-1.2.11 socket pile cost and what returns the ports.
2026-08-01docs: bring the README up to the wallet that exists, and make -help print (#106)Bitflash
The README still said deterministic restore was an open issue, told people the mining mode was not remembered between restarts, and wrote every flag in the slash form that MSYS2 turns into a path before the node sees it. Rewritten around the phrase and the file as two backups covering different keys, the -restorephrase note for anyone who made a phrase on 1.2.12, -rescan, the diagnostics report, and the two upgrade reasons measured this week. Also: -help printed nothing at all. This tree remaps printf to OutputDebugStringF, so the usage page went into debug.log, and a -mwindows binary has no console to write to either way -- the one command whose job is to tell you something returned 0 and said nothing. It now takes the real printf and attaches the terminal. The help text was missing -restoredepth, -showderived and the wallet-hd self-test.
2026-08-01Add wallet safety backup panel (#89)mtg0001
Co-authored-by: Gilcimar Duarte <ti@gpm.infra>
2026-07-30wallet: export and import keys as text (#49)Bitflash
The last door out. Everything else assumes Berkeley DB will cooperate. When it will not -- a build that cannot read the file, a truncation, an environment past recovering -- the keys are usually still perfectly intact and were unreachable anyway. #40 is one person's account of exactly that, and #46 only rescues the cases where BDB still opens the file at all. bitflash -dumpwallet=keys.txt bitflash -importwallet=keys.txt One key per line with its address and label. No database, no environment, no version coupling: anything that can read a line can recover from it. The format is the DER private key in hex, which round-trips exactly through SetPrivKey. Not interchangeable with other wallets -- worth having eventually, but a WIF encoder I got subtly wrong would be worse than no encoder at all, and this file exists for the case where nothing else works. Care taken, because the failure modes here cost money: - Refuses to overwrite an existing file. A mistyped path must not eat the only copy of something irreplaceable. - Written owner-only on POSIX, before any key reaches it. Windows inherits the folder's ACL; the README says so rather than pretending otherwise. - Newlines in labels are flattened, so a label cannot forge an extra entry on read-back. - Import skips keys already present, so running it twice does nothing, and one unreadable line is reported and stepped over instead of costing the reader every other key in the file. Verified on Linux and Windows: a key exported from one wallet imports into a different one and its address then appears there; re-importing adds nothing; a corrupted line is skipped while the rest still load; the dump is 0600 and refuses to overwrite. This does not solve #47. Keys still are not derived from a seed, so a dump is as much a snapshot as any other backup. What it does is make the keys reachable no matter what state the database is in.
2026-07-30wallet: make wallet.dat a file you can actually back up (#46)Bitflash
* wallet: make wallet.dat a file you can actually back up Issue #40: a wallet.dat copied out on its own will not open anywhere else. The file is intact -- same bytes, same keys -- and the node refuses it with "Db::put: Invalid argument", thrown from a path that aborted the process. The reporter believes they lost funds to this, having saved the one file anybody would think to save. The chain, from the bottom: _endthread() is pthread_exit() on POSIX, and glibc implements that by throwing abi::__forced_unwind through the stack. That is not a real exception; catching it without rethrowing is a fatal error by contract. CATCH_PRINT_EXCEPTION ended in a bare catch(...), so every Linux shutdown ended: UNKNOWN EXCEPTION bitflash-node in ThreadSocketHandler() FATAL: exception not rethrown An abort, mid-shutdown, so nothing after StopNode() ran. Which mattered because Berkeley DB stamps every page with a log sequence number belonging to the environment that wrote it. Carried elsewhere, those numbers point at logs that do not exist and BDB refuses to write. DBFlush(true) calls lsn_reset, which is precisely the cure -- and DBFlush has been declared since 2009 and called from nowhere. Even had it been called, the abort stood in front of it. So the wallet was never released from its directory, and the one file users copy was the one file that could not travel. Three fixes, each covering a different case: - Rethrow abi::__forced_unwind, and call DBFlush(true) on both shutdown paths. Shutdown completes, and wallet.dat is left portable by construction. - Adopt orphaned files on open: a freshly created database environment beside pre-existing .dat files means they came from elsewhere, so reset their sequence numbers. This is what recovers wallets already stranded by older builds -- including, if they still hold the file, the reporter's. - BackupWallet(), reachable as /backupwallet=FILE, which checkpoints, copies, and clears the copy's sequence numbers. Bitcoin 0.1.0 had a backup command; this tree lost it in the wxWidgets removal and has shipped with no way to take a backup since. DBFlush's own txn_checkpoint and lsn_reset are wrapped too -- they throw, and throwing on the way out is how this started. Verified on Linux and Windows: shutdown exits 0 rather than 134, DBFlush runs, and a lone wallet.dat opens in an empty directory with no exceptions and byte-identical key records (defaultkey, key, name, setting, version) before and after. Not addressed here, and the larger half of #40: keys are generated as they are needed rather than derived from a seed, so any backup is a snapshot and coins paid to addresses created after it are not in it. /backupwallet says so on every run. The real answer is deterministic derivation, which is a wallet format change and its own piece of work. * README: document what a wallet backup actually requires The PR description claimed this section existed and it did not. Covers the two things that cost money and are not obvious: a lone wallet.dat is refused elsewhere because Berkeley DB ties it to the database/ directory beside it, and every backup is a snapshot because keys are made on demand rather than derived from a seed.
2026-07-29README: correct the privacy claim and document what 1.2.3 added (#35)Bitflash
The privacy paragraph said "your IP is never exposed to other nodes", which is close enough to true to be relied on and not true enough to deserve it. A peer reached over .btf genuinely does not learn your IP -- there is no IP-based dialling left. But the rendezvous relay sees it by construction, and the node still listens on 8433, so anyone who already knows the address can connect directly. All three are now stated, along with the line that this is unlinkability between peers rather than anonymity against an observer. Also stale or missing: - Quick start named 1.1.0 files, four releases back. Now points at the release page and shows how to verify SHA256SUMS. - Nothing said upgrades matter. 1.2.1 and 1.2.2 both changed consensus, so an old node ends up on a different chain with no warning. Said so, with where the data directory lives and why not to delete it. - Discovery was described as Nostr only. The cache and peer exchange landed in 1.2.3; all four layers are now listed, with the 36s -> 2s restart figure. - The glance table said "halving on schedule", which hides the number people actually want: same 210,000 blocks as Bitcoin, but ~292 days instead of four years. Added retarget window, coinbase maturity, sigops cap and P2P port too. - /port, /datadir and /debug were undocumented, as was the fact that /gen does not persist across restarts.
2026-07-27Add Linux GUI installer via Wine (#3)Victorio Nascimento
* 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 <pool@bitflash>
2026-07-24Add social banner; use it as README heroBitflash-sh
2026-07-24README: add live wallet + rendezvous/mining screenshotsBitflash-sh
2026-07-24README: trim roadmap to shipped featuresBitflash-sh
2026-07-24Automatic relay discovery over Nostr + call-to-actionBitflash-sh
Relay operators announce their relay with -announcerelay=host:port; every node discovers announced relays (kind 38502) and adds them to its failover list, so volunteer relays join with no maintainer edit or approval. Anti-spam cap + validation; relays are trustless (echan makes a bad relay unable to read/MITM). README: automatic relay-volunteer guide, 'don't let the network die' section.
2026-07-24README: relay-volunteer guide + roadmap updateBitflash-sh
2026-07-24Bitflash: fair-launch releaseBitflash-sh
Satoshi's bitcoin-0.1.0 reborn with RandomX CPU proof of work, anonymous .btf addressing over Nostr with CGNAT rendezvous, automatic peer discovery, a headless Linux node, and Windows GUI wallet. Fair launch, no premine, 21M cap.