Strategies with Validator Nodes - Side Protocol

Side Protocol is a modular infrastructure for Bitcoin, aiming to become the settlement & value exchange layer in the Bitcoin modular stack. It has raised $3M from HashKey Capital, Continue Capital, KR1, Symbolic Capital, DoraHacks, Informal Systems and 3 Angel investors.

Side Protocol is going to be a sidechain of Bitcoin, poised to serve as a settlement layer for rollups. It will facilitate proof verification, liquidity unification and interoperability among rollups.

Through integration with the Espresso shared sequencer, Side team will enable atomic inter-rollup interactions.Through integration with Babylon Chain, SIDE Chain will be secured by BTC as a staked asset and Bitcoin Timestamping.

Main partners: Espresso Sequencer, Babylon Chain, Nubit, Avail, Celestia
Main partners: Espresso Sequencer, Babylon Chain, Nubit, Avail, Celestia

Side Node Installation - Step-by-Step Guide

To begin the procedure, you need a computer with any Linux distro installed, Ubuntu 22.04 or later will do, an SSD with +200 GB and a fast Internet connection. It’s required to use 22.04 version or newer versions, otherwise your node won’t be installed correctly.

For those without resources capable of supporting a validator node at home, you can fall back on VPS (Virtual Private Server) solutions, that is, you can rent a virtual server.

There are several solutions, which I recommend below:

  • Contabo, I recommend the Cloud VPS 2 model, with 6 vCPU Cores, 16 GB RAM, 400 GB SSD SATA3;

  • Aeza, I recommend at least the VIEs-3 or PARs-3 model, with 4 vCPU Cores, 8 GB RAM, 120 GB NVMe. This is a Russian VPS service and payment by credit/debit card is not possible from many Western countries, but payments in crypto (BTC, BEP20, ERC20, TRC20, DASH, LTC, XMR...) are possible.

After payment is made, you will receive the IP address to access.

If operating from Windows, open Windows Powershell and launch the following command, entering your IP address instead of IP_ADDRESS:

ssh root@IP_ADDRESS

Give confirmation to save ED25519 key fingerprint to the list of known hosts, available at C:\Users\WINDOWS_USER\.ssh and enter the password of your VPS.

If you have done everything correctly, the following screen will appear:

After login on PuTTy or Powershell on VPS provided by Contabo
After login on PuTTy or Powershell on VPS provided by Contabo

⚠️ Disclaimer ⚠️: Launch every command one by one. Entering more commands together could break the installation process or bring to fatal errors.

Now enter the following commands and execute them:

# Preparation
sudo apt update -y
sudo apt upgrade -y
sudo apt install curl git make wget jq lz4 build-essential unzip gcc -y

Install Golang:

# Install Golang
sudo rm -rf /usr/local/go 
curl -Ls https://go.dev/dl/go1.22.0.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/local
eval $(echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee /etc/profile.d/golang.sh)
eval $(echo 'export PATH=$PATH:$HOME/go/bin' | tee -a $HOME/.profile)

go version
# go version go1.22.0 linux/amd64

Download Side binary files and configure the service, check for the latest version, at the moment of the writing of this article is the v0.9.0:

# Set variables, change MONIKER with a name of your choice
echo "export MONIKER="0xOuterGod"" >> $HOME/.bash_profile
echo "export SIDE_CHAIN_ID="grimoria-testnet-1"" >> $HOME/.bash_profile
echo "export SIDE_PORT="45"" >> $HOME/.bash_profile
source $HOME/.bash_profile

# Download binary files & Install latest version available
git clone https://github.com/sideprotocol/side.git
cd side
git checkout v0.9.0
make install

# Configure and initialize the app
sided config node tcp://localhost:${SIDE_PORT}657
sided config keyring-backend os
sided config chain-id grimoria-testnet-1
sided init $MONIKER --chain-id grimoria-testnet-1

Download genesis.json and addrbook.json files and configure all the parameters, including seeds since persistent_peers are not sufficient, I can’t sync the node if I don’t put any seed:

# Download genesis.json & addrbook.json
wget -O $HOME/.side/config/genesis.json https://server-5.itrocket.net/testnet/side/genesis.json
wget -O $HOME/.side/config/addrbook.json https://server-5.itrocket.net/testnet/side/addrbook.json

# Configure seeds & peers
SEEDS="9c14080752bdfa33f4624f83cd155e2d3976e303@side-testnet-seed.itrocket.net:45656"
PEERS="bbbf623474e377664673bde3256fc35a36ba0df1@side-testnet-peer.itrocket.net:45656,8295b7fe29b9a85fe62ae7e6793e4304781c20ef@65.109.124.51:12656,7ce65ae96e8b51e668fd4eb3c12b518225a5506f@157.90.183.164:26656,277f6c209f157fc68ee93c15f602492d85cb4432@185.119.116.238:26656,a37a9235f5b7d63894e647935d27337dacc52166@65.21.229.226:12656,85a16af0aa674b9d1c17c3f2f3a83f28f468174d@167.235.242.236:26656,a98484ac9cb8235bd6a65cdf7648107e3d14dab4@116.202.231.58:17456,fc350bf644f03278df11b8735727cc2ead4134c9@65.109.93.152:26786,637077d431f618181597706810a65c826524fd74@5.9.151.56:26356,58bfd0d179d63192455e1e9ec25f23371a4bdf52@161.97.125.255:26656,d5519e378247dfb61dfe90652d1fe3e2b3005a5b@65.109.68.190:17456"
sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.side/config/config.toml

