Fulcrum 1.4.0
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
anddb_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
andbitcoind_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 anUbuntu 18.04
system using Docker.Fulcrum-1.4.0-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 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 withjemalloc
,Qt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .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!