Skip to content

Releases: cculianu/Fulcrum

Fulcrum 1.4.0

14 Dec 18:14
40ce944
Compare
Choose a tag to compare

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!

Fulcrum 1.3.2

06 Dec 16:33
b78b60c
Compare
Choose a tag to compare

What's new:

This is largely a performance release. The major new change is that mempool handling has been made much more efficient than in previous versions.

Summary of changes:

  • Performance - The mempool handling code has been heavily redone to cope with large / full mempools in a much more performant manner. Gone are the days of stalls on BTC or on a full ABC chain!
    • Added logic to support mempool drops efficiently.
    • We now do all mempool processing entirely in parallel (with respect to the main app), only committing changes with the lock held at the very last minute when all data is ready. (Previous to this it would hold a lock for entirely too long).
    • Made the mempool itself take up 25% less memory by using more compact data structures
  • Performance - Reduced peak memory consumption in some execution paths (namely when downloading blocks on ScaleNet).
  • Versatility - Added the conf file setting max_reorg (default: 100). This specifies how much block undo data to keep in the database.
    • Previous to this release internally the hard-coded value was always 100. Now it is configurable to any value from 100 to 500,000.
    • Since thousand-block-deep reorgs are a rare event (unless on a test chain), the default is fine for most users.
    • Users of test or experimental chains may wish to set this to a high value if they anticipate needing to reorg past the default of 100 blocks.
    • Note: As always, if the reorg limit is hit and Fulcrum tries to reorg to a block deeper than it has undo data, Fulcrum will error out and require a full resynch.
    • Note 2: Storing huge amounts of block undo data comes with a cost in terms of disk space consumed by the undo database, so the default setting is an acceptable tradeoff in that regard.
  • Added CLI arg --bd-clients (conf file var: bitcoind_clients) - This controls the number of bitcoind HTTP JSON-RPC clients to spawn in parallel when connecting to the bitcoind node. The default is 3. Note that by default bitcoind is configured to only use 4 RPC threads, so if you increase this past 4, you may need to set rpcthreads= in your bitcoin.conf file. Also note that in general setting this to values much higher than the number of processors is not a good idea either. The default setting is good unless you really know what you are duning.
  • Default settings for two conf file variables have changed. bitcoind_timeout now defaults to 30 seconds (from the previous 20), and db_max_open_files now defaults to the much more conservative value of 30 (previously it was 100).
  • Various small refactorings and bugfixes.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.3.2-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.3.2-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.3.2-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!

Fulcrum 1.3.1

11 Nov 22:50
68653f5
Compare
Choose a tag to compare

What's new:

Summary of changes:

  • Added better handling for BTC RBF tx's randomly dropping out of the mempool.
  • Increased the PeerClient buffer size to 256KiB to allow for potentially large server.peers.subscribe messages from BTC peers.
  • Some internal nits and code refactoring.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.3.1-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.3.1-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.3.1-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!

Fulcrum 1.3.0

10 Nov 13:40
da56409
Compare
Choose a tag to compare

What's new:

Summary of changes:

  • Stability - On Unix systems (Darwin, Linux, BSD), Fulcrum now asks the OS to raise its max open files to the hard limit (RLIM_NOFILE set to rlim_max). This is to ensure Fulcrum won't run out of file descriptors should it get 1000 or more connections from clients. (On Windows nothing has changed since Windows has 16.7 million max open handles per process always).
  • Performance - The simdjson backend has been tested and is now the default backend for JSON parsing on platforms that support it. To not use simdjson, you can specify --no-simdjson from the CLI or simdjson = false in the conf file. Simdjson is 2x faster than the previous parser, so it is recommended.
  • BTC Support - Fulcrum can now work with BTC! Just start a new Fulcrum instance and point it to a Bitcoin Core bitcoind and it will understand that it's serving up BTC. Note that at this time only Bitcoin Core is supported as the bitcoind for BTC (v0.17.0 or newer).
  • ScaleNet Bugfix - Fulcrum pointed to ScaleNet wasn't synching properly on extremely large blocks and had various quirks.
    • This is mainly because Fulcrum was rejecting large JSON replies from bitcoind.
    • Made sure the maximum size of data we accept from bitcoind connections is extremely large (600 MiB). This allows us to download large 256MB blocks from bitcoind for ScaleNet.
    • Added a larger timeout (20 secs) for requests to bitcoind originating in the Controller class.
  • Bugfix - Made POSIX signal handling safer, e.g. for Ctrl-C, etc. We only call into reentrant functions now in the signal handler (this means we cannot allocate!) -- and the real work done to shutdown the app is now done outside of the signal handler in a helper thread.
  • Added the advanced option bitcoind_timeout to the conf file (CLI: --bd-timeout). It defaults to 20.0 seconds. See the sample configuration file for an explanation of what this does, but for most users it's safe to ignore. The tl;dr is: it provides a way to be more tolerant of slow bitcoind's in case you are synching to a bitcoind that is not on the local machine.
  • Defaults Changed -- DB memory allocation now is much more generous by default. It defaults to db_mem = 768 (MB) and db_max_open_files = 100. Previous values were 512 and 25 respectively. It is hoped that most people running Fulcrum have at least 2GB of RAM so these new more generous defaults should not be a problem, but rather a boon for performance.
  • Various internal refactoring and small performance tweaks.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.3.0-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.3.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.3.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!

