Set Up Fulcrum on DigitalOcean

Introduction

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.

Prerequisites

This tutorial uses DigitalOcean, but the general steps should work on any Ubuntu or Debian server.

Check Your Block Storage Space

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.

Create a Firewall to Allow Fulcrum Traffic

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.

Download Fulcrum and Signatures

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

Verify the Fulcrum Download

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

Install Fulcrum

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 New Service User

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

Create Fulcrum Data Directory

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

Generate Self-Signed SSL Certificate

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

Configure Fulcrum

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.

Set Up Fulcrum as a System Service

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.

Monitor Fulcrum

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.

FulcrumAdmin

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

Connect Electron Cash Wallet

After Fulcrum is fully synced, you can connect your Electron Cash wallet to your Fulcrum server.

Optional: Restart Sync From Scratch

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

For the Future: Upgrade 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:

  1. Download Fulcrum
  2. Verify Fulcrum
  3. Install Fulcrum

Check the new version number:

Fulcrum --version

Then start the fulcrum service:

sudo systemctl start fulcrum

Optional: Uninstall 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.

Optional: Use a CA-Signed SSL Certificate

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:

  1. Set a valid hostname
  2. Use SSL and specify a valid cert that matches hostname
  3. Enable peering and announce in the conf file

Resources

Next steps: Connect your Electron Cash wallet to your Fulcrum server.