🔵 Tellor Layer Mainnet Full Node & Validator Setup Guide
A complete guide to running a Tellor Layer mainnet full node and registering as a validator
System preparation, binary installation, state sync or genesis sync, and validator creation — step by step.
Network: Tellor Layer Mainnet (Chain ID: tellor-1)
Version: v6.1.5
Last Updated: May 2026
Table of Contents
- Hardware Requirements
- Network Endpoints
- Step 1 — System Verification
- Step 2 — System Update and Dependencies
- Step 3 — Install Go
- Step 4 — Download Binary
- Step 5 — Install Cosmovisor
- Step 6 — Set Environment Variables
- Step 7 — Initialize the Node
- Step 8 — Download Genesis and Addrbook
- Step 9 — Configure Ports, Gas Prices and Pruning
- Step 10 — Configure Seeds and Peers
- Step 11 — Create Systemd Service
- Step 12 — Sync the Node
- Step 13 — Start the Node
- Step 14 — Create a Wallet
- Step 15 — Register as a Validator
- Monitoring the Node
- Useful Commands
- Staying Updated
Hardware Requirements
| Component | Minimum | Recommended |
|---|---|---|
| Operating System | Ubuntu 22.04+ | Ubuntu 24.04 |
| CPU | 8 cores | 16 cores |
| RAM | 32 GB | 64 GB |
| Disk | 1 TB NVMe Gen4 | 2 TB NVMe Gen4 |
| Network | 500 Mbps down / 100 Mbps up | 1 Gbps |
⚠️ Tellor Layer is a high-performance oracle chain. Validators require higher specs than typical Cosmos chains.
Network Endpoints
| Type | Endpoint |
|---|---|
| RPC | https://mainnet.tellorlayer.com/rpc/ |
| REST API | https://mainnet.tellorlayer.com/api/ |
| Explorer | https://layerscan.io |
| GitHub | https://github.com/tellor-io/layer |
Step 1 — System Verification
After SSH-ing into your server, verify the system meets requirements:
lsb_release -a # Should be Ubuntu 22.04 or higher
uname -r # Kernel version
lscpu | grep -E "Model name|CPU\(s\)|Thread|Socket|Core"
free -h # Minimum 32 GB RAM
df -h # Minimum 1 TB free disk
Step 2 — System Update and Dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git wget htop tmux build-essential jq make lz4 gcc unzip \
screen btop iotop nethogs hdparm cmake perl automake autoconf libtool libssl-dev yq
Step 3 — Install Go
Tellor Layer v6.1.5 requires Go 1.22+:
cd $HOME
VER="1.23.0"
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
[ ! -d ~/go/bin ] && mkdir -p ~/go/bin
Verify the installation:
go version
Expected output: go version go1.23.0 linux/amd64
Step 4 — Download Binary
mkdir -p $HOME/.layer/cosmovisor/genesis/bin
cd /tmp
wget https://github.com/tellor-io/layer/releases/download/v6.1.5/layer_Linux_x86_64.tar.gz
tar -xvzf layer_Linux_x86_64.tar.gz
mv layerd $HOME/.layer/cosmovisor/genesis/bin/
chmod +x $HOME/.layer/cosmovisor/genesis/bin/layerd
rm -f /tmp/layer_Linux_x86_64.tar.gz
ln -s $HOME/.layer/cosmovisor/genesis $HOME/.layer/cosmovisor/current -f
sudo ln -s $HOME/.layer/cosmovisor/current/bin/layerd /usr/local/bin/layerd -f
Verify:
layerd version
Expected output: v6.1.5
Step 5 — Install Cosmovisor
go install cosmossdk.io/tools/cosmovisor/cmd/[email protected]
Verify:
cosmovisor version
Step 6 — Set Environment Variables
Tellor Layer requires a Token Bridge contract address. Add it to your shell profile:
MONIKER="YOUR_MONIKER"
PORT="26" # Default is 26. Change to avoid conflicts (e.g. 27, 28...)
echo "export MONIKER=$MONIKER" >> $HOME/.bash_profile
echo "export LAYER_CHAIN_ID=\"tellor-1\"" >> $HOME/.bash_profile
echo "export LAYER_PORT=$PORT" >> $HOME/.bash_profile
echo "export TOKEN_BRIDGE_V2_ADDRESS=\"0x6ec401744008f4B018Ed9A36f76e6629799Ee50E\"" >> $HOME/.bash_profile
source $HOME/.bash_profile
Step 7 — Initialize the Node
layerd config node tcp://localhost:${LAYER_PORT}657
layerd config keyring-backend test
layerd config chain-id tellor-1
layerd init $MONIKER --chain-id tellor-1
Step 8 — Download Genesis and Addrbook
wget -O $HOME/.layer/config/genesis.json \
https://raw.githubusercontent.com/hazennetworksolutions/tellor-mainnet/refs/heads/main/genesis.json
wget -O $HOME/.layer/config/addrbook.json \
https://raw.githubusercontent.com/hazennetworksolutions/tellor-mainnet/refs/heads/main/addrbook.json
Verify genesis checksum:
sha256sum $HOME/.layer/config/genesis.json
Step 9 — Configure Ports, Gas Prices and Pruning
Custom Ports
sed -i.bak -e "s%:1317%:${LAYER_PORT}317%g;
s%:8080%:${LAYER_PORT}080%g;
s%:9090%:${LAYER_PORT}090%g;
s%:9091%:${LAYER_PORT}091%g;
s%:8545%:${LAYER_PORT}545%g;
s%:8546%:${LAYER_PORT}546%g" $HOME/.layer/config/app.toml
sed -i.bak -e "s%:26658%:${LAYER_PORT}658%g;
s%:26657%:${LAYER_PORT}657%g;
s%:6060%:${LAYER_PORT}060%g;
s%:26656%:${LAYER_PORT}656%g;
s%^external_address = \"\"%external_address = \"$(wget -qO- eth0.me):${LAYER_PORT}656\"%;
s%:26660%:${LAYER_PORT}660%g" $HOME/.layer/config/config.toml
Gas Prices
sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "0loya"|g' \
$HOME/.layer/config/app.toml
Enable API
sed -i 's|address = "tcp://localhost:1317"|address = "tcp://0.0.0.0:1317"|g' \
$HOME/.layer/config/app.toml
CORS (required for API access)
sed -i 's|cors_allowed_origins = \[\]|cors_allowed_origins = ["*"]|g' \
$HOME/.layer/config/config.toml
Pruning
sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" $HOME/.layer/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $HOME/.layer/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"19\"/" $HOME/.layer/config/app.toml
Enable Prometheus (optional)
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.layer/config/config.toml
Disable Indexer (saves disk space)
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.layer/config/config.toml
Step 10 — Configure Seeds and Peers
SEEDS="327fb4151de9f78f29ff10714085e347a4e3c836@rpc.tellor.nodestake.org:666"
PEERS="[email protected]:26656,[email protected]:41767,[email protected]:41656,[email protected]:51656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656"
sed -i -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*seeds *=.*/seeds = \"$SEEDS\"/}" \
-e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*persistent_peers *=.*/persistent_peers = \"$PEERS\"/}" \
$HOME/.layer/config/config.toml
Step 11 — Create Systemd Service
⚠️ The service requires a wallet key name. Make sure to create your wallet first (Step 14) and replace
walletwith the actual name you use.
sudo tee /etc/systemd/system/layerd.service > /dev/null << EOF
[Unit]
Description=Tellor Layer Node Service
After=network-online.target
[Service]
User=$USER
ExecStart=$(which cosmovisor) run start --home $HOME/.layer --keyring-backend test --key-name wallet --api.enable --api.swagger
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="DAEMON_HOME=$HOME/.layer"
Environment="DAEMON_NAME=layerd"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="TOKEN_BRIDGE_V2_ADDRESS=0x6ec401744008f4B018Ed9A36f76e6629799Ee50E"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:$HOME/.layer/cosmovisor/current/bin"
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable layerd
Step 12 — Sync the Node
There are two sync methods. State sync is recommended for a fast setup.
Option A — State Sync (Recommended)
Get the trusted height and hash from the official RPC:
export LATEST_HEIGHT=$(curl -s https://mainnet.tellorlayer.com/rpc/block | jq -r .result.block.header.height)
export TRUSTED_HEIGHT=$((LATEST_HEIGHT - 35000))
export TRUSTED_HASH=$(curl -s "https://mainnet.tellorlayer.com/rpc/block?height=$TRUSTED_HEIGHT" | jq -r .result.block_id.hash)
echo "Trusted Height: $TRUSTED_HEIGHT"
echo "Trusted Hash: $TRUSTED_HASH"
Apply the state sync config:
sed -i -E \
-e "s|^enable *=.*|enable = true|" \
-e "s|^rpc_servers *=.*|rpc_servers = \"https://mainnet.tellorlayer.com/rpc/,https://mainnet.tellorlayer.com/rpc/\"|" \
-e "s|^trust_height *=.*|trust_height = $TRUSTED_HEIGHT|" \
-e "s|^trust_hash *=.*|trust_hash = \"$TRUSTED_HASH\"|" \
-e "s|^trust_period *=.*|trust_period = \"168h0m0s\"|" \
$HOME/.layer/config/config.toml
Option B — Genesis Sync
Genesis sync requires switching the binary at each upgrade height. This is managed automatically by Cosmovisor if upgrade binaries are placed in the correct directories.
| Upgrade | Block Height | Version |
|---|---|---|
| v5.0.0 | 1,534,900 | v5.0.0 |
| v5.1.0 | 3,891,401 | v5.1.0 |
| v5.1.1 | 6,699,035 | v5.1.1 |
| v5.1.2 | 8,593,590 | v5.1.2 |
| v6.0.0 | 9,908,000 | v6.0.0 |
| v6.1.0 | 13,280,690 | v6.1.0-fix |
| v6.1.1 | 13,590,000 | v6.1.1 |
| v6.1.5 | Latest | v6.1.5 |
⚠️ Genesis sync takes a very long time. State sync is strongly recommended for new setups.
Step 13 — Start the Node
sudo systemctl start layerd
sudo journalctl -u layerd -f --no-pager -o cat
Verify the service is running:
sudo systemctl status layerd --no-pager
The service should show active (running).
Check sync status:
layerd status 2>&1 | jq .SyncInfo
Wait until catching_up is false before proceeding to validator registration.
Step 14 — Create a Wallet
layerd keys add wallet --keyring-backend test
⚠️ CRITICAL: Save your mnemonic phrase in a secure location. Without it, you cannot recover your wallet.
To recover an existing wallet:
layerd keys add wallet --recover --keyring-backend test
Check your balance:
layerd query bank balances $(layerd keys show wallet -a --keyring-backend test)
ℹ️ Note: If you updated the service file with a different wallet name in Step 11, restart the service after creating your wallet:
sudo systemctl restart layerd
Step 15 — Register as a Validator
The node must be fully synced and you must have TRB tokens before creating a validator.
Get your pubkey:
layerd comet show-validator
Create validator JSON:
cat > $HOME/validator.json << EOF
{
"pubkey": $(layerd comet show-validator),
"amount": "1000000loya",
"moniker": "YOUR_MONIKER",
"identity": "",
"website": "",
"security": "",
"details": "",
"commission-rate": "0.05",
"commission-max-rate": "0.20",
"commission-max-change-rate": "0.01",
"min-self-delegation": "1"
}
EOF
Submit the transaction:
layerd tx staking create-validator $HOME/validator.json \
--from wallet \
--chain-id tellor-1 \
--keyring-backend test \
--gas auto \
--gas-adjustment 1.4 \
--fees 500loya \
-y
Verify your validator:
layerd query staking validator \
$(layerd keys show wallet --bech val -a --keyring-backend test)
Monitoring the Node
Watch live block commits:
sudo journalctl -u layerd -f --no-pager | grep "committed block"
Full logs:
sudo journalctl -u layerd -f --no-pager
Sync status:
layerd status 2>&1 | jq .SyncInfo
Service management:
# Restart service
sudo systemctl restart layerd
# Stop service
sudo systemctl stop layerd
# Check status
sudo systemctl status layerd
Useful Commands
Wallet
# List wallets
layerd keys list --keyring-backend test
# Show wallet address
layerd keys show wallet -a --keyring-backend test
# Check balance
layerd query bank balances $(layerd keys show wallet -a --keyring-backend test)
Staking
# Delegate tokens
layerd tx staking delegate \
$(layerd keys show wallet --bech val -a --keyring-backend test) 1000000loya \
--from wallet --chain-id tellor-1 --keyring-backend test \
--gas auto --gas-adjustment 1.4 --fees 500loya -y
# Redelegate tokens
layerd tx staking redelegate \
$(layerd keys show wallet --bech val -a --keyring-backend test) <NEW_VALOPER> 1000000loya \
--from wallet --chain-id tellor-1 --keyring-backend test \
--gas auto --gas-adjustment 1.4 --fees 500loya -y
# Undelegate tokens
layerd tx staking unbond \
$(layerd keys show wallet --bech val -a --keyring-backend test) 1000000loya \
--from wallet --chain-id tellor-1 --keyring-backend test \
--gas auto --gas-adjustment 1.4 --fees 500loya -y
Rewards
# Withdraw all rewards
layerd tx distribution withdraw-all-rewards \
--from wallet --chain-id tellor-1 --keyring-backend test \
--gas auto --gas-adjustment 1.4 --fees 500loya -y
# Withdraw commission
layerd tx distribution withdraw-rewards \
$(layerd keys show wallet --bech val -a --keyring-backend test) --commission \
--from wallet --chain-id tellor-1 --keyring-backend test \
--gas auto --gas-adjustment 1.4 --fees 500loya -y
Governance
# List proposals
layerd query gov proposals
# Vote on a proposal
layerd tx gov vote 1 yes \
--from wallet --chain-id tellor-1 --keyring-backend test \
--gas auto --gas-adjustment 1.4 --fees 500loya -y
Validator Operations
# Edit validator
layerd tx staking edit-validator \
--new-moniker "NEW_MONIKER" \
--identity "" \
--from wallet --chain-id tellor-1 --keyring-backend test \
--gas auto --gas-adjustment 1.4 --fees 500loya -y
# Unjail validator
layerd tx slashing unjail \
--from wallet --chain-id tellor-1 --keyring-backend test \
--gas auto --gas-adjustment 1.4 --fees 500loya -y
# Check validator signing info
layerd query slashing signing-info $(layerd comet show-validator)
Staying Updated
Follow these channels to stay informed about upgrades and announcements:
- Discord: Tellor Discord
- GitHub Releases: tellor-io/layer Releases
- Official Docs: docs.tellor.io
Upgrade with Cosmovisor (example: v7.0.0)
mkdir -p $HOME/.layer/cosmovisor/upgrades/v7.0.0/bin
cd /tmp
wget https://github.com/tellor-io/layer/releases/download/v7.0.0/layer_Linux_x86_64.tar.gz
tar -xvzf layer_Linux_x86_64.tar.gz
mv layerd $HOME/.layer/cosmovisor/upgrades/v7.0.0/bin/
chmod +x $HOME/.layer/cosmovisor/upgrades/v7.0.0/bin/layerd
rm -f /tmp/layer_Linux_x86_64.tar.gz
Cosmovisor will automatically switch to the new binary at the upgrade block height.
Guide maintained by HazenNetworkSolutions