Fulcrum 1.2.12

02 Nov 01:56
1ff5af6
Compare
Choose a tag to compare

What's new:

This is mainly a performance release of Fulcrum. It adds support for synching while bitcoind is still in "initial block download" (IBD). In addition, the simdjson JSON parser was added.

Summary of changes:

  • Convenience - Added support for synching Fulcrum while bitcoind is in IBD (initial block download). This should help new server admins get started more quickly, since one no longer has to wait for bitcoind to be fully synched before starting a Fulcrum synch.
  • Performance - Added the simdjson library as an optional JSON parser backend to Fulcrum. Enable it with --simdjson on the CLI or simdjson=true in the config file. This parser is 2x faster than the regular parser. Since the regular parser has been war-tested for several releases, the simdjson parser must be explicitly enabled. It will be the default, however, in a future release. (So far it appears extremely stable and reliable, and is perfectly safe to use). Enabling this parser is recommended.
    • If you want to test it out, simdjson can be dynamically enabled or disabled at runtime by using the FulcrumAdmin script like so:
    $ ./FulcrumAdmin -p 8000 simdjson 0  # 0 = disable simdjson
    $ ./FulcrumAdmin -p 8000 simdjson 1  # 1 = enable simdjson
    $ ./FulcrumAdmin -p 8000 simdjson    # no args - query simdjson status
  • Added the advanced option db_use_fsync to the conf file. If set to true (default: false), the rocksdb library will use fsync() calls as opposed to fdatasync(). fsync() is slower but works around some potential issues in older Linux kernels and the ext4 filesystem. See the rocksdb documentation about this option.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.2.12-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.2.12-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.2.12-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!

Fulcrum 1.2.11

13 Oct 20:08
4b37bb2
Compare
Choose a tag to compare

What's new:

This is a minor revision of Fulcrum. It adds support for the new BU and BCHN "scalenet" network.

Summary of changes:

  • Added scalenet support! This is a new experimental testnet designed for big blocks and stress testing (256 MB blocks) that BU and BCHN will start to support soon. When BCHN and BU release their scalenet-capable bitcoind's, Fulcrum 1.2.11 will be ready to synch against this network!

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.2.11-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.2.11-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.2.11-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!

Fulcrum 1.2.10

11 Sep 08:40
8565839
Compare
Choose a tag to compare

What's new:

This is a performance tweaking release of Fulcrum. Upgrading to this version is optional but recommended.

Summary of changes:

  • Added jemalloc support! The static binaries linked below are all now linked to jemalloc which improves memory allocation performance significantly under load. In tests, jemalloc also causes less "heap fragmentation" which means that Fulcrum should have a slightly smaller memory footprint now.
  • Added testnet4 support! #50. This is a new experimental testnet that BU and BCHN will start to support soon. When BCHN and BU release their testnet4-capable bitcoind's, Fulcrum 1.2.10 will be ready to synch against this network!
  • Added a new config option, db_mem (CLI: --db_mem) to try and constrain rocksdb's memory usage for some operations. Defaults to 512MB. Note that even with this option rocksdb may decide to use more memory -- but this option does decrease the minimum footprint somewhat under load.
  • Fixed misuse of notation MiB versus MB in some of the admin RPC output and other places in the codebase.
  • Miscellaneous fixes and improvements to the Fulcrum.pro file, RPM spec, and docker build systems (Jonny Heggheim, Axel Gembe)
  • Fix for Windows if building with -DENABLE_TESTS mode.
  • Added process memory usage information to the getinfo admin RPC.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.2.10-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.2.10-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.2.10-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!

Fulcrum 1.2.9

12 Aug 16:06
8f50d71
Compare
Choose a tag to compare

