Installation

This guide covers the installation of symphony node.

To install symphony node, you need to have several prerequisites in place. Here's a list of all the essential pre-requisites for setting up and working on this project.

Prerequisites

1

Hardware Requirements

  • CPUS: 6 or more CPUs
  • RAM: 8 GB RAM
  • STORAGE: 500GB NVME
  • Bandwith: 300Mbps or 1 Gbps (unmetered *recomended).
2

Dependencies

Update your system and make sure you installed this dependencies.

# install dependencies, if needed
sudo apt update && sudo apt upgrade -y
sudo apt install curl git wget htop tmux build-essential jq make lz4 gcc unzip -y
3

Moniker

Change your node name with yours.

# setup Moniker
MONIKER="nodename"

Installation

1

Go Installation

# install go, if needed
sudo rm -rf /usr/local/go
curl -Ls https://go.dev/dl/go1.22.2.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)
2

Download and Build Binaries

# Clone project repository
cd $HOME
rm -rf symphony
git clone https://github.com/Orchestra-Labs/symphony
cd symphony
git checkout v0.4.1

# Build binaries
make build

# Prepare binaries for Cosmovisor
mkdir -p $HOME/.symphonyd/cosmovisor/genesis/bin
mv build/symphonyd $HOME/.symphonyd/cosmovisor/genesis/bin/
rm -rf build

# Create application symlinks
sudo ln -s $HOME/.symphonyd/cosmovisor/genesis $HOME/.symphonyd/cosmovisor/current -f
sudo ln -s $HOME/.symphonyd/cosmovisor/current/bin/symphonyd /usr/local/bin/symphonyd -f
3

Install Cosmovisor and create daemon service

# Download and install Cosmovisor
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.6.0

# Create service
sudo tee /etc/systemd/system/symphony.service > /dev/null << EOF
[Unit]
Description=symphony node service
After=network-online.target
 
[Service]
User=$USER
ExecStart=$(which cosmovisor) run start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="DAEMON_HOME=$HOME/.symphonyd"
Environment="DAEMON_NAME=symphonyd"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:$HOME/.symphonyd/cosmovisor/current/bin"
 
[Install]
WantedBy=multi-user.target
EOF

# Enable Service
sudo systemctl daemon-reload
sudo systemctl enable symphony.service
4

Initialize the node

# Set node configuration
symphonyd config chain-id symphony-testnet-4
symphonyd config keyring-backend test

# Initialize the node
symphonyd init $MONIKER --chain-id symphony-testnet-4

# Download genesis and addrbook
curl -Ls https://snapshot.ravenode.xyz/symphony/genesis.json > $HOME/.symphonyd/config/genesis.json
curl -Ls https://snapshot.ravenode.xyz/symphony/addrbook.json > $HOME/.symphonyd/config/addrbook.json

# Add seeds
PEERS="$(curl -sS https://trpc-symphony.nodesemesta.cloud/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}' | sed -z 's|\n|,|g;s|.$||')"
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.symphonyd/config/config.toml

# Set minimum gas price
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0note\"|" $HOME/.symphonyd/config/app.toml

# Set pruning
sed -i \
  -e 's|^pruning *=.*|pruning = "custom"|' \
  -e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \
  -e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' \
  -e 's|^pruning-interval *=.*|pruning-interval = "19"|' \
  $HOME/.symphonyd/config/app.toml
5

Start service and check log

sudo systemctl restart symphony.service && sudo journalctl -u symphony.service -f --no-hostname -o cat

Now you can check syncronization Log

6

syncronization

You can check syncronization of you node block height

while true; do
  local_height=$(symphonyd status 2>&1 | jq -r .sync_info.latest_block_height || echo "0")

  network_height=$(curl -s https://trpc-symphony.nodesemesta.cloud/status | jq -r .result.sync_info.latest_block_height || echo "0")

  blocks_left=$((network_height - local_height))

  n_peers=$(curl -Ss localhost:26657/net_info | jq -r .result.n_peers || echo "0")

  echo "Curr block: $local_height (blocks left: $blocks_left) | Peers: $n_peers"

  sleep 3
done

Example Output:

Curr block: 5670713 (blocks left: 1) | Peers: 56
Curr block: 5670717 (blocks left: 0) | Peers: 56
Curr block: 5670718 (blocks left: 0) | Peers: 55

Wallet Configuration

1

Option 1 New Wallet

If you have no wallet before, add new wallet:

symphonyd keys add wallet

Mnemonic:

Save your mnemonic wallet to backup in case you can lost access control of your validator

2

Option 2 Recover Wallet

If you have a existing wallet address, recover wallet:

symphonyd keys add wallet --recover
3

Show Wallet list

symphonyd keys list
4

Fund Wallet

To create a validator, you need to fund the previously created wallet using https://testnet.ping.pub/symphony/faucet

To check wallet balance use command below

symphonyd q bank balances $(symphonyd keys show wallet -a)

Validator Configuration and Installation

1

Pubkey Value

Use the following command to get the your validator pubkey value:

symphonyd tendermint show-validator
2

Create Validator Json File

Create a validator.json file inside /root/.symphonyd/

nano $HOME/.symphonyd/validator.json
3

Create Validator Json File

Copy the following command and paste it into the validator.json file:

{
    "pubkey": {
        "@type": "/cosmos.crypto.ed25519.PubKey",
        "key": "your_validator_pubkey"
    },
    "amount": "1000000note",
    "moniker": "your-moniker-name",
    "identity": "your-keybase-id",
    "website": "your-website",
    "security": "your-email",
    "details": "your-details",
    "commission-rate": "0.05",
    "commission-max-rate": "0.2",
    "commission-max-change-rate": "0.01",
    "min-self-delegation": "1"
}
4

Run your Validator

use the following command and make sure your validator running well:

symphonyd tx staking create-validator $HOME/.symphonyd/validator.json \
--from=wallet \
--chain-id=symphony-testnet-4 \
--gas-adjustment 1.5 \
--gas-prices 0.025note \
--gas auto

Fill Symphony Validator Form

Once your node is synced and you've successfully created a validator, please fill out this form to receive additional faucet tokens for validator bonding: https://forms.gle/98ajH8wXCowVnGZi6

Join Symphony Join Discord and receive Validator role, submit your validator link and tag the team.