Sovereignty, Privacy & Economic Freedom.

Guides

Dojo x86 Bitcoin Node Guide: Part 2 – Installing Fulcrum Indexer.

fulcrum indexer logo
  1. Dojo x86 Bitcoin Node Guide: Part 1. Installing Bitcoin Core & Tor.
  2. Dojo x86 Bitcoin Node Guide: Part 2 – Installing Fulcrum Indexer.
  3. Dojo x86 Bitcoin Node Guide: Part 3. Installing Mempool Explorer.
  4. Dojo x86 Bitcoin Node Guide: Part 4 – Installing Dojo.
  5. Dojo x86 Bitcoin Node Guide: Part 5 – Installing Whirlpool & UFW.
  6. Dojo x86 Bitcoin Node Guide: Part 6 – Installing Updates

Once you have a fully synchronised IBD, installing an indexer is the next step. We will use Fulcrum, which has a larger footprint than other Electrum implementations, but its performance is unmatched.

First, download Fulcrum to your download directory.

cd ~/downloads

Head to Fulcrum’s Github page and copy the link for the latest “x86_64-linux.tar.gz” file. At the time of writing, the most current version is 1.9.1.

Download the file in the terminal by pasting the link with the “wget” command.

wget https://github.com/cculianu/Fulcrum/releases/download/v1.9.1/Fulcrum-1.9.1-x86_64-linux.tar.gz

In order to verify the validity of the download, you also need to download the matching “asc” & “sha256sum” files.

wget https://github.com/cculianu/Fulcrum/releases/download/v1.9.1/Fulcrum-1.9.1-x86_64-linux.tar.gz.asc
wget https://github.com/cculianu/Fulcrum/releases/download/v1.9.1/Fulcrum-1.9.1-x86_64-linux.tar.gz.sha256sum

Now verify the checksum of your download.

sha256sum --ignore-missing --check Fulcrum-*-x86_64-linux.tar.gz.sha256sum

If everything is okay the output should provide an “OK” message, for example, “Fulcrum-1.9.1-x86_64-linux.tar.gz: OK“.

To check the validity of the release, you need to import Calin Culianu’s public key.

curl https://raw.githubusercontent.com/Electron-Cash/keys-n-hashes/master/pubkeys/calinkey.txt | gpg --import

And finally, verify that the signatures match. Ignore any warnings regarding trusted signatures; if all is good, you should see “Good signature from Calin Culianu“.

gpg --verify Fulcrum-*-x86_64-linux.tar.gz.asc
fulcrum indexer

Next, create a “fulcrum” and “fulcrum_db” folder for housing the Fulcrum files.

mkdir ~/fulcrum
mkdir ~/fulcrum_db

You can now unpackage the archive and move its contents to your new “fulcrum” directory.

tar xvf Fulcrum-*-x86_64-linux.tar.gz
mv Fulcrum-*-x86_64-linux/* /home/satoshi/fulcrum

Remove the leftover folder, archive and verification files.

rm -r Fulcrum-*-x86_64-linux
rm Fulcrum-*-x86_64-linux.tar.gz
rm Fulcrum-*-x86_64-linux.tar.gz.asc && rm Fulcrum-*-x86_64-linux.tar.gz.sha256sum

Next, you need to generate new SSL keys.

cd ~/fulcrum
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

Hit enter on each question prompt, leaving all at default.

You need to rename the fulcrum configuration file and make a few edits.

mv fulcrum-example-config.conf fulcrum.conf
nano fulcrum.conf

Edit the following lines.

####change
datadir = /path/to/a/dir  # Windows: datadir = D:\FulcrumData\mainnet

##to
datadir = /home/satoshi/fulcrum_db  # Windows: datadir = D:\FulcrumData\mainnet

####edit with your core rpc username & password
rpcuser = Bob_The_Banker
rpcpassword = hunter1

####uncomment the following line
#ssl = 0.0.0.0:50002

##like this
ssl = 0.0.0.0:50002

####uncomment & edit the following lines
#cert = /path/to/server-cert.pem
#key = /path/to/server-key.pem
#peering = true

##like this
cert = /home/satoshi/fulcrum/cert.pem
key = /home/satoshi/fulcrum/key.pem
peering = false

If following the guide from the beginning, your Core username should be “bitcoin“.

Lastly, you have the option to enable fast sync. This is not essential and has no use after the initial sync, but using it will speed up the process. You must be careful not to push it too quickly, as you can easily corrupt the database. I typically set this to 50% of available system memory but not exceeding 12GB. If using fast sync, find the following line, delete the # and enter your setting in MB.

For 8GB, I would edit as follows;

fast-sync = 8000

Save and exit the file with “control+x“, then “y”, and finally “enter“.

To start automatically on system boot, you must create a service file for Fulcrum.

sudo nano /etc/systemd/system/fulcrum.service

Paste the following lines into the file and then save and exit.

[Unit]
Description=Fulcrum
After=network.target

[Service]
ExecStart=/home/satoshi/fulcrum/Fulcrum /home/satoshi/fulcrum/fulcrum.conf
User=satoshi
LimitNOFILE=8192
TimeoutStopSec=30min

[Install]
WantedBy=multi-user.target

Now activate and enable the service file.

sudo systemctl enable fulcrum.service
sudo systemctl start fulcrum.service
sudo systemctl status fulcrum.service

You should see a green light and “active” status.

Before continuing, wait until the sync process is complete. How long this will take depends on the memory dedicated to syncing, but it typically completes within 24 hours. Your node’s power supply must remain uninterrupted during this process.

You can keep an eye on progress with the following command. You will know it is synchronised once you see the logs pulling the latest Mempool txs.

journalctl -fu fulcrum.service

Connecting Wallets to Fulcrum.

Once Fulcrum has synchronised, you can immediately connect your wallets to the node. If you only use Samourai Wallet and/or Sentinel, you can skip immediately to the next article since these wallets connect via Dojo, covered later in the guide.

SSL Connections.

Local SSL connections are a simple case of adding your node’s local IP and SSL port into the address field of your wallets settings, for example;

ssl://192.168.1.100:50002

For mobile wallets, a remote connection is preferable. To connect remotely via SSL, you will need to forward internal port 50002 to an external port number of your choice on your router’s admin page. Portforward.com has a great directory of manufacturer-specific guides on port forwarding if you are unfamiliar with the process.

Next, you need the public IP address for your network. If your router supports Dynamic DNS, you can use your DDNS address instead of your public IP.

If you don’t know your network’s public IP, you can find it by running the following command. You will find your public IP in the output next to where it says “myip.opendns.com has address“.

host myip.opendns.com resolver1.opendns.com

Using your public IP and the external port you set, you can add your node’s SSL address into your wallets settings menu, for example;

ssl://106.80.4.72:11222

Or if you have a DDNS;

ssl://myddns.mysite.com:11222
Tor Connections.

When connecting via Tor, you bypass the complexities involved with port forwarding whilst maintaining the ability to connect wallets remotely. This, however, comes at the price of wallet efficiency due to the network limits of Tor.

Check your wallet’s documentation to see if it has integrated Tor. If not, you will also need to install a Tor client on the remote device. Orbot is a popular Android/iOS Tor client.

To connect via Tor, you need to add a few lines to the “torcc” file.

sudo nano /etc/tor/torrc

Paste the following lines at the bottom of the file.

# Hidden Service Fulcrum
HiddenServiceDir /var/lib/tor/hidden_service_fulcrum/
HiddenServiceVersion 3
HiddenServicePort 50002 127.0.0.1:50002

Save and exit the file, then reload Tor services.

sudo systemctl reload tor

You can locate your Fulcrum server’s onion address with the following command.

sudo cat /var/lib/tor/hidden_service_fulcrum/hostname

Enter your onion address into your wallets settings, ensuring that you also add your hidden service port number at the end, for example;

https://78aqvahpe6pjachf6nxroyr76gecku6nqoyngkj49r63n3twm6jpisyd.onion:50002

You should now have a fully functional Fulcrum server and be able to connect external wallets remotely via SSH or Tor.

In the next article, we will be installing the Mempool bitcoin explorer.