upleb.uk

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

summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-08-14Merge pull request 'tests: prove wallet storage sanity failures' (#44) from ↵Bitflash
tests-wallet-storage-sanity-negative into main
2026-08-14tests: prove wallet storage sanity failuresNsable-sh
2026-08-14Merge pull request 'wallet: install backups via temporary file' (#43) from ↵Bitflash
wallet-backup-tempfile-install into main
2026-08-14wallet: install backups via temporary fileNsable-sh
2026-08-14Merge pull request 'tests: prove encrypted rewrite keeps public wallet ↵Bitflash
records' (#42) from wallet-rewrite-public-record-test into main
2026-08-14tests: prove encrypted rewrite keeps public wallet recordsNsable-sh
2026-08-14Merge pull request 'wallet: route rewrite copies through record scan' (#41) ↵Bitflash
from wallet-rewrite-record-boundary into main
2026-08-14wallet: route rewrite copies through record scanNsable-sh
2026-08-14Merge pull request 'wallet: add read-only record scan boundary' (#40) from ↵Bitflash
wallet-store-read-abstraction into main
2026-08-14wallet: add read-only record scan boundaryNsable-sh
2026-08-14Merge pull request 'wallet: fail closed on unsafe wallet storage state' ↵Bitflash
(#39) from wallet-storage-sanity-checks into main
2026-08-14Merge pull request 'wallet: audit Berkeley DB wallet storage' (#38) from ↵Bitflash
wallet-storage-audit-bdb into main
2026-08-14wallet: drop bdb log check from storage sanityNsable-sh
2026-08-14wallet: initialize storage audit counts explicitlyNsable-sh
2026-08-13wallet: add storage sanity checkNsable-sh
2026-08-13wallet: export storage audit jsonNsable-sh
2026-08-13wallet: add storage audit commandNsable-sh
2026-08-13tests: assert encryptwallet purges BDB logsNsable-sh
2026-08-13docs: inventory Berkeley DB storageNsable-sh
2026-08-13tests: cover portable wallet copiesNsable-sh
2026-08-13wallet: report locked encrypted recovery seedNsable-sh
2026-08-13release: v1.2.19 (nHDNext restore fix, Tor onion transport: managed Tor, ↵bitflash
direct onion peers, onion-only mode)
2026-08-13Merge pull request 'net: auto-start bundled managed Tor' (#37) from ↵Bitflash
auto-managed-tor into main
2026-08-13Merge pull request 'net: show Tor transport in diagnostics' (#36) from ↵Bitflash
tor-diagnostics into main
2026-08-13net: auto-start bundled managed TorNsable-sh
2026-08-13net: count direct onion peers by endpointNsable-sh
2026-08-13net: show Tor transport in diagnosticsNsable-sh
2026-08-13Merge pull request 'net: add onion-only btf dial mode' (#35) from ↵Bitflash
managed-tor-two-node-smoke into main
2026-08-13net: add onion-only btf dial modeNsable-sh
2026-08-13Merge pull request 'release: package Windows builds with managed Tor' (#34) ↵Bitflash
from windows-managed-tor-package into main
2026-08-13release: verify bundled Tor signaturesNsable-sh
2026-08-13release: package Windows builds with managed TorNsable-sh
2026-08-13Merge pull request 'net: add managed Tor hidden service bootstrap' (#33) ↵Bitflash
from embedded-tor-manager into main
2026-08-13net: stop managed Tor through control portNsable-sh
2026-08-13net: fix managed Tor Windows startupNsable-sh
2026-08-13net: harden managed Tor lifecycleNsable-sh
2026-08-13net: add managed Tor hidden service bootstrapNsable-sh
2026-08-13Merge pull request 'net: add signed direct onion peer endpoints' (#32) from ↵Bitflash
onion-direct-peers into main
2026-08-13net: add signed direct onion peer endpointsNsable-sh
2026-08-12Merge pull request 'site: align public docs and static explorer output' ↵Bitflash
(#30) from site-docs-polish-v1218 into main
2026-08-12Merge pull request 'wallet: collapse restored legacy hdnext' (#31) from ↵Bitflash
restore-collapse-hdnext into main
2026-08-12wallet: collapse restored legacy hdnextNsable-sh
2026-08-12site: document public deployment contractNsable-sh
2026-08-12release: v1.2.18 (Tor/SOCKS5 outbound privacy, poll() socket handler, new ↵bitflash
app icon)
2026-08-12build: fix leftover merge markers in makefile.mingw (drop FD_SETSIZE, keep ↵bitflash
BITFLASH_NODE_BUILD)
2026-08-12Merge pull request 'net: replace peer select loop with poll' (#29) from ↵Bitflash
poll-socket-handler into main
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-12Merge pull request 'tests: add deterministic chain tool fixtures' (#26) from ↵Bitflash
tool-fixtures into main
2026-08-12docs: update social banner to the new coin logobitflash
2026-08-12release: bump version to 1.2.17 (hardened audit tooling)bitflash
2026-08-12Merge pull request 'tools: harden chain audit scripts' (#25) from ↵Bitflash
tooling-hardening into main
2026-08-11net: replace peer select loop with pollNsable-sh
2026-08-11net: warn when Tor mode overrides SOCKSNsable-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-11tests: add deterministic chain tool fixturesNsable-sh
2026-08-11tools: address audit follow-upsNsable-sh
2026-08-11tools: harden chain audit scriptsNsable-sh
2026-08-11Merge pull request 'money: ParseMoney accepts full 8 decimals' (#23) from ↵Bitflash
parsemoney-full-decimals into main
2026-08-11money: ParseMoney accepts full 8 decimals (0.5, 0.00000001)Bitflash
The legacy parser only accepted two decimal places (cents) and rejected 0.5, leaving six of the eight coin decimals unreachable by -sendto and the send window. Parse up to 8 fractional digits Bitcoin-style, reject >8 to avoid silent truncation. Adds the parse-money selftest (12 cases).
2026-08-11Merge pull request 'wallet: SLIP-0044 4346950 is official, drop provisional ↵Bitflash
naming' (#22) from slip44-official-naming into main
2026-08-11wallet: SLIP-0044 4346950 is official, drop 'provisional' namingBitflash
The coin type 4346950 (0x425446 = BTF) was merged into the SLIP-0044 registry on 2026-08-07. Rename HD_BIP44_COIN_TYPE_BITFLASH_PROVISIONAL to HD_BIP44_COIN_TYPE_BITFLASH and update comments, logs and UI strings. Value is unchanged, so derivation paths and addresses are identical.
2026-08-11Merge pull request 'tools: add UTXO inclusion proofs' (#21) from ↵Bitflash
utxo-inclusion-proofs into main
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 pull request 'tools: add Bitflash mining calculator' (#20) from ↵Bitflash
mining-calculator 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-11Merge pull request 'tools: add fair launch verifier' (#18) from ↵Bitflash
fair-launch-verifier into main
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-10tools: static block explorer generator (v0)Bitflash
2026-08-10docs: specify the .btf rendezvous protocolBitflash
2026-08-10release: bump version to 1.2.16Bitflash
2026-08-07shutdown: flush wallet.dat on Windows headless stopBitflash
The headless loop installed SIGINT/SIGTERM handlers only under #ifndef _WIN32, so a headless node on Windows never reached the clean StopNode()+DBFlush() path: Ctrl-C, closing the console window, a service stop and OS shutdown all killed it mid-write, and a Berkeley DB wallet.dat left unflushed will not reopen. Install a SetConsoleCtrlHandler that mirrors the POSIX path: set fShutdown and, because the OS terminates us shortly after the handler returns on CLOSE/LOGOFF/SHUTDOWN, block until the main loop signals the flush is done. A 'taskkill /F' is still an uncatchable hard kill by design. Closes #16.
2026-08-07pool: publish round proof ledgerNsable-sh
2026-08-07bignum: shift setint64 in unsigned space to avoid signed overflow UBBitflash
setint64() extracted big-endian bytes with a signed left shift (n <<= 8). When the top byte is set that overflows int64 -- undefined behaviour, which the script fuzzer flagged under UBSan (bignum.h:158). The result was correct on two's-complement hardware, so this is a latent UB inherited from the original 0.1 code, not a behaviour change. Do the shift on a uint64.
2026-08-07tools: reject non-http(s) dashboard URLs in the pool directoryBitflash
A pool's dashboard URL comes from its self-published status file. Escaping it for HTML is not enough: a javascript: or data: scheme would still render as a clickable script-injection on the public directory page. Only emit a link for http(s) schemes; anything else shows as no link.
2026-08-07tools: build a static pool directoryNsable-sh
2026-08-07pool: add local Stratum bridgeNsable-sh
2026-08-07pool: write dashboard status JSONNsable-sh
2026-08-07test: cover pool Stratum share accountingNsable-sh
2026-08-07pool: make payout ledger crash-safeNsable-sh
2026-08-07randomx: serialize cache initialization (#4)Nsable-sh
2026-08-07fuzz: add script parser harness (#5)Nsable-sh
2026-08-07net: disable legacy order messages (#3)Nsable-sh
2026-08-07wallet: cleanse unlocked secrets before clearing them (#2)Nsable-sh
2026-08-07nostr: verify relay TLS and lock peer counts (#1)Nsable-sh
2026-08-06release: sign SHA256SUMS with a pinned key, verify against itBitflash
verify-release.sh embeds the Bitflash release signing key and now requires that the checksum signature validate against that exact key, not merely against some key in the caller's keyring (#138). It also fetches releases from releases.bitflash.network instead of the retired GitHub host, resolving 'latest' from latest.txt. Release signing key fingerprint: 910A 2B4C CA87 9E81 FB4B 2AEA 1D4A 53D3 B78A A4B8
2026-08-04fuzz: add P2P message parser harness (#142)mtg0001
* fuzz: add P2P message parser harness * fuzz: avoid duplicate legacy header includes * fuzz: seed the corpus with our network magic, not Bitcoin's The two seed inputs began f5 be b6 d9, which is Bitcoin's message start. Ours is bf 20 5c fd. CMessageHeader::IsValid rejects on that field first, so both seeds died at the first check and the smoke run exercised the reject path and nothing else. libFuzzer would have to mutate its way onto four exact bytes before reaching any parser, which does not happen in 128 runs. The job would have gone green while covering none of what it was added to cover. --------- Co-authored-by: Gilcimar Duarte <ti@gpm.infra> Co-authored-by: Bitflash-sh <btf01@proton.me>
2026-08-04ci: add GitHub Actions build and selftests (#140)mtg0001
Co-authored-by: Gilcimar Duarte <ti@gpm.infra>
2026-08-04build: pin external source dependencies (#139)mtg0001
Co-authored-by: Gilcimar Duarte <ti@gpm.infra>
2026-08-04rpc: build the pool block template the way the solo miner does (#141)Bitflash
Two bugs in RebuildJob(), the operator's Stratum template builder. It is a separate path from BitcoinMiner() and had drifted from it. A single pass over mapTransactions is not enough. That map is keyed by hash and carries no dependency order, so a transaction spending another still-unconfirmed transaction's output -- change from a recent send, usually -- fails ConnectInputs whenever its parent sits later in map order. One pass drops it, and map order does not change between rebuilds, so every later rebuild drops it at the same point. That is deterministic exclusion rather than bad luck: where pool operators mine most blocks, a transaction of that shape can stay unconfirmed for as long as its parent is. Now it retries until a pass adds nothing, which is what the solo builder has always done. And the fees reached nobody. nFees was declared inside the scan loop, so each transaction reset it and the running total was discarded, while the coinbase line passed a hardcoded 0. An operator collected fees into a block and paid none of them out. The block stayed valid, since paying less than allowed always is, so nothing ever complained. Both the diagnosis and the fix are Vic-Nas's, from his fork of this code. He deleted the fork, so this brings the work back rather than letting it go with it. His description of the failure was precise enough that finding the same two defects here took one read of our RebuildJob.
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-04gui: say why the wallet would not open, where the user can see it (#136)Bitflash
Every fatal startup path wrote to stderr and to printf, and on Windows neither reaches anybody. printf is remapped to OutputDebugStringF, so it lands in debug.log inside the data directory. A -mwindows binary started by double-clicking has no stderr at all, and AttachTerminal() cannot help: it attaches to a parent console, which a double-clicked exe does not have. So Bitflash exited silently. Someone whose wallet.dat needs a newer build -- exactly what the wallet format guard was added to tell them -- double-clicked and watched nothing happen. The guard was correct and mute, which is the failure it was written to prevent. Fatal startup errors now go through one reporter: debug.log as before, stderr as before, and a message box when there is a person in front of the screen. Applied to the three that mean "your data will not open": the block index failing to load, the block index throwing, and wallet.dat failing or throwing. The box is deliberately not shown for a headless node. Those run under scheduled tasks and services, where a modal dialog waits forever for a click nobody is there to make -- a hung process instead of an exit code. Headless keeps stderr and the log. LoadWallet() now also reports why it refused, in a sentence, instead of only logging it. The unsupported-format case is the one that has to be understood by whoever reads it, and "LoadWallet failed" is not that. Verified by breaking a throwaway wallet on purpose and starting both ways. Headless: exit code 1, no dialog, no process left behind. Windowed with no console: a box naming the file, the Berkeley DB error, the usual cause, and where to look for more.