Fulcrum
A fast & nimble SPV Server for BCH, BTC, and LTC
Install / Use
/learn @cculianu/FulcrumREADME
Fulcrum
A fast & nimble SPV server for Bitcoin Cash, Bitcoin BTC, and Litecoin.
For more information, visit The Official Fulcrum Website™️.
Copyright
(C) 2019-2025 Calin Culianu calin.culianu@gmail.com
License:
GPLv3. See the included LICENSE.txt file or visit gnu.org and read the license.

Highlights:
- Fast: Written in 100% modern
C++20using multi-threaded and asynchronous programming techniques. - A drop-in replacement for ElectrumX: Fulcrum is 100% protocol-level compatible with the Electrum Cash 1.6 protocol. Existing server admins should feel right at home with this software since installation and management of it is nearly identical to an ElectrumX server.
- Cross-platform: While this codebase was mainly developed and tested on MacOS, Windows and Linux, it should theoretically work on any modern OS (such as *BSD) that has Qt5 or Qt6 Networking available.
- NEW! Triple-coin: Supports BCH, BTC and LTC.
Requirements
- For running:
- A supported bitcoin full node with its JSON-RPC service enabled, preferably running on the same machine.
- For BCH: Bitcoin Cash Node, Bitcoin Cash Unlimited, Flowee, and bchd have all been tested extensively and are known to work well with this software.
- For BTC: Bitcoin Core v0.17.0 or later. Bitcoin Knots is also known to work perfectly well.
- Note: Bitcoin Core and/or Bitcoin Knots >= v28.0.0 are recommended for full Electrum Protocol v1.6 support.
- For LTC: Litecoin Core v0.17.0 or later. No other full nodes are supported by this software for LTC.
- If using Litcoin Core v0.21.2 or above, your daemon is serializing data using mweb extensions. While Fulcrum understands this serialization format, your Electrum-LTC clients may not. You can run
litecoindwith-rpcserialversion=1to have your daemon return transactions in pre-mweb format which is understood by most Electrum-LTC clients.
- If using Litcoin Core v0.21.2 or above, your daemon is serializing data using mweb extensions. While Fulcrum understands this serialization format, your Electrum-LTC clients may not. You can run
- The node must have txindex enabled e.g.
txindex=1. - The node must not be a pruning node.
- Optional: For best results, enable zmq for the "hasblock" topic using e.g.
zmqpubhashblock=tcp://0.0.0.0:8433in yourbitcoin.conffile (zmq is only available on: Core, BCHN, BU 1.9.1+, or Litecoin Core).
- Recommended hardware: Minimum 1GB RAM, 64-bit CPU, ~40GB disk space for mainnet BCH, 133GB for BTC (as of Aug 2023). For best results, use an SSD rather than an HDD.
- A supported bitcoin full node with its JSON-RPC service enabled, preferably running on the same machine.
- For compiling:
Qt Core&Qt Networkinglibraries5.15.2or above (I use6.10.0myself). Qt5.15.1(or earlier) is not supported.- Optional but recommended:
libzmq 4.xdevelopment headers and library (also known aslibzmq3-devon Debian/Ubuntu andzeromq-develon Fedora). Fulcrum will run just fine without linking againstlibzmq, but it will run better if you do link againstlibzmqand also turn onzmqpubhashblocknotifications inbitcoind(zmq is only available on: Core, BCHN, or BU 1.9.1+).libminiupnpc 2.x/3.xdevelopment headers and library (also known aslibminiupnpc-devon Debuan/Ubuntu andminiupnpc-develon Fedora). Fulcrum will run just fine without this library, but it is needed if you want Fulcrum to use UPnP to open up firewall ports on your router (CLI arg:--upnp, conf var:upnp=true).
- A modern, 64-bit
C++20compiler.clang-17org++-13are recommended. MSVC on Windows is not supported (please useMinGW G++instead, which ships with Qt Open Source Edition for Windows).
Quickstart
- Download a pre-built static binary.
- Verify that the binary runs on your system by executing the binary with
./Fulcrum -hto see the CLI options. - Setup a configuration file and to point Fulcrum to your bitcoind JSON-RPC server, specify listening ports, TLS certificates, etc. See: doc/fulcrum-example-config.conf and/or doc/fulcrum-quick-config.conf
- Also see this section below on Running Fulcrum.
How To Compile
Compiling is for those users that do not wish to use the pre-built static binaries provided here, or for users on platforms for which the static binaries are not provided (such as FreeBSD or macOS). To compile, it's recommended you use the Qt Creator IDE.
- Get the latest version of Qt Open Source Edition for your platform.
- Point the Qt Creator IDE at the
Fulcrum.profile. - Set the build configuration to "Release". Hit Build. It should "just work".
You may also build from the CLI (on Linux and MacOS):
- Make sure you have
qmakein your path and all the requisite Qt5 dev libs installed. qmake(to generate the Makefile)make -j8(replace 8 here with the number of cores on your machine)
A note for Linux users: You may have to install the Qt5 or Qt6 networking package separately such as libqt5network5 or libqt6network6 (depending on your distribution). You also need libbz2-dev otherwise compilation will fail. If you are having trouble finding the required Qt versions, you can try this link: https://launchpad.net/~beineri (for Ubuntu/Debian ppas). For best results, you may wish to also ensure you have the following installed: pkg-config, libzmq (aka libzmq3-dev on Debian/Ubuntu, zeromq-devel on Fedora), and libminiupnpc (aka libminiupnpc-dev on Debian/Ubuntu, miniupnpc-devel on Fedora).
A note for Windows users: Qt 5.15.2 (or above) with MinGW G++ 11.x.x (or above) is the compiler/Qt kit you should be using. MSVC is not supported by this codebase at the present time.
What to do if compiling fails
If you have problems compiling, the most likely culprit would be your compiler not being C++20 compliant (please use a recent version of gcc or clang on Linux, Apple's Xcode on Mac, or MinGW G++ 11.x or above on Windows).
The other likely culprit is the fact that at the present time I have included a statically-built librocksdb in the codebase. There are versions of this library for Windows, Mac, and Linux included right in the source tree, and Fulcrum.pro looks for them and links to them. Instructions are included within the Fulcrum.pro project file about how to build your own static librocksdb if the bundled one does not work on your system.
If you are still having trouble, file an issue here in this github.
Linking against the system librocksdb.so (experimental)
You may optionally build against the system rocksdb (Linux only) if your distribution offers rocksdb version 6.6.4 or newer.
qmake LIBS+=-lrocksdb(to generate the Makefile without linking to the included static lib)make clean && make -j8(replace 8 here with the number of cores on your machine)
Note: Some Linux distributions have been known to package librocksdb.so incorrectly. See here for an example, so until I can be confident most distributions do it right, I am considering using the system librocksdb.so an experimental feature for the time being (in principle it should work ok if the library is compiled correctly).
Making sure libzmq is detected and used (optional but recommended)
Ensure that libzmq3 (Debian/Ubuntu) and/or zeromq-devel (Fedora/Redhat) is installed, and that pkg-config is also installed. If on Unix (macOS, Linux, or Windows MinGW), then ideally the qmake step will find libzmq on your system and automatically use it. If that is not the case, you may try passing flags to qmake such as LIBS+="-L/path/to/libdir_containting_libzmq -lzmq" and INCLUDEPATH+="/path/to/dir_containing_zmq_h" as arguments when you invoke qmake. Using libzmq is optional but highly recommended. If you have trouble getting Fulcrum to compile against your libzmq, open a new issue and maybe I can help.
Making sure libminiupnpc is detected and used (optional)
Ensure that libminiupnpc (Debian/Ubuntu) and/or miniupnpc-devel (Fedora/Redhat) is installed, and that pkg-config is also installed. If on Unix (macOS, Linux, or Windows MinGW), then ideally the qmake step will find libminiupnpc on your system and automatically use it. If that is not the case, you may try passing flags to qmake such as LIBS+="-L/path/to/dir_containing_libminiupnpc -lminiupnpc" and INCLUDEPATH+="/path/to/dir_containing_miniupnpc_headers_dir" as arguments when you invoke qmake. Using libminiupnpc is optional but necessary if you want UPnP support in Fulcrum. If you have trouble getting Fulcrum to compile against your libminiupnpc, open a new issue and maybe I can help.
Building the Windows static Fulcrum.exe
New! I recently added a mechanism using Docker to build a statically-linked
Windows .exe. This build is 100% compatible with any stock 64-bit Windows 7 or
above system -- you don't have to install anything -- it just works. You can
download the pre

