Skip to content

Fulcrum 1.4.0

Compare
Choose a tag to compare
@cculianu cculianu released this 14 Dec 18:14
· 435 commits to master since this release
40ce944

What's new:

This is a major minor release of Fulcrum! We bumped the version to 1.4.0 because we fixed a bunch of things, upgraded rocksdb, killed some memory leaks and memory bloat, and overall made everything more solid.

A note about the database format: This version introduces a slight database upgrade. The internal database format was tweaked somewhat for the "undo" table (only used on reorg). As an admin you should not notice anything different, but just be aware that if you open up a synched datadir with Fulcrum 1.4.0, it writes "undo" data in a different format than previous Fulcrum. So if you were to, for some reason, downgrade back to Fulcrum 1.3.x on the same datadir, then experience a reorg immediately, your undo info written by the new version will not be usable by the older version (but will still be usable on the new version).

In general though you should not worry -- don't downgrade Fulcrum and you'll be fine! Onward and upward!


Summary of changes:

  • Performance - For rocksdb, we now use a shared block cache & write buffer manager.
    • This drastically reduces memory bloat as the app runs.
    • This effectively caps rocksdb's memory usage to some known finite value. The config option db_mem directly influences the size of this cache and thus the rocksdb memory soft-cap.
    • db_mem and db_max_open_files have now been defaulted to more conservative values: 348 (from 768) and 20 (from 30) respectively.
    • This shared block cache and write buffer manager also seems to have a positive impact on performance (even though less memory is being used overall!).
  • BugFix - The robin_hood map we were using had memory leaks. We removed it from the codebase for the most part (and also patched it to latest to not leak!).
  • Added suppression of spam for "connection limit exceeded" log messages (these can occur frequently with some abusing clients). We rate limit the logging of these events to once every 5 seconds per IP address.
  • Added max_reorg and bitcoind_clients to admin RPC getinfo stats.
  • Added conf option: txhash_cache to specify max memory for some of the internal LRU caches (default: 128MB).
  • Controller: Ensure bitcoind is using txindex, and if not, warn the user
  • Upgraded rocksdb to version 6.14.6
  • Build: Added utility script contrib/build/rocksdb-static.sh which auto-rebuilds the rocksdb static library for you.
    • Useful if you are using arm64 since we don't bundle the lib for that arch, but it can be built using ths script!
  • Fixed some clang-11 compile warnings
  • Allow tor_proxy to be a hostname:port pair (in addition to IP:port)
    • If hostname:port, a DNS lookup will be done once at app init to resolve the tor_proxy to an actual IP address.
  • PeerMgr: Apply unconditional 30 second timeout for connectToHost()
    • This fixes an esoteric bug where if the tor_proxy is bad, some peers get stuck in limbo forever neither connected nor failed.
  • Allow for >65535 TXO IONums
    • Previous to this release, should a tx appear on the blockchain with >65535 outputs, it might confuse Fulcrum. This release fixes that situation.
  • -C/--checkdb now can be specified twice to do even more thorough checks on the db.
  • Fixed an issue where on BTC and BCH mainnet, -C/--checkdb would falsely report db corruption if it encountered the "dupe" txids that are known to exist on mainnet chain.
  • Set ScaleNet block prefetch to 10 after height 10,000. This is to avoid memory usage peaking to ridiculous levels.
  • Storage: gently close all open DBs on app exit. We call Flush/Sync and Close explicitly now on app close. (Even though rocksdb is very resilient, apparently doing it this way is easier on the db).
  • Misc. nits and fixups.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.4.0-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.4.0-x86_64-linux-ub16.tar.gz, which is compiled on a stock Ubuntu 16.04 system (using Docker) but with g++ 7.3.0 installed from this ppa source: ppa:jonathonf/gcc-7.3 & ppa:jonathonf/gcc

Both of the above binaries contain jemalloc, Qt5Core and Qt5Network from Qt 5.14.2 statically linked. They still requires libz2, libstd++, and the right libc version as dynamic libs on your system (but those are usually present if you are on a recent system).

If the first binary fails, try the second one (-ub16), which should work on older systems, hopefully.

Pre-compiled binaries for Windows

  • Fulcrum-1.4.0-win64.zip - Pre-built, statically linked Windows version.
    • It should "just work" on any Windows 7 or above 64-bit system.
    • Includes is a statically-linked Fulcrum.exe, built with jemalloc, Qt 5.14.2 and gcc 7.5.0.
    • Additionally, FulcrumAdmin.exe is included which is the python script, but made into a onefile .exe using PyInstaller.

See the .asc files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt


Binary builds for macOS coming soon -- Until then you can always build from source!