What's new:

This a bug-fix release of Fulcrum. It is strongly recommended that all admins upgrade to this version at their earliest convenience.

Summary of changes:

  • Bug fix - The listunspent call had a regression/bug which was introduced in Fulcrum v1.2.5 (#47). It has now been fixed. All apologies if this caused anybody any trouble.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.2.9-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.2.9-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 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.2.9-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 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!

Fulcrum 1.2.8

28 Jul 13:21
a8134ad
Compare
Choose a tag to compare

What's new:

  • Improved bchd compatibility - A new option was added (CLI: --bitcoind-tls, conf file: bitcoind_tls=true) to specify connecting to bitcoind using TLS (HTTPS) rather than plaintext sockets (HTTP). (Presently only bchd offers HTTPS for its JSON-RPC interface, which is why this feature is labelled a "bchd compatibility" feature.)
  • Optimized bitcoind requests - Some code paths for bitcoind JSON-RPC requests have been made slightly more efficient in the common case (this should reduce CPU usage for servers that receive many requests from Mist miners).
  • WSS-specific certificate support - Added the ability to specify an alternate certificate/key pair for WSS sockets. This allows the server to present one certificate for -s (Electron Cash SSL) sockets while presenting a different certificate for -W (wss://) sockets.
    • This feature is needed because WSS clients running in a browser require the server present CA-signed certs, while older Electron Cash clients may reject a server that switches from a pinned self-signed cert to a CA-signed cert.
    • It's recommended that server admins keep their old self-signed certs for Electron Cash -s/--ssl ports, and use CA-signed certs for -W/--wss ports.
    • WSS-specific cert. & key can be specified with --wss-cert and --wss-key (conf file: wss-cert= and wss-key=).
  • WebSocket fix - Correctly handle multiple values in the Connection: header. Some user agents and/or browsers may send multiple comma-delimited values here, so we must accept such headers. This should make WSS work reliably with all browsers. #37 (Axel Gembe)
  • WebSocket fix - On error, flush the socket to ensure that the other end gets the error reply before disconnecting. #39 (Axel Gembe)
  • Added the --tls-disallow-deprecated option (conf file: tls-disallow-deprecated=true). If set, this option makes all TLS/SSL sockets server-wide refuse to fall-back to deprecated protocol versions, requiring basically that clients speak TLS v1.2 or above. #42
  • ServerSSL: Do not request certificates from clients. The fact that previous code did so was a bug, but it happened to work anyway with Electrum Cash clients, while being antagonistic to WSS clients. This fix makes WSS work properly for all setups. #38 (Axel Gembe).
  • bitcoind RPC: Handle "Connection: keep-alive" header properly (this header may appear if using a proxy such as nginx to connect to bitcoind). (Cédric Félizard)
  • Minor fix: improved handling of bitcoind timeouts
  • Removed the periodic printing of "Fulcrum v1.2.8 (Release) ..." to the log. This message appearing every hour in the log was unnecessary.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.2.8-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.2.8-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 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.2.8-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 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!

Fulcrum 1.2.7

19 Jul 19:09
a396cff
Compare
Choose a tag to compare

What's new:

This a maintenance release of Fulcrum. It improves performance slightly for servers being hammered by Mist miners. It also contains a few under-the-hood features that will come in handy in the future.

  • Optimized JSON parsing to shave more percentage points off CPU consumption when processing client requests (such as the numerous requests coming in from Mist miners).
  • Optimized internal asynchronous message-passing in the app to be more performant. This helps to reduce load from Mist miner requests, and it should also be visible on initial synch as a 1%-5% reduction in initial synch time.
  • bchd support is ready! It still requires bchd implement persistent connections (#28 ) -- however that's in the works with the bchd team and is in this PR in the bchd repo: gcash/bchd#384. If you want to use Fulcrum with bchd -- you will need to build against that branch.. or wait until the bchd team releases a version with that branch merged. (I have been running bchd from that branch against Fulcrum for days now and it works great!) Update: bchd v0.16.5 now supports persistent connections. Fulcrum and bchd are now 100% compatible with each other!
  • Fixed a minor bug where sometimes the getinfo admin RPC command would show a nonsensical value for "avg_fee_sats_B" if the mempool was empty. Now it shows 0, as it should when there are 0 tx's!
  • Internal refactoring of code in some subsystems (such as hashing, bloom filtering, BitcoinD communication) to be more maintainable, easier to reason about, and also slightly faster.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.2.7-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.2.7-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 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.2.7-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 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!