Skip to content

BitFinite Core v3.1.0 — DNS seeder hardening + upstream security backport

Choose a tag to compare

@bitfinitechain bitfinitechain released this 11 Aug 02:38
· 29 commits to master since this release

Drop-in upgrade from v3.0.x. No reindex, no wallet migration, no consensus change — stop the node, swap the binaries, start it again.

BitFinite forked from Bitcoin Cash Node v27.0.0 in December 2023 and upstream is now at v29.0.0, so two and a half years of their fixes were missing here. This release ports the subset that changes how a node behaves under attack or resource pressure. The full ranked plan is in doc/upstream-security-backlog.md.

DNS seeder

The seeder serves seed.bitfinitechain.org, the network's dynamic bootstrap. Two of these were verified by running v3.0.2 and v3.1.0 side by side against the same failure:

  • A seeder that cannot bind its DNS port now says so. Previously it printed done, reported 0 DNS requests, and kept running while answering nothing. A dead seed looked healthy.
  • It shuts down cleanly and persists its database on exit. v3.0.2 ignored SIGINT entirely and had to be killed, discarding every peer crawled since the last periodic dump.
  • Fixed a race and undefined behaviour when starting DNS threads, replaced a thread-unsafe std::rand(), moved to std::thread, fixed the checkpoint check.

Node robustness

  • Socket descriptor leak fixed, plus the crash it caused once the process ran out of file descriptors. Matters on long-uptime nodes.
  • Log rate limiting (-logratelimit, default on): 1 MiB per hour per source location, so a noisy or hostile peer cannot fill your disk. -logratelimit=0 disables it.
  • Control characters filtered out of log messages — peer-supplied strings can no longer manipulate a terminal reading the log.
  • Thread-unsafe strerror() replaced with SysErrorString() throughout.

Build

  • Project now builds as C++20 (was C++17), with Boost 1.77 in depends (was 1.70; C++20 removed std::allocator<T>::pointer, which 1.70 still used).
  • Linux and Windows build in separate toolchain images — Linux stays on Ubuntu 22.04 so the glibc floor for released binaries does not move; Windows moves to 24.04 for a mingw with <source_location>.
  • Fixed: CMAKE_PREFIX_PATH omitted depends, so previous native Linux builds linked host Boost libraries against depends headers.
  • Fixed: packaging version could disagree with the compiled-in version — the same defect v3.0.2 was released to correct.
  • Fixed: the build directory is reconfigured when configuration inputs change, instead of silently reusing a stale CMake cache.

Not in this release

  • -peerratelimit (per-peer bandwidth limits) is deferred. We named it in our announcement and it did not make it: upstream's implementation is written against a CNode lifetime refactor we have not ported, and rewriting it against our current interface would mean shipping network-layer code in a form upstream has never run. First in line for the next release.
  • The four May-2026 consensus CHIPs from BCHN v29 are not included. Those are Bitcoin Cash's network upgrade; adopting them here would be a hard fork needing coordinated miner activation, and they must not ride along in a security release.

Verify

sha256sum -c SHA256SUMS

What is in the packages

Unchanged from 3.0.2, listed because we stopped saying so and silence read as removal: bitfinited, bitfinite-cli, bitfinite-qt (the GUI wallet, in both the Linux tarball and the Windows zip), bitfinite-tx, bitfinite-wallet, and bitcoin-seeder (Linux only).