Hardware Specifications
6 or more physical CPU cores
Install Dependencies
Copy sudo apt -q update
sudo apt -qy install curl git jq lz4 build-essential
sudo apt -qy upgrade
Copy MONIKER="<your-node-name>"
Install GO
Copy 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
Copy # 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
Copy # Download and install Cosmovisor
go install cosmossdk.io/tools/cosmovisor/cmd/[email protected]
# 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
Copy # 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://rpc.symphony.ravenode.xyz/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
Download Latest Snapshot & extract the file
Copy curl -L https://snapshot.ravenode.xyz/symphony/symphony-latest.tar.lz4 | tar -Ilz4 -xf - -C $HOME/.symphonyd
[[ -f $HOME/.symphonyd/data/upgrade-info.json ]] && cp $HOME/.symphonyd/data/upgrade-info.json $HOME/.symphonyd/cosmovisor/genesis/upgrade-info.json
Start Service & Check Node Logs
Copy sudo systemctl restart symphony.service && sudo journalctl -u symphony.service -f --no-hostname -o cat
Verify node's block height sync
Copy while true; do
local_height=$(symphonyd status 2>&1 | jq -r .sync_info.latest_block_height || echo "0")
network_height=$(curl -s https://rpc.symphony.ravenode.xyz/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
Copy Curr block: 194935 (blocks left: 1) | Peers: 47
Curr block: 194936 (blocks left: 0) | Peers: 47
Curr block: 194937 (blocks left: 0) | Peers: 47
Spin Up Validator
1. Create a wallet
You have two options for that.
OPTION 1 - CREATE NEW WALLET
Copy symphonyd keys add wallet
Save the mnemonic output as this is the only way to recover your validator wallet in case you lose it!
OPTION 2 - RECOVER EXISTING WALLET
Copy symphonyd keys add wallet --recover
To list your wallets use command below
2. Fund a wallet
To check wallet balance use command below
Copy symphonyd q bank balances $(symphonyd keys show wallet -a)
3. Create Validator
Use the following command to get the your validator pubkey
value:
Copy symphonyd tendermint show-validator
Create a validator.json
file inside /root/.symphonyd/
Copy nano /root/.symphonyd/validator.json
Copy the following command and paste it into the validator.json
file:
Copy {
"pubkey": {
"@type": "/cosmos.crypto.ed25519.PubKey",
"key": "your_validator_pubkey"
},
"amount": "1000000note",
"moniker": "your-moniker-name",
"identity": "your-keybase-id",
"website": "your-website",
"details": "your-details",
"commission-rate": "0.05",
"commission-max-rate": "0.2",
"commission-max-change-rate": "0.01",
"min-self-delegation": "1"
}
Please make sure you have adjusted key, moniker , identity , details , website to match your values.
Run the create validator command:
Copy 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
Save the ~/.symphonyd/config/priv_validator_key.json file as this is the only way to recover your validator signing key in case you lose it!
Last updated 5 months ago