Electrs
Time: 30 minutes of work, then 12 hours to index.
The Road to Node gives you a choice between three different implementations of Electrum Server. With all three implementations you achieve the same thing, which is that you host an Electrum Server. They differ in development language, performance, and how public the servers are. Electrs differs from the rest because it is written in Rust. Performance-wise you should look up the differences between Electrum Personal Server, Electrum X and Electrs.
Electrs waits for Bitcoin Core to finish synchronizing. So you can't use Electrs until the synchronization is done.
Installation
Start by installing the dependencies.
sudo apt install -y clang cmake
Install Rust and Cargo
curl https://sh.rustup.rs -sSf | sh
Source the corresponding env file
. "$HOME/.cargo/env"
Make sure you are in the home directory and get Electrs in via Git.
git clone https://github.com/romanz/electrs
Go into the Electrs directory.
cd electrs
Finally, install Electrs with Cargo.
cargo build --locked --release
Test if it works. The expected output is v0.10.4
.
./target/release/electrs --version
Configuration
Electrs can be configured through a configuration file. Create it with mkdir ~/.electrs && mkdir ~/.electrs/db && nano ~/.electrs/config.toml
. Then paste the following into the file.
cookie_file = "/home/ubuntu/.bitcoin/.cookie"daemon_rpc_addr = "127.0.0.1:8332"daemon_p2p_addr = "127.0.0.1:8333"db_dir = "/home/ubuntu/.electrs/db"network = "bitcoin"electrum_rpc_addr = "0.0.0.0:50001"log_filters = "INFO"
Save it with Ctrl + X
and confirm with Y
. You can check if it works with the same command as before: ./target/release/electrs
. You should now see an output on your screen showing that Electrs has started indexing.
Firewall
The Electrum protocol communicates over a fixed set of ports. You can open 50001 if you want to talk to your Electrum Server using, for example, Sparrow wallet on your laptop.
sudo ufw allow 50001 comment "Port for Electrum Server"
If you want to monitor Electrs remotely you also need to open 4224. This is optional.
sudo ufw allow 4224 comment "Port for monitoring Electrs"
Automation
Electrs can also be automated so that it runs in the background and you don't have to start it manually. First create a service.
sudo nano /etc/systemd/system/electrs.service
Put the following text in there.
[Unit]Description=electrsRequires=bitcoind.serviceAfter=bitcoind.service[Service]WorkingDirectory=/home/ubuntu/electrsExecStart=/home/ubuntu/electrs/target/release/electrsUser=ubuntuGroup=ubuntuType=simpleRestart=on-failureTimeoutSec=120RestartSec=30[Install]WantedBy=multi-user.target
Save it with Ctrl + X
and confirm with Y
.
Enable and start the service with these two commands:
sudo systemctl enable electrssudo systemctl start electrs
With systemctl status electrs
you can see if everything is running properly and get an output similar to the one below.
- electrs.service - electrs Loaded: loaded (/etc/systemd/system/electrs.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-01-14 20:36:59 UTC; 35s ago Main PID: 67163 (electrs) Tasks: 20 (limit: 4203) CGroup: /system.slice/electrs.service 67163 /home/ubuntu/electrs/target/release/electrs
Updating
Go to the application directory.
cd ~/electrs
Update the repository with the latest changes via Git.
git fetch --all
Show the latest version/tag/release.
git describe --tags `git rev-list --tags --max-count=1`
Retrieve the changes from the latest release.
git checkout -f <OUTPUT FROM PREVIOUS STEP> # for example 0.10.4
Install the software.
cargo build --locked --release
Restart the Electrs service.
sudo systemctl restart electrs
Electrs is now updated! You may find that during the restart - something that can take several minutes - your node can't do anything else.