| [ Web Proxy ] |
| Viewing: https://docs.shardeum.org/docs/node/run/validator | [Back] [Original] |
Mainnet validator update: Validators should run the currently supported Shardeum EVM mainnet release. Following the September 2026 security update, validators restarting their nodes should use v1.0.2 or later as officially announced. See the [official Shardeum EVM releases] for binaries, Docker images, and checksums.
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.
sudo apt update
sudo apt install git jq curl make build-essential pkg-config -ycurl -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 versionFetch the latest release tags and check out the supported mainnet release:
git fetch --tags
git checkout v1.0.2Build and install the binary (may take several minutes):
make installAdd Go bin directory to PATH:
echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.bashrc
source ~/.bashrcVerify the installation:
shardeumd versionSet 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)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 rememberInitialize:
shardeumd init "$MONIKER" \
--chain-id shardeum_8118-1 \
--home $HOME/.mainnet/$NODE_ID \
--overwriteCopy the genesis file from the repository:
cp config/mainnet-genesis.json $HOME/.mainnet/$NODE_ID/config/genesis.jsonCheck that the genesis file has been copied correctly:
ls -lh $HOME/.mainnet/$NODE_ID/config/genesis.jsonValidate the genesis file and check chain ID:
jq -r '.chain_id' $HOME/.mainnet/$NODE_ID/config/genesis.jsonThe expected chain ID value is:
shardeum_8118-1Start 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 &
# Watch logs
tail -f $HOME/.mainnet/$NODE_ID/node.logLook for lines similar to:
indexed block events height=2897690If 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]
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-evmSet 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-keyor restore an existing key instead, use:
shardeumd keys add validator-key --recoverYou 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 -aMake sure you store your validator keys using a secure method you trust and follow a backup process you are comfortable with.
Your validator account must have enough SHM for:
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"shardeumd keys show validator-key -ashardeumd comet show-validator --home $HOME/.mainnet/$NODE_IDIf 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.
Open the file:
nano validator.jsonPaste 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:
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>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:
BOND_STATUS_BONDEDfalseValidator showing jailed: true? See Unjailing a Validator
For guidance on validator troubleshooting, debugging, monitoring, and performance best practices, continue to the Advanced Operations section.
| Web Proxy Viewer | New URL | Original Page |