# Strategies with Validator Nodes - Side Protocol

By [0xOuterGod](https://paragraph.com/@0xoutergod) · 2024-07-18

---

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](https://storage.googleapis.com/papyrus_images/fa85ce7eafe9bacd8938c0b53be3f207f4177ecdace4cd5dbec09561908feebb.png)

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**](https://www.jdoqocy.com/click-101113651-13796470), I recommend the **Cloud VPS 2 model**, with 6 vCPU Cores, 16 GB RAM, 400 GB SSD SATA3;
    
*   [**Aeza**](https://aeza.net/?ref=432182), 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.

![](https://storage.googleapis.com/papyrus_images/ce955069c6e5becac5334e686ddec0cfb6de6ee5161fb5bb44a2ce3357a848dc.png)

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](https://storage.googleapis.com/papyrus_images/de3453100b6b0dd5434f1930ffb4d9e296cbff21e1dd4bf0c7cf575bff61ca02.png)

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](https://station-test.side.one/faucet), 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!**

![](https://storage.googleapis.com/papyrus_images/15c2290db23a58194a42bfe38f4ce033d7dfcdd051aa92c0f5a75dda3f17be28.jpg)

_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._

---

*Originally published on [0xOuterGod](https://paragraph.com/@0xoutergod/strategies-with-validator-nodes-side-protocol)*
