Read Cosmos contributor @larry0x’s documentation to get a basic idea of how this works for Cosmos-based.

Server Configuration

Server requirements:

  • No. of CPUs: 16
  • Memory: 32GB
  • Disk: 500GB
  • OS: Ubuntu 22.04 LTS

Allow all incoming connections from TCP port 26656 and 26657

Notes on the configurations.

  1. Multicore is important, regardless the less CPU time usage
  2. furyad uses less than 1GB memory and 2GB should be enough for now. Once your new server is running, login to the server and upgrade your packages.

Setup your machine

If you already have go 1.18+ and packages up to date, you can skip this part and jump to the second section: Setup the chain
Make sure your machine is up to date:

apt update && apt upgrade -y

Install few packages:

apt install build-essential git curl gcc make jq -y

Install Go 1.18+:

wget -c https://go.dev/dl/go1.18.10.linux-amd64.tar.gz && rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.1.linux-amd64.tar.gz && rm -rf go1.18.1.linux-amd64.tar.gz

Setup your environnement (you can skip this part if you already had go installed before):

echo 'export GOROOT=/usr/local/go' >> $HOME/.bash_profile
echo 'export GOPATH=$HOME/go' >> $HOME/.bash_profile
echo 'export GO111MODULE=on' >> $HOME/.bash_profile
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bash_profile && . $HOME/.bash_profile

Verify the installation:

go version
# Should return go version go1.18.10 linux/amd64

Setup the chain

Clone the Furya repository and install mainnet binary:

git clone https://github.com/furysport/furya-chain && cd furya-chain && git checkout v1.0.0 && make install

Init the chain:

furyad init <YOUR_MONIKER> --chain-id furya-1

Launch the node

You have multiple choice for launching the chain, choose the one that you prefer in the below list:

Manual

  • Create a screen and setup limit of files
  • Launch the chain
screen -S furya
ulimit -n 4096
furyad start

You can escape the screen pressing CTRL + AD and enter it again using:

screen -r furya

Systemctl

  • Create service file
  • Enable and launch the service file
  • Setup the logs
tee <<EOF >/dev/null /etc/systemd/system/furyad.service
[Unit]
Description=Furya Cosmos daemon
After=network-online.target

[Service]
User=$USER
ExecStart=/home/$USER/go/bin/furyad start
Restart=on-failure
RestartSec=3
LimitNOFILE=4096

[Install]
WantedBy=multi-user.target
EOF
systemctl enable furyad
systemctl daemon-reload
systemctl restart furyad

To check the logs:

journalctl -u furyad.service -f -n 100

Cosmovisor

  • Install cosmovisor
  • Setup environment variables
  • Create folders needed for upgrades
  • Copy binaries to cosmovisor bin
  • Create service file
  • Enable and launch the service file
  • Setup the logs
go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@latest
export DAEMON_NAME=furyad
export DAEMON_HOME=$HOME/.furyad
source ~/.profile
mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
mkdir -p $DAEMON_HOME/cosmovisor/upgrades
cp $HOME/go/bin/furyad $DAEMON_HOME/cosmovisor/genesis/bin
tee <<EOF >/dev/null /etc/systemd/system/furyad.service
[Unit]
Description=Furya Daemon (cosmovisor)

After=network-online.target

[Service]
User=$USER
ExecStart=/home/$USER/go/bin/cosmovisor run start
Restart=always
RestartSec=3
LimitNOFILE=4096
Environment="DAEMON_NAME=furyad"
Environment="DAEMON_HOME=/home/$USER/.furyad"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="DAEMON_LOG_BUFFER_SIZE=512"

[Install]
WantedBy=multi-user.target
EOF
systemctl enable furyad
systemctl daemon-reload
systemctl restart furyad

To check the logs:

journalctl -u furyad.service -f -n 100

Wait for the chain to synchronize with the current block… you can do the next step during this time

Setup validator for genesis validators

Copy node_key.json and priv_validator_key.json into home directory.

Setup validator for non-genesis validators

Create an account:

furyad keys add <YOUR_KEY>

You can also you --recover flag to use an already existed key (but we recommend for security reason to use one key per chain to avoid total loss of funds in case one key is missing)

You can check if you have fund on your address using this CLI command:

furyad query bank balances <YOUR_FURYA_ADDRESS> --chain-id furya-1

Once the fund are received and chain is synchronized you can create your validator:

furyad tx staking create-validator \
 --commission-max-change-rate=0.01 \
 --commission-max-rate=0.2 \
 --commission-rate=0.05 \
 --amount 1000000ufury \
 --pubkey=$(furyad tendermint show-validator) \
 --moniker=<YOUR_MONIKER> \
 --chain-id=furya-1 \
 --details="<DESCRIPTION_OF_YOUR_VALIDATOR>" \
 --security-contact="<YOUR_EMAIL_ADDRESS" \
 --website="<YOUR_WEBSITE>" \
 --identity="<YOUR_KEYBASE_ID>" \
 --min-self-delegation=1000000 \
 --from=<YOUR_KEY>

validator_address is the validator’s hex address. Your hex address can be found by running furyad status | jq.

If your validator’s signature shows up in the list, congrats your validator has been successfully registered & is operating!