Hazen Network SolutionsHazen Guides
Tellor Mainnet logo

mainnet

Tellor Mainnet

🔵 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.

Ubuntu Tellor Version Chain ID License: MIT

hazennetworksolutions.com


Network: Tellor Layer Mainnet (Chain ID: tellor-1)
Version: v6.1.5
Last Updated: May 2026


Table of Contents


Hardware Requirements

ComponentMinimumRecommended
Operating SystemUbuntu 22.04+Ubuntu 24.04
CPU8 cores16 cores
RAM32 GB64 GB
Disk1 TB NVMe Gen42 TB NVMe Gen4
Network500 Mbps down / 100 Mbps up1 Gbps

⚠️ Tellor Layer is a high-performance oracle chain. Validators require higher specs than typical Cosmos chains.


Network Endpoints


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 wallet with 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.

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.

UpgradeBlock HeightVersion
v5.0.01,534,900v5.0.0
v5.1.03,891,401v5.1.0
v5.1.16,699,035v5.1.1
v5.1.28,593,590v5.1.2
v6.0.09,908,000v6.0.0
v6.1.013,280,690v6.1.0-fix
v6.1.113,590,000v6.1.1
v6.1.5Latestv6.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:

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