Fulcrum

A fast & nimble SPV Server for BCH, BTC, and LTC

OTHER License

Stars
336
Committers
15

Bot releases are hidden (Show)

Fulcrum - Fulcrum 1.11.0 Latest Release

Published by cculianu 4 months ago

What's new:

This release brings with it performance improvements and an update to the pre-built binary's compiled-in RocksDB version (updated to latest 9.2.1). The latest RocksDB is faster and also better, so yay!

Also in this release we switched the Linux pre-built binary to statically-link libstdc++ which should improve compatibility for the binary and have it "just work" on a wider variety of systems.

NOTE: Since this release contains an updated RocksDB in the release binary, RocksDB will internally "upgrade" the data dir to the newer RocksDB format on first-run (this is fast). However, this means that users that run this version cannot "go back" to the previous Fulcrum versions before 1.11.0 with the same data dir, because RocksDB is backwards compatible but not "forward compatible".


Summary of changes:

  • Rename CLI/conf file option --fast-sync -> --utxo-cache
    • Also renamed various conf file options that contain hyphens in their names (-) to also work with _ instead (e.g. ts-format -> ts_format), so that they can be passed-in from env. vars.
    • Old option names that were renamed still are supported.
  • Switched codebase to use C++20. As a result of this, we also redid the static builds to use newer tools (e.g. gcc 13) and to also statically link libstdc++.
  • Switched pre-built binaries to use newer RocksDB v9.2.1. This breaks "forward compatibility" with previous Fulcrum releases, but should bring in performance and stability improvements from latest RocksDB.
  • Fixes for compatibility between datadirs copied between Windows & Unix (they should all be interoperable now).
  • Updated static pre-built binaries to use latest libzmq and libjemalloc
  • Performance optimizations related to RPA indexing, in particular, testnets as well as low-core-count machines should benefit from the improvements.
  • Controller: Ensure download blocks tasks use all physical CPUs.
  • IPv6: Render ip6:port as [ip6]:port in user-facing strings. Also accept this notation from the conf. file
  • Various fixups related to C++20 in the codebase such as fix some compile warnings, update to newer idioms such as: C++20 concept/requires replaced older std::enable_if, etc.
  • Fix for compiling against Qt 6.7.1
  • Fixed typos in fulcrum-example-config.conf & fulcrum-quick-config.conf
  • RPC: Support downloading of >1GiB blocks from bitcoind (requires Qt6)
  • Fixed assert() in Controller.cpp -- before this fix "Debug" builds were not working with RPA (oops! Fixed!).
  • Refreshed BCH & BTC compiled-in server lists
  • Fix to support BU chipnet (which is reported as "chipnet" rather than "chip" by BU).
  • Added FulcrumAdmin to the dockerhub docker image.
  • Misc. internal code quality nits, tweaks and fixes; various compiler warning fixups

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.11.0-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.11.0-arm64-linux.tar.gz, which is compiled on an Ubuntu 20.04 system (for ARM64 bit) using Docker.

All of the above binaries contain jemalloc, libzmq, Qt5Core, Qt5Network (from Qt 5.15.6), OpenSSL 1.1.1 and libstdc++ statically linked. They still require libz2, and the right libc version as dynamic libs on your system (but those are usually present if you are on a recent system).

Pre-compiled binaries for Windows

  • Fulcrum-1.11.0-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.13, OpenSSL 3.3.0, and gcc 13.2.0.
    • Additionally, FulcrumAdmin.exe is included which is the python script, but made into a onefile .exe using PyInstaller.
      • NOTE Windows virus scanners have been known to erroneously identify FulcrumAdmin.exe as containing a virus. This is because many heuristic scanners dislike the use of PyInstaller onefile .exe's. See: #203. Please ignore this -- we contain no viruses! Also please complain to your virus software vendor about this.

See the .asc file for signatures; I signed the sha256 hashes of all the release binaries. 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 - Fulcrum 1.10.0

Published by cculianu 8 months ago

What's new:

