Side Protocol

Side Protocol is a settlement and value exchange layer for the Bitcoin modular blockchains.

RPC: https://side-test.rpc.cryptomolot.com/

Resources

Hardware requirements

4-Cores

8 GB

200 GB NVME

100mbps network bandwidth

Linux (Ubuntu 22.04 x64)

Installation 💾

Update repositories

apt update && apt upgrade -y

Install dependencies

sudo apt install curl git wget htop tmux build-essential jq make lz4 gcc unzip -y

Install GO 1.22.2

sudo rm -rf /usr/local/go && \
curl -L https://go.dev/dl/go1.22.2.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/local && \
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bash_profile && \
source .bash_profile && \
go version

Set variables

change the <wallet>, <moniker>. And SIDE_PORT # if you needed

echo "export WALLET="<WALLET>"" >> $HOME/.bash_profile
echo "export MONIKER="<MONIKER>"" >> $HOME/.bash_profile
echo "export SIDE_CHAIN_ID="S2-testnet-2"" >> $HOME/.bash_profile
echo "export SIDE_PORT="26"" >> $HOME/.bash_profile
source $HOME/.bash_profile

Get binaries

cd $HOME
rm -rf side
git clone https://github.com/sideprotocol/side.git
cd side
git checkout v0.8.1
make install

Initialize

change the <moniker>

sided config node tcp://localhost:${SIDE_PORT}657
sided config keyring-backend os
sided config chain-id S2-testnet-2
sided init "<MONIKER>" --chain-id S2-testnet-2

Download genesis and addrbook

wget -O $HOME/.side/config/genesis.json https://testnet-files.itrocket.net/side/genesis.json
wget -O $HOME/.side/config/addrbook.json https://testnet-files.itrocket.net/side/addrbook.json

Add seeds/bpeers/peers in config.toml

SEEDS="9c14080752bdfa33f4624f83cd155e2d3976e303@side-testnet-seed.itrocket.net:45656"
PEERS="bbbf623474e377664673bde3256fc35a36ba0df1@side-testnet-peer.itrocket.net:45656,eb0c5c68d051d622a425d97e5a01c7762ea51e96@152.53.35.91:26656,07c88954da965a1ce376a3aa1543fc4142a54156@149.102.146.181:17656,129fd32f3600f968e760fadebd6a71f29cb20ce2@23.88.70.109:26356,010e9ba253ce06ab589198ff5717c0fd54f3070e@142.132.152.46:32656,9ac70136fbec0002351d3d31b9472ba25510031a@37.60.240.206:55656,582dedd866dd77f25ac0575118cf32df1ee50f98@202.182.119.24:26656,42119e8e8a05869db9cd6704f1ec49286d772d0d@94.130.204.227:46656,7dc4dc0ba7194870e72837039fbdc3c4920523be@178.63.189.157:26656,d2aefb779d0c5ed4802970e9a9c53756cf443162@144.76.176.154:26356,027ef6300590b1ca3a2b92a274247e24537bd9c9@65.109.65.248:49656"
sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.side/config/config.toml

Set minimum gas-price

sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "0.005uside"|g' $HOME/.side/config/app.toml

Set custom ports (if needed)

# set 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

# set custom ports in config.toml file
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

(Optional) Pruning

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

(Optional) Disable indexer and enable prometheus

default indexer="kv" default prometheus = false

sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.side/config/config.toml
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.side/config/config.toml

Create a 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
sudo systemctl daemon-reload
sudo systemctl enable sided
sudo systemctl restart sided && sudo journalctl -u sided -f

Run from snapshot

...coming...

Wait fo full sync (output "false")

sided status 2>&1 | jq

Create or recover wallet

!!! BACKUP YOUR SEED PHRASE !!!

sided keys add $WALLET

OR

sided keys add $WALLET --recover

Get tokens from faucet 🆓

get tokens from discord faucet channel or https://testnet.side.one/faucet

Set var for wallet and valoper addresses

WALLET_ADDRESS=$(sided keys show $WALLET -a)
VALOPER_ADDRESS=$(sided keys show $WALLET --bech val -a)
echo "export WALLET_ADDRESS="$WALLET_ADDRESS >> $HOME/.bash_profile
echo "export VALOPER_ADDRESS="$VALOPER_ADDRESS >> $HOME/.bash_profile
source $HOME/.bash_profile

Create Validator

sided tx staking create-validator \
--amount 1000000uside \
--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>" \
--identity "" \
--website "" \
--details "" \
--chain-id S2-testnet-2 \
--gas auto --fees 1000uside \
-y

!!! BACKUP YOUR priv_validator_key.json !!!

Useful commands ⚙️

node info

sided status 2>&1 | jq

logs

sudo journalctl -u sided -f

start service

sudo systemctl start sided

stop service

sudo systemctl stop sided

restart service

sudo systemctl restart sided

enable service

sudo systemctl enable sided

disable service

sudo systemctl disable sided

Check wallets list

sided keys list

Delete wallet

sided keys delete $WALLET

Check Balance

sided q bank balances $WALLET_ADDRESS

Withdraw all rewards

sided tx distribution withdraw-all-rewards --from $WALLET --chain-id S2-testnet-2 --gas auto --fees 1000uside

Withdraw rewards and commission from your validator

sided tx distribution withdraw-rewards $VALOPER_ADDRESS --from $WALLET --commission --chain-id S2-testnet-2 --gas auto --fees 1000uside -y

Delegate to Yourself

sided tx staking delegate $(sided keys show $WALLET --bech val -a) 1000000uside --from $WALLET --chain-id S2-testnet-2 --gas auto --fees 1000uside -y

Delegate

sided tx staking delegate <TO_VALOPER_ADDRESS> 1000000uside --from $WALLET --chain-id S2-testnet-2 --gas auto --fees 1000uside -y

Redelegate Stake to Another Validator

sided tx staking redelegate $VALOPER_ADDRESS <TO_VALOPER_ADDRESS> 1000000uside --from $WALLET --chain-id S2-testnet-2 --gas auto --fees 1000uside -y

Unbond

sided tx staking unbond $(sided keys show $WALLET --bech val -a) 1000000uside --from $WALLET --chain-id S2-testnet-2 --gas auto --fees 1000uside -y

Transfer Funds

sided tx bank send $WALLET_ADDRESS <TO_WALLET_ADDRESS> 1000000uside --gas auto --fees 1000uside -y

Validator Details

sided q staking validator $(sided keys show $WALLET --bech val -a)

Jailing info

sided q slashing signing-info $(sided tendermint show-validator)

Slashing parameters

sided q slashing params

Unjail validator

sided tx slashing unjail --from $WALLET --chain-id S2-testnet-2 --gas auto --fees 1000uside -y

Delete node 🗑️

sudo systemctl stop sided
sudo systemctl disable sided
sudo rm -rf /etc/systemd/system/sided.service
sudo rm $(which sided)
sudo rm -rf $HOME/.side
sed -i "/SIDE_/d" $HOME/.bash_profile

Last updated