logo

Symphony

MLD
  • Network:

    Testnet

  • Chain ID:

    symphony-testnet-4

  • Current Node Version:

    0.5.0-2-gedb91e0b4

Overview

Symphony is a Cosmos SDK–based blockchain developed by Orchestra Labs and positioned as infrastructure for real-world assets (RWA) and stablecoins. It follows Cosmos standards, is derived from Osmosis, and supports IBC, which makes it compatible with existing Cosmos tooling and enables cross-chain transfers.

Key Components:

  • Cosmos Appchain Architecture: Symphony uses a Cosmos SDK / Osmosis-based codebase and exposes Cosmos-style APIs, enabling integration with wallets, explorers, and other Cosmos ecosystem tools.

  • Stablecoin & RWA Layer: The chain is described in the official documentation as infrastructure for stablecoins and other real-world asset tokens, including mechanisms for interaction and trading between such assets.

  • On-Chain Reserves & Supply Management: Symphony’s design includes on-chain reserves and protocol-level mechanisms for adjusting token supply, as documented in their materials on stablecoin design and the “stablecoin trilemma.”

  • Staking & Yield: Official docs state that tokenized assets on Symphony can be staked to earn yield comparable to native coins, subject to jurisdictional and regulatory constraints.

Public Endpoints

TypeEndpointLink
RPChttps://symphony-testnet-rpc.crouton.digital arrow right icon
APIhttps://symphony-testnet-api.crouton.digital arrow right icon
gRPCsymphony-testnet-grpc.crouton.digital:29290
peer0654e74ef51697b400ceff9a16af9e15bfe42a72@46.4.91.76:29256

Guide

INFOINFO

This guide provides a complete and reliable setup for running a Symphony testnet node and validator. It covers everything from downloading binaries and configuration files to initializing the node, managing keys, applying snapshots, and maintaining a stable validator environment. Follow the steps carefully to ensure a smooth and secure deployment on the Symphony network.

Prepare

Update and install packages

sudo apt update && sudo apt upgrade -y && \ sudo apt install curl tar wget clang pkg-config libssl-dev libleveldb-dev jq build-essential bsdmainutils git make ncdu htop screen unzip bc fail2ban htop -y

Installing Go

VER="1.22.0" cd $HOME && \ wget "https://golang.org/dl/go$VER.linux-amd64.tar.gz" && \ sudo rm -rf /usr/local/go && \ sudo tar -C /usr/local -xzf "go$VER.linux-amd64.tar.gz" && \ rm "go$VER.linux-amd64.tar.gz" && \ echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ go version

Binary

git clone https://github.com/Orchestra-Labs/symphony symphony cd symphony git checkout 0.5.0-2-gedb91e0b4 make install symphonyd version --long | grep -e version -e commit # version: 0.5.0-2-gedb91e0b4 # commit: edb91e0b436e55f87f61a4a6002e913531b4031c

Initialization

Initialize the node (replace VALIDATOR_NAME with your own)

symphonyd init VALIDATOR_NAME --chain-id symphony-testnet-4 && \ symphonyd config chain-id symphony-testnet-4 && \ symphonyd config keyring-backend os

Genesis

Download genesis

wget https://storage.crouton.digital/testnet/symphony/files/genesis.json -O $HOME/.symphonyd/config/genesis.json

Addrbook

Download addrbook

wget https://storage.crouton.digital/testnet/symphony/files/addrbook.json -O $HOME/.symphonyd/config/addrbook.json

Configuration

EXTERNAL_IP=$(wget -qO- eth0.me) NODE_NUMBER="1" sed -i.bak \ -e "s/\(proxy_app = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))58\"/" \ -e "s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))57\"/" \ -e "s/\(pprof_laddr = \"\)\([^:]*\):\([0-9]*\).*/\1localhost:$(($NODE_NUMBER + 60))60\"/" \ -e "/\[p2p\]/,/^\[/{s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))56\"/}" \ -e "/\[p2p\]/,/^\[/{s/\(external_address = \"\)\([^:]*\):\([0-9]*\).*/\1${EXTERNAL_IP}:$(($NODE_NUMBER + 266))56\"/; t; s/\(external_address = \"\).*/\1${EXTERNAL_IP}:$(($NODE_NUMBER + 266))56\"/}" \ -e "s/\(prometheus_listen_addr = \":\)\([0-9]*\).*/\1$(($NODE_NUMBER + 266))60\"/" $HOME/.symphonyd/config/config.toml sed -i.bak \ -e "/\[api\]/,/^\[/{s/\(address = \"tcp:\/\/\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 13))17\4/}" \ -e "/\[grpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 90))90\4/}" \ -e "/\[grpc-web\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 90))91\4/}" \ -e "/\[json-rpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 85))45\4/}" \ -e "/\[json-rpc\]/,/^\[/{s/\(ws-address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 85))46\4/}" $HOME/.symphonyd/config/app.toml echo "export NODE=http://localhost:$(($NODE_NUMBER + 266))57" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ symphonyd config node $NODE