Added official Reusable Payment Address (RPA) support. A few new RPCs are offered for servers that have it enabled (default on for BCH only, off for other coins). Also fixed a few minor esoteric bugs.


Summary of changes:

  • Added RPA support (#234 ). This work was community-funded. Thanks to all the contributors to my flipstarter that helped pay for this work.
    • Added a new index, rpa, which is currently only ~42M on mainnet. It starts indexing from block 825000 on mainnet (can be controlled with rpa_start_height= conf file option).
    • RPA is only on-by-default for BCH, off for all other coins. Can be manually enabled/disabled with --rpa or rpa=1 from conf file.
    • A few new RPCs are offered to clients if the index is enabled.
    • Bumped Electrum Cash protocol version to 1.5.3
  • Bugfix: Deal with esoteric 0-input and 0-output txns better (even though they can't happen due to consensus, there was a uint wraparound issue if they do happen to be encountered in some esoteric environments). Fixes #235.
  • Bugfix: In rare circumstances, if the "Download Blocks Task" is interrupted / gets an error, one of the 3 BitcoinD client threads may go out to lunch and never become usable again to do work. Symptoms would include it spamming "Reconnecting ..." messages to the log every 5 seconds. This has been corrected.
  • Lots of code refactoring and code fixups.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.10.0-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.10.0-arm64-linux.tar.gz, which is compiled on an Ubuntu 20.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.10.0-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.10.0-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.
      • NOTE Windows virus scanners have been known to erroneously identify FulcrumAdmin.exe as containing a virus. This is because many heuristic scanners dislike the use of PyInstaller onefile .exe's. See: #203. Please ignore this -- we contain no viruses! Also please complain to your virus software vendor about this.

See the .asc file for signatures; I signed the sha256 hashes of all the release binaries. 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 - Fulcrum 1.9.8

Published by cculianu 9 months ago

What's new:

This is a minor correctness improvement release of Fulcrum. See issue #221. Upgrading to this release is optional but is strongly recommended for BTC (and LTC) node operators since the fix contained in this release affects them. (BCH users are unaffected.)


Summary of changes:

  • Fixed a correctness bug whereby the mempool fee histogram returned by the mempool.get_fee_histogram RPC was calculating fees in sats-per-serialized-byte and not sats-per-vbyte. This affects segwit coins like LTC and BTC. BCH users are unaffected.
    • As a result of the histogram using the wrong fee rate (sats/B rather than sats/vB), the results were a bit too optimistic and painted a picture of a lower-fee situation than actually exists in the real mempool (this is because serialized size almost always is >= vsize, so fees computed as sats/B are usually lower than fees computed in sats/vB). See issue #221
    • It is recommended that BTC and LTC server operators upgrade to Fulcrum v1.9.8 at their earliest convenience.
    • Fee estimates and "distance from tip" if using Electrum BTC should now be more accurate and more in-line with what a wallet connected to ElectrumX servers would see.
  • Some internal code refactoring and code cleanup to reduce boilerplate code in src/bitcoin/transaction.h and src/bitcoin/transaction.cpp.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.9.8-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.9.8-arm64-linux.tar.gz, which is compiled on an Ubuntu 20.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.9.8-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.9.8-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.
      • NOTE Windows virus scanners have been known to erroneously identify FulcrumAdmin.exe as containing a virus. This is because many heuristic scanners dislike the use of PyInstaller onefile .exe's. See: #203. Please ignore this -- we contain no viruses! Also please complain to your virus software vendor about this.

See the .asc file for signatures; I signed the sha256 hashes of all the release binaries. 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 - Fulcrum 1.9.7

Published by cculianu 11 months ago

What's new:

This is a bugfix release of Fulcrum. A very rare corner-case "abort" bug introduced in version 1.9.4 has been identified and fixed. See issue #214. While this bug is very rare and requires precise timing to occur, please do upgrade to 1.9.7 if you are running 1.9.4, 1.9.5 or 1.9.6 (1.9.3 and earlier are unaffected).


Summary of changes:

  • Fixed a rare corner-case race condition leading to a potential "abort" out of Fulcrum (server death), in very rare cases while synching mempool. It wouldn't lead to data corruption but could be highly annoying. Probability of it occurring was close-to-but-not-0. See issue #214 and commit 34a825a23f5a89c78bf3cd93443153e9dd4eb52c.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.9.7-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.9.7-arm64-linux.tar.gz, which is compiled on an Ubuntu 20.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.9.7-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.9.7-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.
      • NOTE Windows virus scanners have been known to erroneously identify FulcrumAdmin.exe as containing a virus. This is because many heuristic scanners dislike the use of PyInstaller onefile .exe's. See: #203. Please ignore this -- we contain no viruses! Also please complain to your virus software vendor about this.

See the .asc file for signatures; I signed the sha256 hashes of all the release binaries. 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 - Fulcrum 1.9.6

Published by cculianu 11 months ago

What's new:

This is a minor protocol upgrade release of Fulcrum. 4 new protocol methods were added (not yet used by any major wallet, but they will be hopefully someday!). Additionally, some minor internal improvements were made, and the Windows binary now also prints in color if outputting to the console.


Summary of changes:

  • Protocol version was updated to 1.5.2.
  • Added a new optional conf file parameter daemon_passthrough_subnets.
  • Changed the way --fast-sync is enforced. Fixes issue #208.
  • Made sure the arm64 static build uses Ubuntu 20 as the base docker image for extra compatibility. Issue #209.
  • Made the Windows build output color to the console. Commit 40a27ed7acb74964ad783b4184c458bbffa4baed.
  • Miscellaneous internal fixups and cleanup.
    • Fixed some GCC 13 compiler warnings. Commit 40a27ed7acb74964ad783b4184c458bbffa4baed.
    • The testing code for --bench mempool now can download real coins from a bitcoind daemon (optionally) to go along with the mempool.dat file it ingests. Commit 74338ba2a045bc73e8644fc01152d5a017fab2bd.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.9.6-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.9.6-arm64-linux.tar.gz, which is compiled on an Ubuntu 20.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.9.6-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.9.6-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.
      • NOTE Windows virus scanners have been known to erroneously identify FulcrumAdmin.exe as containing a virus. This is because many heuristic scanners dislike the use of PyInstaller onefile .exe's. See: #203. Please ignore this -- we contain no viruses! Also please complain to your virus software vendor about this.

See the .asc file for signatures; I signed the sha256 hashes of all the release binaries. 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 - Fulcrum 1.9.5

Published by cculianu 12 months ago

What's new:

This is a hotfix release. 1.9.4 was a lemon -- it contained a bug whereby the server would hang waiting for the mempool (due to inappropriate use of thread variable signals). It has been fixed. I sincerely apologize for the error on my part. All users of 1.9.4 should upgrade to 1.9.5 immediately.

Otherwise, 1.9.4 was a good improvement for performance. 1.9.5 is just like 1.9.4 except it lacks the synch hang bug.

Release notes from 1.9.4:

  • This is a bugfix + performance improvement release of Fulcrum. In this release, the performance of mempool synching from bitcoind has been improved by as much as ~30% for large mempools. Additionally, a rare corner-case bug related to mempool synching has been fixed. It is recommended that all admins running public Fulcrum servers update to v1.9.4 at their earliest convenience.

Summary of changes (vs 1.9.3):

  • Performance! - Improved the performance of the SynchMempoolTask by ~30% for large mempools. This is particularly important when Fulcrum first starts up against a daemon that has chronically full mempools (such as on BTC). (#207).
  • Bugfix - A rare corner-case bug involving unsent scripthash notifications during some unlikely-but-possible mempool scenarios has been fixed. (#207).
  • Miscellaneous:
    • macOS: The source tree now includes a "fat" binary for librocksdb.a which work on both x86_64 and arm64 (Apple Silicon).
    • Refactored the SynchMempoolTask to a separate compilation unit
    • Other small nits.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.9.5-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.9.5-arm64-linux.tar.gz, which is compiled on an Ubuntu 22.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.9.5-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.9.5-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.
      • NOTE Windows virus scanners have been known to erroneously identify FulcrumAdmin.exe as containing a virus. This is because many heuristic scanners dislike the use of PyInstaller onefile .exe's. See: #203. Please ignore this -- we contain no viruses! Also please complain to your virus software vendor about this.

See the .asc file for signatures; I signed the sha256 hashes of all the release binaries. 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 - Fulcrum 1.9.3

Published by cculianu 12 months ago

What's new:

This is a maintenance release of Fulcrum. In this release, the performance of mempool synching from bitcoind has been drastically improved.


Summary of changes:

  • Performance! - Improved the performance of the SynchMempoolTask by over 3x. Synching mempool has never been faster! This is particularly important when Fulcrum first starts up against a daemon that has chronically full mempools (such as on BTC).
  • Miscellaneous internal code fixes:
    • Compile-time cleanups to remove Qt 6.6.0 deprecated warnings.
    • We no longer compile the Fulcrum release with -fomit-frame-pointer since this optimization is pointless on 64-bit non-register-impaired architectures and what's more, it may lead to compiler bugs.
    • Other small nits.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

  • Fulcrum-1.9.3-x86_64-linux.tar.gz, which is compiled on an Ubuntu 18.04 system using Docker.
  • Fulcrum-1.9.3-arm64-linux.tar.gz, which is compiled on an Ubuntu 22.04 system (for ARM64 bit) using Docker.
  • Fulcrum-1.9.3-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.9.3-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.
      • NOTE Windows virus scanners have been known to erroneously identify FulcrumAdmin.exe as containing a virus. This is because many heuristic scanners dislike the use of PyInstaller onefile .exe's. See: #203. Please ignore this -- we contain no viruses! Also please complain to your virus software vendor about this.

See the .asc file for signatures; I signed the sha256 hashes of all the release binaries. 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 - Fulcrum 1.9.2

Published by cculianu about 1 year ago

What's new:

This is a bugfix maintenance release of Fulcrum. It fixes a few compile bugs as well as potential BTC-related issues, and adds some optional parameters to the blockchain.*.get_history family of calls.

For BTC: we updated the code to the mempool.get_fee_histogram call to replicate more closely what ElectrumX would return (issue #197). We also added better compatibility with Bitcoin Core v25.0.0 for the sendrawtransaction API call to bitcoind core. All BTC users of Fulcrum are strongly urged to update to this version at their earliest convenience.


Summary of changes:

  • Fixed some build-related issues, such as rocksdb 8 source compatibility.
  • Some code refactoring and cleanup
  • Implemented "paging" for the blockchain.*.get_history call(s) (issue #180). This involves two extra optional parameters, from_height and to_height to the call(s). See: https://electrum-cash-protocol.readthedocs.io/en/latest/protocol-methods.html#blockchain.scripthash.get_history.
    • Only Fulcrum servers declaring protocol version 1.5.1 or above support this facility as of now.
  • Improved compatibility with bitcoin core 25.0.0 to behave exactly like previous versions when sending txns (that is, allow it to "burn" onto OP_RETURNs). (#181)
  • Fix to the mempool.get_fee_histogram RPC to more closely model what ElectrumX would return. Hopefully this fixes some issues seen on BTC. (#197)

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

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

Published by cculianu over 1 year ago

What's new:

This is a quality-of-life minor maintenance release of Fulcrum. It adds a couple of small but useful features (as requested by users), and updates the server lists for BCH. Upgrading to this version is optional but as always, recommended.


Summary of changes:

  • Minor fix for cashaddr parsing
  • Added Electrum protocol version(s) to program --version output
  • Updated BCH mainnet server lists
  • Minor build fix: Make compilation of sha256_sse4.cpp ASM extensions really not compile in the !USE_ASM configuration
  • Added anon_logs configuration option. If set to anon_logs = true in the conf file, IP addresses and TXIDs will be hidden from any non-debug-level logs.
  • Added support for reading configuration file vars from the environment. Useful for docker setups. Specify _ENV_ as the configuration "file" and then no actual file is really read, just the process's environment is scanned for conf vars.
  • Added CLI arg --pidfile <file> and/or conf file variable pidfile = <file>. If set, the Fulcrum process will write its PID to this file on program startup (and will delete the file on program exit).
  • Minor build fixup for macOS + Qt 6.5.0
  • Misc. other minor build fixes for GCC 13.
  • Added the query command to the FulcrumAdmin script. This works exactly like the same command in ElectrumX's electrumx_rpc admin script. It allows one to query balance, history, and unspent outputs for any address or script output.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

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

Published by cculianu almost 2 years ago

What's new:

This is an important release of Fulcrum focusing on additional CashToken support (BCH only). Support for CashTokens has been expanded with some RPC protocol additions. RPCs such as blockchain.scripthash.listunspent may now (optionally) return token information for UTXOs that contain tokens. Since the API has changed, the maximum electrum-cash protocol version is now 1.5.0. However, by default Fulcrum continues to support protocol 1.4.x and is backwards compatible with clients requesting this protocol version. For more information on the RPC API changes, see the latest changes to the Electrum Cash Protocol Specification.

Additionally, the database format has changed slightly, and your datadir will be automatically upgraded to the new V2 format*. That is, if you run Fulcrum 1.9.0 against your current synched datadir, it will automatically be upgraded to V2. Older Fulcrum versions (which only understand V1) will not be able to read the datadir after it is upgraded, however.

* - The exception to this is if you are running your server synched to current BCH ChipNet, in which case you will need to delete your datadir and resynch because ChipNet has CashTokens activated on it already, and we need to grab on-chain token information again from bitcoind via a full resynch. Fulcrum will complain and exit with an error telling you to resynch if you are on ChipNet.

Note for BTC & LTC users: It is safe to upgrade to this version of Fulcrum if you are using BTC or LTC, since the API changes affect BCH only. This version of Fulcrum behaves identically to previous versions if serving up BTC or LTC blockchain data, with 0 negative performance or other impact for BTC or LTC servers.


Summary of changes:

  • Upgaded protocol to to version 1.5. Fulcrum still supports 1.4.x, but 1.5 adds the ability to retrieve CashToken token data for UTXOs containing such data (BCH only).
    • blockchain.*.listunspent now may optionally return token information for UTXOs that contain CashTokens (BCH only).
    • blockchain.utxo.get_into now will return token information if the UTXO in question contains CashTokens (BCH only).
    • blockchain.*.get_balance now may optionally return the balance with or without token UTXOs (BCH only).
    • For a full summary of changes, see: https://electrum-cash-protocol.readthedocs.io/en/latest/protocol-changes.html#version-1-5-0
  • Some code cleanup and performance improvement for the blockchain.*.listunspent RPCs.
  • Update BCH mainnet & chipnet server lists.

Pre-compiled binaries for Linux

I have provided two pre-built binaries for Linux:

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

Published by cculianu about 2 years ago

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 - Fulcrum 1.8.1

Published by cculianu about 2 years ago

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 - Fulcrum 1.8.0

Published by cculianu about 2 years ago

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 - Fulcrum 1.7.0

Published by cculianu over 2 years ago

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 - Fulcrum 1.6.0

Published by cculianu over 2 years ago

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 - Fulcrum 1.5.4

Published by cculianu almost 3 years ago

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 - Fulcrum 1.5.3

Published by cculianu almost 3 years ago

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 - Fulcrum 1.5.2

Published by cculianu over 3 years ago

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 - Fulcrum 1.5.0

Published by cculianu over 3 years ago

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 - Fulcrum 1.4.1

Published by cculianu over 3 years ago

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!

Package Rankings
Top 12.2% on Alpine-edge
Badges
Extracted from project README
Docker Build Copr build status bitcoincash:qphax4s4n9h60jxj2fkrjs35w2tvgd4wzvf52cgtzc
Related Projects