Skip to content

Releases: cculianu/Fulcrum

Fulcrum 1.8.2

05 Oct 19:15
d330248
Compare
Choose a tag to compare

What's new:

This is a minor release of Fulcrum. The main change from the previous release is that support for BCH "chipnet" has been added, and is now auto-detected when the daemon returns the network name from getblockchaininfo as "chip". Upgrading from v1.8.1 is not required (but is still recommended, especially if you intend to use chipnet now).

To use chipnet, you should build BCHN MR !1600. A pre-built binary of BCHN supporting chipnet is available for download here.

Discussion and references to what chipnet itself is can be found here.


Summary of changes:

  • Added support for BCH "chipnet", which is auto-detected. The Fulcrum binary has a static list of seed peers, so that it may find other peers for chipnet specifically. (Calin Culianu)
  • Added some more unit tests for the merkle calculation code. (Calin Culianu)
  • Fixed a long-standing out-of-spec implementation of the CTRL-C/SIGTERM signal handler (made sure it's 100% async signal safe).
  • Added build support for compiling on FreeBSD. #137 (Andrew Kallmeyer)

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.8.2-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.8.2-arm64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.8.2-x86_64-linux-ub16.tar.gz, which is compiled on a stock Ubuntu 16.04 system (using Docker) but with g++ 8.1.0 installed from this ppa source: ppa:jonathonf/gcc-8 & ppa:jonathonf/gcc

All 3 of the above binaries contain jemalloc, libzmq, Qt5Core, Qt5Network (from Qt 5.15.6), and OpenSSL 1.1.1 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.8.2-win64.zip - Pre-built, statically linked Windows version.
    • It should "just work" on any Windows 10 or above 64-bit system.
    • Includes is a statically-linked Fulcrum.exe, built with jemalloc, libzmq, Qt 5.15.2, OpenSSL 3.0.1, and gcc 11.2.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.8.1

18 Sep 06:40
c80bf1b
Compare
Choose a tag to compare

What's new:

This is a minor release of Fulcrum. The main change from the previous release is that the release binaries now include a statically-linked OpenSSL 1.1.1 library. This should improve compatibility of the release binary with various Linux systems. Upgrading from v1.8.0 is not required (but is still recommended).


Summary of changes:

  • We now statically link OpenSSL 1.1.1 into all Linux release binaries. This should fix issues where users were getting various error messages related to OpenSSL on newer Linux systems. Closes #132 and #126.
  • Updated the Linux release binaries to use Qt 5.15.6 and gcc 8.x (gcc 8.1 for the -ub16 binary and gcc 8.4 for the regular Linux binary).
  • Updated the Windows release binary to use GCC 11.2.0 and OpenSSL 3.0.1.
  • Performance improvement for Merkle tree calculations (as much as 10% speedup).

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.8.1-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.8.1-arm64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.8.1-x86_64-linux-ub16.tar.gz, which is compiled on a stock Ubuntu 16.04 system (using Docker) but with g++ 8.1.0 installed from this ppa source: ppa:jonathonf/gcc-8 & ppa:jonathonf/gcc

All 3 of the above binaries contain jemalloc, libzmq, Qt5Core, Qt5Network (from Qt 5.15.6), and OpenSSL 1.1.1 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.8.1-win64.zip - Pre-built, statically linked Windows version.
    • It should "just work" on any Windows 10 or above 64-bit system.
    • Includes is a statically-linked Fulcrum.exe, built with jemalloc, libzmq, Qt 5.15.2, OpenSSL 3.0.1, and gcc 11.2.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.8.0

14 Sep 23:25
4e7102a
Compare
Choose a tag to compare

What's new:

This is an upgrade & enhancement release of Fulcrum. It provides some better support for the upcoming May 2023 BCH network upgrade, as well as some internal code refactoring changes. The database format remains unchanged and is both forward and backward compatible with previous versions of Fulcrum.

It is recommended that users running a BCH Fulcrum instance upgrade to this version before May 15, 2023 (if not sooner).


Summary of changes:

  • (BCH only) Added support for correctly indexing addresses containing CashTokens (#135)
  • (BCH only) Added support for parsing CashToken-aware cash addresses (type=2 and type=3) (#135)
  • (BCH only) Added support for parsing P2SH32 cash addresses (#135)
  • Fixed issue where spurious OpenSSL error messages were being printed to the console on newer Linux systems that use OpenSSL3 (#132).
  • Misc. code fix-ups and internal improvements.

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.8.0-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.8.0-arm64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.8.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

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.8.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, libzmq, Qt 5.15.2, OpenSSL 1.1.1k, 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.7.0

05 Jun 22:10
4ee413a
Compare
Choose a tag to compare

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:

  • Added Litecoin (LTC) support. (#114)
    • Tested and works with latest Litecoin Core (v0.21.2).
    • Mimble-wimble is "supported" in that it doesn't crash the app, but is mostly ignored since no Electrum clients understand mw txns.
    • It is advised you run litecoind with the -rpcserialversion=1 option so as to prevent serving clients mw txns that they may not understand.
    • Special thanks to Sellix, SRL for requesting and funding Litecoin support.
  • Blocks DL: Improved reliability of RPC connection to bitcoind on slow systems (or when downloading huge blocks) (#120)
  • On startup, proceed anyway if PeerMgr fails to start (but display a warning).
    • Should address issues when using Fulcrum on a chain or coin that is unknown to Fulcrum and for which no servers.json exists.
  • Added support for Bitcoin Core (BTC) signet (#108) ( @quad )
  • Simplify Docker builds (#106) ( @AaronDewes )
  • Fix RPM build error at Copr + cleanup (#111) ( @hegjon )
  • Fixed some typos in fulcrum-example-config.conf ( @pseudoramdom )
  • Misc. code fix-ups and internal improvements.

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.7.0-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.7.0-arm64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.7.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

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.7.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, libzmq, Qt 5.15.2, OpenSSL 1.1.1k, 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.6.0

25 Jan 23:00
5e95c0f
Compare
Choose a tag to compare

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 option fast-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 of 2000 on BCH testnet3 yields ~1.7x speed improvement over no --fast-sync. Using 8000 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.
  • 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, default 345, which controls the maximum size of batches that are accepted. Set to 0 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!
  • 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.
  • For Fulcrum nodes running on the BTC blockchain, the block prefetch has been increased to 250 blocks rather than 100 (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 to v3.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 an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.6.0-arm64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.6.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

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 with jemalloc, libzmq, Qt 5.15.2, OpenSSL 1.1.1k, 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.5.4

18 Nov 00:35
c698e85
Compare
Choose a tag to compare

What's new:

This is a maintenance release of Fulcrum. It provides a couple of minor fixes and a compatibility workaround for the Phoenix BTC wallet.


Summary of changes:

  • Added a compatibility workaround so that Fulcrum will be able to serve Phoenix wallet clients (BTC). Thanks @hMsats for reporting and troubleshooting. Closes issue #91.
  • Build system: Don't use system rocksdb lib if it is not compiled with RTTI support (which is required by Fulcrum). Instead, use the in-tree rocksdb static lib in that case. Thanks @EchterAgo, PR #92.
  • Demoted the spurious error message: Could not create per-IP data object in ServerBase::attachPerIPDataAndCheckLimits, which was wrongly being reported at error level "Error". It now is reworded to be less scary and is at the more appropriate "Warning" error level.
    • Note that this warning is not really a problem -- it can happen under normal operation if a client disconnects very quickly after connecting, before we can even process their connection fully.
    • An option would have been to not even warn when this happens. However if a client were to frequently do this, it is an indication of a misbehaving client, so the diagnostic message could perhaps be helpful to server admins.
  • Some tiny code fixups.

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.5.4-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.5.4-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, 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.5.4-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, libzmq, Qt 5.15.2, OpenSSL 1.1.1k, 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.5.3

28 Oct 05:13
bae810a
Compare
Choose a tag to compare

What's new:

This is a maintenance release of Fulcrum. It provides a few minor quality-of-life improvements for admins, as well as some minor internal fixes.


Summary of changes:

  • Added auto-detection for when SSL certs change on the filesystem.
    • This allows admins to swap out their SSL certs on the filesystem (when renewing them) without needing to restart Fulcrum.
  • Added --compact-dbs CLI arg.
    • This option compacts all of the databases on startup, which reduces disk space consumed by the DBs. Note that Fulcrum already compacts databases in the background periodically, so using this option is not strictly necessary.
  • Added support for bitcoind .cookie-file authentication.
    • To use cookie-file-based auth instead of a hard-coded user/pass, simply specify --rpccookie or -K on the CLI (or rpccookie= in the conf file) and supply the full path of the ".cookie" file that bitcoind generates. This file normally lives in the <bitcoind_datadir>/.cookie.
  • Added support for compiling against the Qt 6.x series.
  • Improved RPC auth error message. Thank you @ejose19 .
  • Added arm64 support to Docker image + added librocksdb.a for linux aarch64. Thank you @mainnet-pat .
  • RPM package fixups. Thank you @hegjon .
  • Compile fixup for fedora rawhide / newer rocksdb libs.
  • Various internal bugfixes and code quality fixups.

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.5.3-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.5.3-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, 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.5.3-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, libzmq, Qt 5.15.2, OpenSSL 1.1.1k, 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.5.2

09 Apr 15:04
f340a65
Compare
Choose a tag to compare

What's new:

This is a critical bugfix release of Fulcrum. It fixes a crash bug that we thought we handled in 1.5.1 but it turns out we did not fix. It is recommended that all admins update to 1.5.2 as soon as they can.


Summary of changes:

  • Fixed the crash bug that could be caused by a dangling reference to the MethodMap.
  • It turns out the simdjson upgrade to 0.9.2 was a lemon. We reverted back to 0.6.0. 0.9.2 appears to have some crash bugs in the westmere implementation.

Changes from 1.5.1

  • Recompiled Windows build to embed OpenSSL 1.1.1k which addresses these vulnerabilities in OpenSSL.
  • --version now also prints information on which libssl was loaded at run-time.
  • Minor fix: fixed compile error when building against Qt 5.12
  • Minor fix: fixed a typo in an error message
  • Updated servers.json (BCH) and servers_scalenet.json (BCH) to latest Electron Cash servers.

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.5.2-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.5.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, 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.5.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, libzmq, Qt 5.15.2, OpenSSL 1.1.1k, 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.5.0

03 Mar 08:39
42de9d5
Compare
Choose a tag to compare

What's new:

This is a major "minor" release of Fulcrum! It adds a new index, some new RPC methods, and optimizes some of the internals to be faster.

  • Note that this release will upgrade the database - But fear not -- the upgrade happens automatically the first time you upgrade from a previous version of Fulcrum.
    • It should take between 5 and 20 minutes on mainnet, ~1 minute on testnet. Just let it run and it will print progress information to the log.
    • The upgrade adds a new db index which requires an additional ~5.7GB for BCH mainnet and ~12GB for BTC mainnet.
    • The upgrade happens only once and does use more space but it's worth it!
    • If you hit ctrl-c in the middle of the upgrade, that's fine. It will just restart the next time.
    • Adding the new index still keeps the datadir backwards compatible. You can always go back to an earlier version of Fulcrum.
      • However if you do mix-and-match earlier versions of Fulcrum with this one, the next time you run 1.5.0+, the txhash index will need to be rebuilt since it will be "stale" (because previous versions of Fulcrum ignore the new index and it will be out of synch as a result).
    • If you are curious: PR #75 was the set of commits that adds this index, so you can read a more detailed description of the index there (plus read the code if you are so inclined!).

Summary of changes:

  • RPC improvements & changes
    • Added 7 new RPC methods to support double-spend proofs as well as allowing for notifications on transaction status changes.
    • Bumped RPC protocol version to 1.4.5.
    • blockchain.transaction.get_merkle now no longer requires the height parameter (but passing it is still recommended as a performance optimization).
  • Added double-spend proof support. Double-spend proofs are now queried and tracked if the bitcoin daemon supports them via RPC; currently only BCHN v22.3.0 (gitlab master) supports them.
  • Performance - Optimized the code to make calculating the status hash 2x faster.
  • Safety - Reduced the maximum max_history size that Fulcrum supports from 100M to 25M. Note that there are no histories on the blockchain that are large enough to hit this limit -- the limit is theoretical and more of a safety measure to prevent pathological circumstances. After we upgrade to protocol v1.5.0 in the future, this limit will no longer be in place since histories will be paged and status hashes will be computed differently.
  • Added a new index that maps tx_hash -> TxNum (see blurb in the "What's new" section above)
    • Bumped default db_mem to 420 MB from the previous 384 MB (this is to account for the new index's needs).
  • Made the app log more exceptional circumstances as errors to the log (such as bumping into the max worker job queue limit being hit, and others).
  • Misc. improvements to the build system to auto-detect a few things better.
  • Misc. unit tests and benches added
  • Misc. fixups and code quality improvements

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.5.0-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.5.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, 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.5.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, libzmq, Qt 5.15.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.4.1

11 Feb 22:22
60ad955
Compare
Choose a tag to compare

What's new:

This is a maintenance release of Fulcrum. Key highlights include the improved mempool synch code for BTC, as well as the addition of ZMQ support for better responsiveness when new blocks arrive. It is recommended that all server admins upgrade to this version at their earliest convenience.

As is generally the rule with Fulcrum: No breaking database changes were introduced and admins may freely switch back and forth between this and previous versions of Fulcrum for a pre-existing datadir.


Summary of changes:

  • Performance - Improved mempool synch performance for very full mempools (such as on BTC).
    • Fixed issues for in particular BTC where on first synch, it would sometimes take a very long time to synch the initial mempool.
      • BTC mempools may still take upwards of 2 minutes to synch the first time (after a restart of Fulcrum) -- if the mempool has >100k tx's in it, but it won't take 30 mins or more (as it sometimes did before in pathological cases! Sorry about that!).
    • App performance overall have been improved for BTC.
  • Low-Latency - Added support for receiving ZMQ notifications when new blocks come in from bitcoind.
    • If enabled, then Fulcrum will immediately respond when new blocks arrive, thus improving the experience for users.
      • If no ZMQ is enabled, the polling technique is still there as a fallback.
    • Requires a bitcoind that supports ZMQ such as: Core, BCHN, or the soon-to-be-released BU 1.9.1+.
      • To enable: add e.g. zmqpubhashblock=tcp://0.0.0.0:8433 to your bitcoin.conf (the port doesn't matter, pick an unused one).
      • Fulcrum will automatically see the zmq port and use it for notifications (requires that you are using a static build or that you built Fulcrum yourself with libzmq).
  • Upgraded to Qt 5.15.2 for the static builds (linked below).
  • Misc. nits, fixups, and code quality improvements.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.4.1-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.4.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, 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.4.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, libzmq, Qt 5.15.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!