What's new:
This is an upgrade & enhancement release of Fulcrum. It provides a couple of new features, as well as some performance improvements and minor bugfixes. The database format remains unchanged and is both forward and backward compatible with previous versions of Fulcrum.
Summary of changes:
- Faster sync time - (Experimental) Added a new CLI arg (
--fast-sync
, or conf optionfast-sync
, default disabled). With this option enabled, Fulcrum will use a large UTXO Cache as it syncs, which should save on DB back-and-forth. The option takes a numeric argument which specifies the maximum RAM to give to the UTXO Cache, in MB. Larger values generally yield better results, but try not to exceed the system's available RAM. PR: #98.- In my experiments, a
--fast-sync
of2000
on BCH testnet3 yields ~1.7x speed improvement over no--fast-sync
. Using8000
for testnet3 yields a ~2x speedup. - Even modest values of
512
for--fast-sync
yield benefits on the order of 1.5x or more speedup. - Similar results were found for both BCH and BTC mainnet.
- I haven't tried it with an HDD setup yet, but in theory this option should be particularly beneficial for users using hard disks, since the savings on disk ops is very real with the cache and should be particularly impactful for such setups.
- Given that the option is still experimental (but perfectly safe to use!), I am making it opt-in for now, and the default behavior of Fulcrum is to sync as it did before, without any sort of UTXO Cache.
- This option has no effect outside of initial sync, and if the Fulcrum instance is given this option but it is already synched, the option does nothing. This is because a custom UTXO Cache is not really needed outside of initial sync since the regular rocksdb memory table caches give excellent performance results for normal, post-sync patterns of usage.
- In my experiments, a
- Added JSON-RPC batching support. Fulcrum now understands and serves JSON-RPC batches as described in the JSON-RPC 2.0 specification. PR: #97 .
- This option is controlled with new conf option
max_batch
, default345
, which controls the maximum size of batches that are accepted. Set to0
to disable batching (pre-1.6.0 behavior of Fulcrum). - Additionally, batches are limited to
max_buffer
bytes (default:8000000
), in terms of request + response size. - Special thanks to: @craigraw for suggesting I add this and for helping me to debug this and for catching at least 1 bug in the initial implementation. Thank you!
- This option is controlled with new conf option
- Increased the defaults on some of the resource-related conf options to more generous settings. The previous defaults were a bit on the conservative side, perhaps, and after 2 years of running my servers with higher-than-default settings, I have not experienced any problems, so I decided to make my own server's settings also be the factory defaults.
db_max_open_files
default is now40
(was20
)db_mem
default is now512
(was420
)max_buffer
default is now8000000
(was4000000
)workqueue
default is now15000
(was10000
)max_subs_per_ip
default is now75000
(was50000
)
- For Fulcrum nodes running on the BTC blockchain, the block prefetch has been increased to
250
blocks rather than100
(on account of BTC blocks being bounded in size to at most ~1.7 MB of data). - Minor performance enhancements in JSON-RPC processing.
- Minor corner-case bug fixes/correctness handling improvments for things like
server.banner
, Json serialization, and other miscellaneous odds & ends. - Update of the embedded
robin_hood
hash table library tov3.11.5
,
A Note about OpenSSL 1.1.1
Note to Linux server admins - There is an extant OpenSSL vulnerability in versions of OpenSSL 1.1.1-1.1.1j. If you are using Qt 5.15 with OpenSSL 1.1.1, it is recommended you update your system OpenSSL to 1.1.1k (or later). The Linux static build does not bundle OpenSSL, but instead loads the system OpenSSL at run-time. So please update your system to use OpenSSL 1.1.1k or later!
Windows static builds do embed OpenSSL, however, and they have been updated below with an embedded OpenSSL 1.1.1k.
Linux Ubuntu 16 (Xenial) static builds are compiled to look for the system OpenSSL 1.0.x series, which does not suffer from the above-linked vulnerability.
If unsure which OpenSSL Fulcrum is using, run ./Fulcrum --version
and it should tell you which libssl
version it found and is using at runtime.
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.6.0-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.6.0-arm64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system (for ARM64 bit) using Docker.Fulcrum-1.6.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
All 3 of the above binaries contain jemalloc
, libzmq
, Qt5Core
and Qt5Network
from Qt 5.15.2 statically linked. They still require 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 regular -linux
binary fails, try the second one (-linux-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.6.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
,libzmq
,Qt 5.15.2
,OpenSSL 1.1.1k
, 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!