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 pkg-config and libzmq installed (aka libzmq3-dev on Debian/Ubuntu, zeromq-devel on Fedora).
A note for Windows users: Qt 5.15.2 (or above) with MinGW G++ 11.x.x 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 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)
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.
Running Fulcrum
Execute the binary, with -h to see the built-in help, e.g. ./Fulcrum -h. You can set most options from the CLI, but you can also specify a config file as an argument. See:
- doc/fulcrum-example-config.conf in the source tree. This sample config file is very well documented with comments.
- doc/fulcrum-quick-config.conf in the source tree. This is a more abbreviated config file you can use as a starting point as well.
Fulcrum requires a bitcoind instance running either on testnet or mainnet (or regtest for testing), which you must tell it about via the CLI options or via the config file. You also need to tell it what port(s) to listen on and optionally what SSL certificates to use (if using SSL). Note: Electron Cash (and/or Electrum) at this time no longer support connecting to non-SSL servers, so you should probably configure SSL for production use.
It is recommended you specify a data dir (-D via CLI or datadir= via config file) on an SSD drive for best results. Synching against testnet should take you about 10-20 minutes (more on slower machines), and mainnet can take anywhere from 4 hours to 20+ hours, depending on machine and drive speed. I have not tried synching against mainnet on an HDD and it will probably take days if you are lucky.
As long as the server is still synchronizing, all public-facing ports will not yet be bound for listening and as such an attempt to connect to one of the RPC ports will fail with a socket error such as e.g. "Connection refused". Once the server finishes synching it will behave like an ElectronX/ElectrumX server and it can receive requests from Electron Cash (or Electrum if on BTC).
You may also wish to read the Fulcrum manpage.
Admin Script: FulcrumAdmin
Fulcrum comes with an admin script (Python 3.6+ is required on the system to run this script). You may send commands to Fulcrum using this script. The script requires that an admin port (config var admin=, CLI arg -a) be configured for your server. To run the script, execute ./FulcrumAdmin -h and you will see a list of possible subcommands that you can send to Fulcrum. Below you see all available commands (the below assumes the admin port is on port 8000):
./FulcrumAdmin -p 8000 addpeer- Add a peer to the server's list of peers./FulcrumAdmin -p 8000 ban- Ban clients by ID and/or IP address./FulcrumAdmin -p 8000 banpeer- Ban peers by hostname suffix./FulcrumAdmin -p 8000 bitcoind_throttle- Query or set server bitcoind_throttle setting./FulcrumAdmin -p 8000 clients(sessions) - Print information on all the currently connected clients./FulcrumAdmin -p 8000 getinfo- Get server information./FulcrumAdmin -p 8000 kick- Kick clients by ID and/or IP address./FulcrumAdmin -p 8000 listbanned(banlist) - Print the list of banned IP addresses and peer hostnames./FulcrumAdmin -p 8000 loglevel- Set the server's logging verbosity./FulcrumAdmin -p 8000 maxbuffer- Query or set server max_buffer setting./FulcrumAdmin -p 8000 peers- Print peering information./FulcrumAdmin -p 8000 query- Query for balance, UTXO, and history information for one or more addresses./FulcrumAdmin -p 8000 rmpeer- Remove peers by hostname suffix./FulcrumAdmin -p 8000 simdjson- Get or set the server's 'simdjson' (JSON parser) setting./FulcrumAdmin -p 8000 stop(shutdown) - Gracefully shut down the server./FulcrumAdmin -p 8000 unban- Unban IP addresses./FulcrumAdmin -p 8000 unbanpeer- Unban peers by hostname suffix
Protocol Documentation
Documentation for the Electrum Cash protocol that Fulcrum uses is available here.
Platform Notes
These notes provide specific advice and tips for users on different operating systems:
Windows
This codebase will not compile correctly (or at all) using MSVC. Please use the MinGW and/or G++ kit in Qt Creator to build this software. Qt 5.13.2 (or above) with MinGW G++ 7.x.x is the recommended compiler/Qt kit. Although MSVC is not supported, MinGW provides a suitable alternative for Windows users.
Linux
If you have clang on your system, configure the project to use it as the compiler preferentially over g++. While g++ works great too, clang is preferred for its efficiency and compatibility. Users should also ensure they have the necessary libraries installed, like libzmq and the Qt5 networking package for successful compilation.
MacOS
Everything should just work on MacOS as it is the primary development platform for Fulcrum. If you're using MacOS, the default setup should suffice for compiling and running Fulcrum. However, always ensure you have the latest version of Qt and the necessary development libraries installed.
F.A.Q
See: Frequently Asked Questions
Sponsors
The following entities are proud sponsors of the Fulcrum project, providing support and resources to aid in its development:
