Electrum X
Time: 15 minutes and 7 days waiting for synchronization/indexing
Using Electrum X, you can use the Electrum protocol. This protocol lets wallets and other software communicate with nodes. In other places in the guide, you can connect tools and wallets that communicate via the Electrum protocol directly to your node. A functionality that promotes privacy. For example, you can also connect the BTC RPC Explorer to your own Electrum X server. Then when you look up information about your transactions or addresses from yourself in the future, no one will be able to see it. This way no one can link transactions to you and you enjoy more privacy.
It can take up to 7 days before Electrum X is fully indexed and usable. Until then you can't use it.
Installation
Make sure you are in the home directory.
cd ~Install the following packages on your Raspberry.
sudo apt install python3-pip build-essential libc6-dev libncurses5-dev libncursesw5-dev libreadline-dev libleveldb-devUsing pip you can install a Python-specific package needed for Electrum X.
sudo pip3 install plyvelClone the source code for Electrum X.
git clone https://github.com/spesmilo/electrumxNavigate the directory you just cloned into.
cd electrumxGrab the latest version.
git checkout 1.16.0Finally, install Electrum X.
sudo python3 setup.py installConfiguration
As with all the other tools in this guide, you can configure Electrum X in some way. First, we provide a location where the database of Electrum X is stored. Then we create keys using openssl. Finally, we configure Electrum X using a configuration file.
Create an .electrumx folder in the home directory containing another db folder.
mkdir ~/.electrumxmkdir ~/.electrumx/dbEnter the directory.
cd ~/.electrumxRun the following three openssl commands to create a set of keys and certificates. During this process you will need to enter some information, but you will see that.
openssl genrsa -out server.key 2048openssl req -new -key server.key -out server.csropenssl x509 -req -days 1825 -in server.csr -signkey server.key -out server.crtThe final step of configuring involves creating the configuration file. Create a file.
nano ~/.electrumx/electrumx.confPut the following text in there.
NET=mainnetCOIN=BitcoinCACHE_MB=500DB_ENGINE=leveldbDB_DIRECTORY=/home/ubuntu/.electrumx/dbDAEMON_URL=http://USERNAME:PASSWORD@127.0.0.1SSL_CERTFILE=/home/ubuntu/.electrumx/server.crtSSL_KEYFILE=/home/ubuntu/.electrumx/server.keySERVICES=tcp://:50001,ssl://:50002,wss://:50004,rpc://Before you save it, you need to make two adjustments. In the USERNAME and PASSWORD places, enter the username-password combination you created in the authentication part of the Bitcoin Core configuration. Once everything is correct you can save the file with Ctrl + X and confirm with Y.
Firewall and Router
In principle, you can connect a local tool such as BTC RPC Explorer directly to Electrum X. There is no need to open any ports for this, as local connections are always allowed (i.e. from the Pi to the Pi). However, if you want to use Electrum X in an app like BlueWallet, you need to execute the following commands to open two ports.
sudo ufw allow 50001sudo ufw allow 50002If you want to use Electrum X as a backend from outside your network, then you need to throw the same ports open on your router and loop through to your Pi.
Automation
Electrum X is something you always want to have running in the background. That's why we're going to automate startup through a service. Create a service.
sudo nano /etc/systemd/system/electrumx.servicePut the following text in there.
[Unit]Description=Electrum X ServerRequires=bitcoind.serviceAfter=network.target[Service]User=ubuntuEnvironmentFile=/home/ubuntu/.electrumx/electrumx.confExecStart=/usr/local/bin/electrumx_serverRestart=alwaysTimeoutSec=120RestartSec=30[Install]WantedBy=multi-user.targetSave it with Ctrl + X and confirm with Y.
Enable and start the service with these two commands:
sudo systemctl enable electrumxsudo systemctl start electrumxAfter about a minute of starting up, you can ask Electrum X for some information.
electrumx_rpc getinfoIf your output looks like the one below you are done!
{ "coin": "bitcoin" "daemon": "127.0.0.1:8332/" "daemon height": 662952, "db height": 662952, "db_flush_count": 5797, "groups": 0, "history cache": "0 lookups 0 hits 0 entries", "merkle cache": "0 lookups 0 hits 0 entries", "peers": { "bad": 14, "good": 83, "never": 14, "stale": 7, "total": 118 }, "pid": 12650, "request counts": { "blockchain.block.header": 1, "blockchain.headers.subscribe": 560, "getinfo": 1, "server.features": 560, "server.peers.subscribe": 560, "server.version": 560 }, "request total": 2242, "sessions": { "count": 1, "count with subs": 0, "errors": 0, "logged": 0, "pending requests": 1, "subs": 0 }, "tx hashes cache": "0 lookups 0 hits 0 entries", "txs sent": 0, "uptime": "21d 01h 08m", "version": "ElectrumX 1.16.0"}Updating
Stop the Electrum X service.
sudo systemctl stop electrumxGo to the application directory.
cd ~/electrumxUpdate the repository with the latest changes via Git.
git fetch --allShow the latest version/tag/release.
git describe --tags `git rev-list --tags --max-count=1`Retrieve the changes from the latest release.
git checkout <OUTPUT FROM PREVIOUS STEP> # for example 1.16.0Install the software.
sudo python3 setup.py installStart the Electrum X service.
sudo systemctl start electrumxElectrum X is now updated!