Shardeum Documentation
Run a Node/Delegate SHM

Run a Validator Node

A validator node participates in block production and consensus, requires staking, and must maintain high uptime. Validators can be jailed or slashed for misbehavior.

This guide describes how to install, configure, and operate a validator node on Shardeum EVM mainnet.

1. System Requirements

  • Operating System: Ubuntu 22.04 LTS
  • CPU: 4 cores (8 threads)
  • RAM: 16GB
  • Storage: 1TB NVMe SSD
  • Network: 100 Mbps dedicated
  • Dependencies: git, jq, curl, make, build-essential, pkg-config
  • Go: Version 1.25+

Install dependencies:

sudo apt update
sudo apt install git jq curl make build-essential pkg-config -y

Install Go:

curl -LO https://go.dev/dl/go1.25.0.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.25.0.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
go version

2. Install Shardeum Node Binary

git clone https://github.com/shardeum/shardeum-evm.git
cd shardeum-evm

Build binary (May take several minutes):

make install

Add Go bin directory to PATH:

echo 'export PATH=$PATH:/root/go/bin' >> ~/.bashrc
source ~/.bashrc

Verify installation:

shardeumd version

Verify binary is accessible:

command -v shardeumd

3. Set Environment Variables

Set the config from the base folder of the source code (shardeum-evm):

export SHARDEUM_CONFIG_DIR="$PWD/config"
export SHARDEUM_NETWORK=mainnet
export BINARY=$(command -v shardeumd)

4. Initialize the Node

PLEASE ENSURE YOUR KEYS ARE SECURED PROPERLY

Choose identifiers:

NODE_ID="<validator-id>"  # pick a short id like node0, node1 or shardeumnode
MONIKER="<validator-name>"  # choose your validator name which is easy to remember

Initialize:

shardeumd init "$MONIKER" \
  --chain-id shardeum_8118-1 \
  --home $HOME/.mainnet/$NODE_ID \
  --overwrite

5. Copy Genesis File

Copy the genesis file from the repository:

cp config/mainnet-genesis.json $HOME/.mainnet/$NODE_ID/config/genesis.json

Check that the genesis file has been copied correctly:

ls -lh $HOME/.mainnet/$NODE_ID/config/genesis.json

Validate the genesis file and check chain ID:

jq -r '.chain_id' $HOME/.mainnet/$NODE_ID/config/genesis.json

The expected chain ID value is:

shardeum_8118-1

6. Start and Sync the Node

Start the node:

shardeumd start \
  --home $HOME/.mainnet/$NODE_ID \
  --chain-id shardeum_8118-1 \
  --p2p.seeds [email protected]:27656,[email protected]:27656 \
  --p2p.laddr tcp://0.0.0.0:27656 \
  --rpc.laddr tcp://127.0.0.1:26657 \
  --pruning nothing \
  > $HOME/.mainnet/$NODE_ID/node.log

7. Check Sync Status

Open another terminal and confirm the node directory exists:

export NODE_ID="<your node id>"   # add the same node id you used during setup
ls $HOME/.mainnet/$NODE_ID

If node.log appears in the list, you can monitor the sync by streaming the log:

tail -f $HOME/.mainnet/$NODE_ID/node.log

Look for lines similar to:

indexed block events height=2897690

If the number after height keeps increasing, your node is syncing correctly.

Validator Sync Logs

When the height matches the latest block shown on the explorer, your node is fully synced.

Latest Blocks

8. Create the Validator Key (After Sync)

IMPORTANT: Perform this step only after the node is fully synced.

PLEASE ENSURE YOUR KEYS ARE SECURED PROPERLY

Open a new terminal and move into the repo:

cd shardeum-evm

Set the required environment variables:

export SHARDEUM_CONFIG_DIR="$PWD/config"
export SHARDEUM_NETWORK=mainnet
export BINARY=$(command -v shardeumd)

Create a new validator key:

shardeumd keys add validator-key

or restore an existing key instead, use:

shardeumd keys add validator-key --recover

You will be prompted to set a password:

Enter keyring passphrase: {Setup a new password here}

CRITICAL: Save your mnemonic phrase securely. It is the only way to recover your validator account.

Retrieve your validator address:

shardeumd keys show validator-key -a

Make sure you store your validator keys using a secure method you trust and follow a backup process you are comfortable with.

9. Fund Your Validator Account

Your validator account must have enough SHM for:

  • Minimum stake: 1 SHM
  • Gas fees for create-validator: ~1024 SHM
  • Total recommended: 1025 SHM or more

Funding Options:

Verify your balance:

shardeumd query bank balances $(shardeumd keys show validator-key -a)

Example output:

balances:
- amount: "1025000000000000000000"
  denom: ashm
pagination:
  total: "1"

10. Create Your Validator and Stake Tokens

Get your validator public key:

shardeumd keys show validator-key -a

Get your validator consensus key:

shardeumd comet show-validator --home $HOME/.mainnet/$NODE_ID

If your node ID is node0, replace $NODE_ID with node0.

Example output:

{"@type":"/cosmos.crypto.ed25519.PubKey","key":"PA1zbDr+0Z9cVlHTqR9t263t4j2voBRovvaKfiBnzds="}

Copy the value inside the key. You will need it in the next step.

Create the validator.json file

Open the file:

nano validator.json

Paste the following template and replace the key and details as needed:

Optional: Add identity, website, and details

{
  "pubkey": {
    "@type": "/cosmos.crypto.ed25519.PubKey",
    "key": "<your validator consensus key>"
  },
  "amount": "1000000000000000000ashm",
  "moniker": "<Your validator name>",
  "identity": "<keybase-identity>",
  "website": "<https://your-website.com>",
  "security": "<contact email, optional>",
  "details": "<short description of your validator>",
  "commission-rate": "0.10",
  "commission-max-rate": "0.20",
  "commission-max-change-rate": "0.01",
  "min-self-delegation": "1"
}

Save and exit:

  • Ctrl+O
  • Press Enter
  • Ctrl+X

Create your validator

Run:

shardeumd tx staking create-validator validator.json \
  --from=validator-key \
  --chain-id=shardeum_8118-1 \
  --gas="auto" \
  --gas-adjustment="1.5" \
  --gas-prices="2048130280389041ashm"

Enter your keyring passphrase when asked.

You will see a full preview of the transaction. The system will then ask:

confirm transaction before signing and broadcasting [y/N]:

Type y and press Enter.

A successful result shows:

code: 0
txhash: <your transaction hash>

11. Verify Your Validator Status

Check that the validator is registered:

shardeumd query staking validator $(shardeumd keys show validator-key --bech val -a)

You should see output containing:

status: BOND_STATUS_BONDED
moniker: <your moniker>
tokens: <your voting power>
delegator_shares: <your voting power>

Success indicators:

  • Status: BOND_STATUS_BONDED
  • Voting power: > 0
  • Jailed: false

For guidance on validator troubleshooting, debugging, monitoring, and performance best practices, continue to the Advanced Operations section.