Create a service file

sudo tee /etc/systemd/system/symphonyd.service > /dev/null <<EOF [Unit] Description=symphony_node After=network.target [Service] User=$USER Type=simple ExecStart=$(which symphonyd) start --home $HOME/.symphonyd Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF

Start the node

sudo systemctl daemon-reload && \ sudo systemctl enable symphonyd && \ sudo systemctl restart symphonyd && \ sudo journalctl -u symphonyd -f -o cat

Snapshot

Block HeightSizeIndexerLast SnapshotDownload
22157011242Gnull2025-09-18T14:11:27.616193592Z arrow right icon

Restore node from snapshot

sudo apt install lz4 -y && \ sudo systemctl stop symphonyd && \ cp $HOME/.symphonyd/data/priv_validator_state.json $HOME/.symphonyd/priv_validator_state.json.backup && \ rm -rf $HOME/.symphonyd/data && \ curl https://storage.crouton.digital/testnet/symphony/snapshots/symphony_latest.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.symphonyd && \ mv $HOME/.symphonyd/priv_validator_state.json.backup $HOME/.symphonyd/data/priv_validator_state.json && \ sudo systemctl restart symphonyd && \ sudo journalctl -u symphonyd -f

State Sync

Restore node from state sync

SNAP_RPC="https://symphony-testnet-rpc.crouton.digital:443" && \ sudo systemctl stop symphonyd && \ cp $HOME/.symphonyd/data/priv_validator_state.json $HOME/.symphonyd/priv_validator_state.json.backup && \ symphonyd tendermint unsafe-reset-all --home $HOME/.symphonyd --keep-addr-book && \ peers="0654e74ef51697b400ceff9a16af9e15bfe42a72@46.4.91.76:29256" && \ sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.symphonyd/config/config.toml && \ LATEST_HEIGHT=$(curl -s "$SNAP_RPC/block" | jq -r .result.block.header.height) && \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)) && \ TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) && \ echo "$LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH" && sleep 2 && \ sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"| ; s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $HOME/.symphonyd/config/config.toml && \ mv $HOME/.symphonyd/priv_validator_state.json.backup $HOME/.symphonyd/data/priv_validator_state.json && \ sudo systemctl restart symphonyd && \ sudo journalctl -u symphonyd -f

Upgrade Node

VER="v0.5.0-2-gedb91e0b4" git clone https://github.com/Orchestra-Labs/symphony symphony && \ cd $HOME && \ rm -rf symphony && \ git clone https://github.com/Orchestra-Labs/symphony symphony && \ cd symphony && \ git checkout tags/$VER -b $VER && \ make install && \ sudo systemctl restart symphonyd && \ sudo journalctl -u symphonyd -f

Delete Node

sudo systemctl stop symphonyd && \ sudo systemctl disable symphonyd && \ sudo rm -rf /etc/systemd/system/symphonyd.service && \ sudo rm "$(which symphonyd)" && \ sudo rm -rf "$HOME/.symphonyd"

Key management

# This command generates a new wallet with a unique keypair. # Use this to create a secure, brand-new wallet for transactions. # Your wallet name = "wallet" symphonyd keys add wallet

Validator management

symphonyd tx staking create-validator \ --amount 1000000note \ --moniker "VALIDATOR_NAME" \ --identity "" \ --website "" \ --details "" \ --from wallet \ --commission-rate 0.1 \ --commission-max-rate 0.2 \ --commission-max-change-rate 0.01 \ --min-self-delegation 1 \ --pubkey $(celestia-appd tendermint show-validator) \ --chain-id symphony-testnet-4 \ --gas auto \ --gas-adjustment 1.4 \ --gas-prices 0.002note \ -y

Validator commands

# Retrieves comprehensive information regarding the validator. # This command is utilized to fetch details about the current validator, including its address, public key, and associated data. # Your wallet name = "wallet" symphonyd q staking validator $(symphonyd keys show wallet --bech val -a)

Onchain

# Withdraw all accumulated rewards from your account. # This command retrieves and withdraws all rewards earned from staking. # Your wallet name = "wallet" symphonyd tx distribution withdraw-all-rewards --from wallet --chain-id symphony-testnet-4 --gas-adjustment=1.15 --gas auto --gas-prices 0.002note -y

Chat With Us

Connect directly with our team by filling out the contact form. Whether you’re looking to optimize staking yields, deploy validator nodes, integrate RPC services, or find a reliable validator partner for your blockchain or project — we’re here to help.

We can explore Web3 and blockchain infrastructure solutions together and tailor our support to your long-term goals. Schedule a meeting, and let’s discuss your long-term goals.

Crouton Digital respects your privacy. By submitting this form, you are acknowledging that you have read and agree to our Privacy Policy, which details how we collect and use your information.