This guide provides step-by-step instructions to set up Fulcrum on an Ubuntu server hosted on DigitalOcean.
When you're done, you can connect your Electron Cash wallet and other compatible wallets to your own node! Your wallets will be able to communicate with the Bitcoin Cash peer-to-peer network without third-party servers, increasing your privacy and security.
Fulcrum is a Simplified Payment Verification (SPV) server for Bitcoin Cash (BCH). Fulcrum connects to a full node like BCHN and indexes the entire blockchain so that it can quickly provide information to light wallets like Electron Cash.
This tutorial uses DigitalOcean, but the general steps should work on any Ubuntu or Debian server.
In the Terminal app on your Mac, SSH in to your DigitalOcean droplet:
ssh bitcoin@YOUR_DROPLET_IP
Check the amount of block storage you have available:
df -h
As of April 2025, Fulcrum uses 51 GB of disk space. If needed, follow the steps to increase your block storage.
Verify that BCHN's permission cookie can be accessed by the group “bitcoin”:
ls -alh /home/bitcoin/.bitcoin/.cookie
The output must contain "-rw-r-----" to show that the cookie is readable by the bitcoin group, otherwise Fulcrum won't be able to access BCHN.
If the cookie's permissions aren't correct, you can update them:
chmod g+r /home/bitcoin/.bitcoin/.cookie
However, the cookie is recreated every time BCHN restarts. That's why we configured ExecStartPost in the bitcoind.service file to set the correct permissions after BCHN starts.
Other full node implementations may be able to use the startupnotify option to set the cookie permissions instead.
We'll create another firewall that opens inbound port 50002 for Electron Cash and other clients to connect via SSL.
On the DigitalOcean website, log in to your DigitalOcean account and add the tag "fulcrum" to your bchn-fulcrum droplet. This will add the droplet to the fulcrum-firewall, which we'll set up next.
On DigitalOcean, go to Networking > Firewall and create a new firewall:
In Inbound Rules, change the single default rule to have these settings:
In Outbound Rules, keep the default rules, which permit all traffic to any destination on any port.
Create a temporary directory for easy cleanup after installation:
mkdir -p ~/tmp && cd ~/tmp
Copy the latest Fulcrum version number from the Fulcrum GitHub.
Set a version variable for easier maintenance:
VERSION="1.12.0"
Download the Fulcrum x86_64-linux binary:
wget https://github.com/cculianu/Fulcrum/releases/download/v$VERSION/Fulcrum-$VERSION-x86_64-linux.tar.gz
Download the signature:
wget https://github.com/cculianu/Fulcrum/releases/download/v$VERSION/Fulcrum-$VERSION-shasums.txt.asc
Download the checksum:
wget https://github.com/cculianu/Fulcrum/releases/download/v$VERSION/Fulcrum-$VERSION-shasums.txt
Download the signing key:
wget https://github.com/Electron-Cash/keys-n-hashes/raw/refs/heads/master/pubkeys/calinkey.txt
Import the signing key:
gpg --import calinkey.txt
Verify that the checksums file is cryptographically signed by the release signing key (should see "Good signature" in output):
gpg --verify Fulcrum-$VERSION-shasums.txt.asc
Verify the signed checksum against the actual checksum of your download (Should see "OK" in output):
grep "x86_64-linux.tar.gz" Fulcrum-$VERSION-shasums.txt | sha256sum --check
Extract Fulcrum binaries:
tar -xvf Fulcrum-$VERSION-x86_64-linux.tar.gz
Install Fulcrum and FulcrumAdmin by copying them to /usr/local/bin:
sudo install -m 0755 -o root -g root -t /usr/local/bin Fulcrum-$VERSION-x86_64-linux/Fulcrum Fulcrum-$VERSION-x86_64-linux/FulcrumAdmin
Verify that the binary runs on your system by checking the version:
Fulcrum --version
Create the "fulcrum" service user:
sudo adduser --disabled-password --gecos "" fulcrum
Add the "fulcrum" user to the "bitcoin" group so Fulcrum ran read BCHN's permission cookie:
sudo adduser fulcrum bitcoin
Identify the location (mount point) of your block storage volume (it should be something like /mnt/volume_nyc1_01):
df -h
Anywhere in this guide you see "/mnt/volume_nyc1_01", replace that text with the location of your block storage volume.
Create a fulcrum directory on the block storage volume identified above:
sudo mkdir -p /mnt/volume_nyc1_01/fulcrum/fulcrum_db
sudo chown -R fulcrum:fulcrum /mnt/volume_nyc1_01/fulcrum/
Create a symlink that points to our fulcrum directory:
sudo ln -s /mnt/volume_nyc1_01/fulcrum /home/fulcrum/.fulcrum
sudo chown -R fulcrum:fulcrum /home/fulcrum/.fulcrum
Open a “fulcrum” user session:
sudo su - fulcrum
Change to the fulcrum directory:
cd /mnt/volume_nyc1_01/fulcrum
Electron Cash requires SSL for secure connections to Fulcrum. We'll generate a key file and a self-signed SSL certificate. When it asks you to enter some info, press Return until the prompt is shown again to use default values. It is not necessary to enter any info:
openssl req -newkey rsa:4096 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
While we're still in our “fulcrum” user session, create the configuration file using the nano text editor:
nano /mnt/volume_nyc1_01/fulcrum/fulcrum.conf
Copy and paste the following into fulcrum.conf:
###
# Fulcrum configuration file
#
# This config should be placed in following path:
# /mnt/volume_nyc1_01/fulcrum/fulcrum.conf
#
# Full example config: https://github.com/cculianu/Fulcrum/blob/master/doc/fulcrum-example-config.conf
###
### BCHN settings ###
bitcoind = 127.0.0.1:8332
rpccookie = /mnt/volume_nyc1_01/bchn/.cookie
### Fulcrum server settings ###
datadir = /mnt/volume_nyc1_01/fulcrum/fulcrum_db
ssl = 0.0.0.0:50002
cert = /mnt/volume_nyc1_01/fulcrum/cert.pem
key = /mnt/volume_nyc1_01/fulcrum/key.pem
# Admin RPC bind - Required to use "FulcrumAdmin"
admin = 8000 # A port number by itself implies 127.0.0.1
# Anonymize client IP addresses and TxIDs in logs
anon_logs = true
### Optimizations for modest servers similar to a Raspberry Pi ###
# bitcoind_clients should not exceed the number of cores in your system
bitcoind_clients = 1
bitcoind_timeout = 600
worker_threads = 1
# If server has 4 GB RAM:
db_mem = 1024.0
db_max_open_files = 200
utxo_cache = 512
Save the file and exit the nano text editor (Control+O, Return, Control+X).
Set permissions so only the user "fulcrum" and members of the "fulcrum" group can read conf file:
chmod 640 /mnt/volume_nyc1_01/fulcrum/fulcrum.conf
Exit "fulcrum" user session to return to "bitcoin" user session:
exit
Note: We tested various combinations of settings in fulcrum.conf to see what resulted in the fastest sync without Out Of Memory (OOM) issues.
Create a systemd configuration file to autostart fulcrum automatically in the background on boot:
sudo nano /etc/systemd/system/fulcrum.service
Copy and paste the following into fulcrum.service:
[Unit]
Description=Fulcrum
PartOf=bitcoind.service
After=bitcoind.service
StartLimitBurst=2
StartLimitIntervalSec=20
[Service]
ExecStart=/usr/local/bin/Fulcrum /mnt/volume_nyc1_01/fulcrum/fulcrum.conf
KillSignal=SIGINT
User=fulcrum
Type=exec
TimeoutStopSec=300
RestartSec=30
Restart=on-failure
[Install]
WantedBy=multi-user.target
Save the file and exit the nano text editor (Control+O, Return, Control+X).
Enable the fulcrum service:
sudo systemctl enable fulcrum
Start the fulcrum service:
sudo systemctl start fulcrum
Fulcrum will now index the whole Bitcoin Cash blockchain so that it can provide all necessary information to wallets. After Fulcrum finishes indexing, wallets you use no longer need to connect to any third-party server to communicate with the Bitcoin Cash peer-to-peer network.
As of April 2025, the initial Fulcrum sync took about 20 hours and 12 minutes on a droplet with 4 GB RAM and 2 vCPUs. The next section shows how you can monitor Fulcrum's progress.
Warning: Initial blockchain indexing may take 20+ hours depending on your droplet’s performance. Do not interrupt the process, as it may corrupt Fulcrum's database and require a resync.
Note: some guides suggest setting up zram swap to speed up the initial indexing, but zram isn't available on DigitalOcean. DigitalOcean droplets have kernels that don't support zram.
Check the service status (Type q to quit or Control-C):
sudo systemctl status fulcrum
The output from the above command should show "loaded", "enabled", and "active (running)".
Follow the systemd service log to monitor fulcrum activity (Control-C to stop following):
sudo journalctl -u fulcrum -f
The BCH blockchain and Fulcrum data grows over time. To check disk usage:
df -h /mnt/volume_nyc1_01/
If the volume is running out of space, see the section on increasing your block storage.
Also see the section on FulcrumAdmin for more monitoring options.
Fulcrum comes with an admin tool called FulcrumAdmin. You may send commands to Fulcrum using this script.
Make sure admin = 8000 is set in the fulcrum.conf configuration.
Get Fulcrum server information:
FulcrumAdmin -p 8000 getinfo
Print information on all the currently connected clients:
FulcrumAdmin -p 8000 clients
Print peering information:
FulcrumAdmin -p 8000 peers
View full list of commands:
FulcrumAdmin -h
After Fulcrum is fully synced, you can connect your Electron Cash wallet to your Fulcrum server.
If your Fulcrum database is corrupted, you'll need to delete the Fulcrum database and reindex.
Stop fulcrum:
sudo systemctl stop fulcrum
Delete the fulcrum_db directory content:
sudo rm -r /mnt/volume_nyc1_01/fulcrum/fulcrum_db/*
If necessary, make any desired changes to your Fulcrum configuration. For example, if Fulcrum was killed due to an Out Of Memory (OOM) problem, you might want to reduce the utxo_cache or db_mem settings.
Open a “fulcrum” user session:
sudo su - fulcrum
Edit the configuration file using the nano text editor:
nano /mnt/volume_nyc1_01/fulcrum/fulcrum.conf
Save the file and exit the nano text editor (Control+O, Return, Control+X).
Exit "fulcrum" user session to return to "bitcoin" user session:
exit
Start the fulcrum service:
sudo systemctl start fulcrum
When a new version of Fulcrum is released, you can upgrade by following these steps.
Stop the Fulcrum service:
sudo systemctl stop fulcrum
Repeat the steps to:
Check the new version number:
Fulcrum --version
Then start the fulcrum service:
sudo systemctl start fulcrum
If you ever decide to stop using Fulcrum and want to uninstall it, follow these steps.
Stop fulcrum:
sudo systemctl stop fulcrum
Disable fulcrum:
sudo systemctl disable fulcrum
Delete the fulcrum service:
sudo rm /etc/systemd/system/fulcrum.service
Delete the fulcrum user:
sudo userdel -r fulcrum
Delete the fulcrum data directory:
sudo rm -rf /mnt/volume_nyc1_01/fulcrum/
Remove the fulcrum tag from your droplet on DigitalOcean.
Delete the fulcrum-firewall on Digital Ocean.
Note: This step is a work in progress. Full instructions coming soon!
Set up an SSL certificate issued by a Certificate Authority (CA) instead of a self-signed SSL certificate.
For peers to sub to your Fulcrum server you, need to:
Next steps: Connect your Electron Cash wallet to your Fulcrum server.