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
Hardware Requirements
- CPUS: 6 or more CPUs
- RAM: 8 GB RAM
- STORAGE: 500GB NVME
- Bandwith: 300Mbps or 1 Gbps (unmetered *recomended).
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
Moniker
Change your node name with yours.
# setup Moniker
MONIKER="nodename"
Installation
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)
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
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
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
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
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
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
Option 2 Recover Wallet
If you have a existing wallet address, recover wallet:
symphonyd keys add wallet --recover
Show Wallet list
symphonyd keys list
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
Pubkey Value
Use the following command to get the your validator pubkey value:
symphonyd tendermint show-validator
Create Validator Json File
Create a validator.json file inside /root/.symphonyd/
nano $HOME/.symphonyd/validator.json
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"
}
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
and receive Validator role, submit your validator link and tag the team.