# Configure custom ports in app.toml
sed -i.bak -e "s%:1317%:${SIDE_PORT}317%g;
s%:8080%:${SIDE_PORT}080%g;
s%:9090%:${SIDE_PORT}090%g;
s%:9091%:${SIDE_PORT}091%g;
s%:8545%:${SIDE_PORT}545%g;
s%:8546%:${SIDE_PORT}546%g;
s%:6065%:${SIDE_PORT}065%g" $HOME/.side/config/app.toml

# Configure custom ports in config.toml
sed -i.bak -e "s%:26658%:${SIDE_PORT}658%g;
s%:26657%:${SIDE_PORT}657%g;
s%:6060%:${SIDE_PORT}060%g;
s%:26656%:${SIDE_PORT}656%g;
s%^external_address = \"\"%external_address = \"$(wget -qO- eth0.me):${SIDE_PORT}656\"%;
s%:26660%:${SIDE_PORT}660%g" $HOME/.side/config/config.toml

# Configure pruning, choose 50 or 20
sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" $HOME/.side/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $HOME/.side/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"50\"/" $HOME/.side/config/app.toml

# Configure minium gas price, prometheus and disable indexer
sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "0.005uside"|g' $HOME/.side/config/app.toml
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.side/config/config.toml
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.side/config/config.toml

# Create service file
sudo tee /etc/systemd/system/sided.service > /dev/null <<EOF
[Unit]
Description=Side node
After=network-online.target
[Service]
User=$USER
WorkingDirectory=$HOME/.side
ExecStart=$(which sided) start --home $HOME/.side
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

# Download latest snapshot and wait for synchronization
sided tendermint unsafe-reset-all --home $HOME/.side
if curl -s --head curl https://server-5.itrocket.net/testnet/side/side_2024-08-29_739883_snap.tar.lz4 | head -n 1 | grep "200" > /dev/null; then
  curl https://server-5.itrocket.net/testnet/side/side_2024-08-29_739883_snap.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.side
    else
  echo "no snapshot founded"
fi

# Enable & start the service
sudo systemctl daemon-reload
sudo systemctl enable sided
sudo systemctl restart sided && sudo journalctl -u sided -f

Now we are ready to create/recover a wallet. Remember, do not use a wallet where you’re holding your crypto on Cosmos ecosystem but use a dust wallet or a brand new wallet:

# If you want to create a new wallet, remember to save your seed phrase
sided keys add wallet --key-type="segwit"

# If you decide to restore a wallet you already have, launch instead this
sided keys add wallet --recover --key-type="segwit"

# Set wallet & valoper addresses as variables
SIDE_WALLET_ADDRESS=$(sided keys show wallet -a)
SIDE_VALOPER_ADDRESS=$(sided keys show wallet --bech val -a)
echo "export SIDE_WALLET_ADDRESS="$SIDE_WALLET_ADDRESS >> $HOME/.bash_profile
echo "export SIDE_VALOPER_ADDRESS="$SIDE_VALOPER_ADDRESS >> $HOME/.bash_profile
source $HOME/.bash_profile

It’s time to request a faucet on the following link, you can do it once every day. In order to get the BTC Segwit address, launch on your terminal the following command:

sided keys list

Don’t use seckp256k1 or Taproot keys since they don’t work properly with the current phase of testnet, or at least I didn’t manage to make them work. Return to the terminal screen and continue with the launch of the validator node:

# Check sync status. If false then continue, otherwise wait full sync
sided status 2>&1 | jq

# Create a new validator node
sided tx staking create-validator \
--amount 4500000uside \
--from wallet \
--commission-rate 0.1 \
--commission-max-rate 0.2 \
--commission-max-change-rate 0.01 \
--min-self-delegation 1 \
--pubkey $(sided tendermint show-validator) \
--moniker $MONIKER \
--details "<Replace the text between quotes with your description>" \
--chain-id grimoria-testnet-1 \
--gas auto --gas-adjustment 1.5 --fees 1500uside \
-y

# If you want to delegate more tokens, redelegate to yourself
sided tx staking delegate $(sided keys show wallet --bech val -a) 1000000uside --from wallet --chain-id grimoria-testnet-1 --gas auto --gas-adjustment 1.5 --fees 1500uside -y

# If you want to delegate tokens to my validator node, launch
sided tx staking delegate sidevaloper1qqgszrswr5t3srcxqc8ssrswzuvsj9sergxsgzc5qyg3k8g2psz3cp6dp22 4500000uside --from wallet --chain-id grimoria-testnet-1 --gas auto --gas-adjustment 1.5 --fees 1500uside -y

# Monitor your validator node with this command
sided status 2>&1 | jq .ValidatorInfo

Congratulations, you have successfully completed the installation of your node!

The guide you read is for educational purposes. Side Protocol has not released any information about its tokenomics nor airdrop criteria, so this is an educational content. If you like my work, I suggest you to subscribe and mint the entry in order to support my work.

Subscribe to 0xOuterGod
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.