⚙️ Installation

🛠️ Hardware Requirements

Node TypeCPURAMStorage

Full (Minimum)

4v CPU

8 GB

100 GB SSD or NVME

Additional requirements

Chain IDVersion tagBinary NameBinary Home

symphony-testnet-3

v0.3.0

symphonyd

$HOME/.symphonyd

⚡ Automatic installation

bash <(curl -s https://raw.githubusercontent.com/UnityNodes/scripts/main/symphony/install-symphony.sh)

📝 Manual installation

📌 Step 1: Installation packeges and dependencies

# Install dependencies for building from source
sudo apt update
sudo apt install -y lz4 jq make git gcc build-essential curl chrony unzip gzip snapd tmux bc

# Install Go
sudo rm -rf /usr/local/go
curl -L https://go.dev/dl/go1.21.6.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

📌 Step 2: Clone project repository

cd $HOME
git clone https://github.com/Orchestra-Labs/symphony.git
cd symphony
git checkout v0.3.0
make install

📌 Step 3: Initialize the node

Replace "NODE_MONIKER" with your name moniker (will be displayed in the explorer)

MONIKER="NODE_MONIKER"
symphonyd init $MONIKER --chain-id symphony-testnet-3

📌 Step 4: Download addrbook files, genesis.json

curl -L https://snapshots-testnet.unitynodes.com/symphony-testnet/genesis.json > $HOME/.symphonyd/config/genesis.json
curl -L https://snapshots-testnet.unitynodes.com/symphony-testnet/addrbook.json > $HOME/.symphonyd/config/addrbook.json

📌 Step 5: Set minimum gas price and pruning

sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "0.005uslf"|g' $HOME/.symphonyd/config/app.toml
sed -i 's|pruning = "default"|pruning = "custom"|g' $HOME/.symphonyd/config/app.toml
sed -i 's|pruning-keep-recent = "0"|pruning-keep-recent = "100"|g' $HOME/.symphonyd/config/app.toml
sed -i 's|pruning-interval = "0"|pruning-interval = "19"|g' $HOME/.symphonyd/config/app.toml

📌 Step 6: Download latest chain data snapshot

symphonyd tendermint unsafe-reset-all --home $HOME/.symphonyd --keep-addr-book 
curl https://snapshots-testnet.unitynodes.com/symphony-testnet/symphony-testnet-latest.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.symphonyd

📌 Step 7: Create a service

sudo tee /etc/systemd/system/symphonyd.service > /dev/null <<EOF
[Unit]
Description=symphonyd
After=network-online.target

[Service]
User=$USER
ExecStart=$(which symphonyd) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

📌 Step 8: Register and start service

sudo systemctl daemon-reload
sudo systemctl enable symphonyd.service
sudo systemctl start symphonyd.service

📌 Step 9: Check logs

sudo journalctl -u symphonyd -f -o cat

An example of logs of a node that works well:

the "height" value should be constantly increasing.

📌 Step 10: Check the synchronization status

local_height=$(symphonyd status 2>&1 >/dev/null | jq -r .SyncInfo.latest_block_height); network_height=$(curl -s https://rpc.symphony-testnet.unitynodes.com/status | jq -r .result.sync_info.latest_block_height | bc); blocks_left=$((network_height - local_height)); echo "Your node height: $local_height"; echo "Network height: $network_height"; echo "Blocks left: $blocks_left"

If the command gives the result "Blocks left - 0" - the node is synchronized with the last block of the network and you can proceed further.

📝 Create Wallet and Validator

📌 Step 1: Create wallet

symphonyd keys add wallet

Save all information after entering the command, without this you will not be able to restore data to the wallet. SAVE SEED PHRASE (12 words).

📌 Step 2: Obtaining test tokens to create a validator

Use one of the methods.

  1. Нou can get 1MLD every 24 hours, at least 1MLD is required to create a validator - Faucet

  2. Complete the "Symphony Validator Bonding Sign-up" form to receive the required number of tokens to create a validator from the team.

After receiving the test tokens, check the balance and continue.

📌 Step 3: View your wallet balance

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

if your balance shows more than "1.000.000" note which is equivalent to 1note continue creating validator

📌 Step 4: Create validator

symphonyd tx staking create-validator \
--amount 1000000note \
--pubkey $(symphonyd tendermint show-validator) \
--moniker "$YOUR_MONIKER" \ #Validator name, displayed in explorers.
--identity "" \ #Use your KeyBase ID. If you don't have one, leave it empty.
--website "" \ #Your website is available, or leave the field blank
--details "" \ #Any details about your validator.
--from wallet \ # Change the wallet name if you have a different one
--chain-id symphony-testnet-3 \
--gas-adjustment 1.4 \
--gas auto \
--fees 5000note \
-y

After entering the command, you will receive hash transactions, check the status in the explorer if the status is successful - you have created a validator. You can find your validator here: explorer In the Active / Inactive lists.

📌 Step 5: Save priv_validator_key.json

cat $HOME/.symphonyd/config/priv_validator_key.json

SAVE YOUR PRIVATE KEY AFTER ENTERING THE COMMAND The priv_validator_key.json is the key with which you can always restore the operation of your validator, so keep it and in case of reinstallation/transfer of the validator to another server - transfer it too.

Also remember, if you are a validator with a sufficient number of delegated tokens and you are in an active set, signing blocks, always save priv_validator_state.json - this file contains information about the signed blocks of your validators, and in case of restoring the validator after reinstallation or on another server , this file won't give you the old blocks again, otherwise you'll end up in jail with no way out 💡 Hint:

  • View private key: cat $HOME/.symphonyd/config/priv_validator_key.json

  • View private state: cat $HOME/.symphonyd/config/priv_validator_key.json

  • Private key directory: $HOME/.symphonyd/config/priv_validator_key.json

  • Validator state directory: $HOME/.symphonyd/data/priv_validator_state.json

Last updated