---
node_type: validator
chain_id: rogue_4221-1
binary: rogued
denom: arogue
audience: machine
last_verified: 2026-06-20
canonical_url: https://roguelayer.one/run-a-node/validator/agent
---


# Validator node — agent instructions

## CONSTANTS

```
CHAIN_ID=rogue_4221-1
BINARY=rogued
DENOM=arogue
DECIMALS=18
NODE_HOME=~/.evmd
GENESIS_URL=http://dl.roguelayer.one/genesis.json
GENESIS_SHA256=1899469fc55dc292891e4d3d12d997524939a5bd7f1ddb1a37f4a831a8e5bf4d
# Binaries served gzip-compressed: curl the .gz, `gunzip -f`, then sha256 the decompressed file.
INSTALL_URL_AMD64=http://dl.roguelayer.one/rogued-linux-amd64.gz
INSTALL_SHA256_AMD64=a7f310a3211b49093e0ba2b30d93a0025ccbf08c5de11d1907a596638818b086  # decompressed
INSTALL_URL_ARM64=http://dl.roguelayer.one/rogued-linux-arm64.gz
INSTALL_SHA256_ARM64=3ad2e0130c6e504a12f79d993c404484d606b035801626695ee0008aa06ad729  # decompressed
SEED=a4a5cdc25a5809acaedc68325019855f01fa8b35@seed.roguelayer.one:26656
ONE_COMMAND_INSTALLER=http://dl.roguelayer.one/install.sh
VALIDATOR_JSON_TMPL=http://dl.roguelayer.one/validator.json.tmpl
FAUCET_URL=https://faucet.roguelayer.one
FAUCET_GRANT_ROGUE=11000
MIN_GAS_PRICE=0.0001arogue
P2P_PORT=26656
```

## KEY FACTS

| Fact | Value |
|---|---|
| Chain ID (Cosmos / all tx) | `rogue_4221-1` |
| EVM chain-id (MetaMask only) | `4221` |
| Node home | `~/.evmd` |
| Denom | `arogue` (18 decimals; 1 ROGUE = `1000000000000000000arogue`) |
| Key type | `eth_secp256k1`, coin-type 60 |
| Keyring | `--keyring-backend file` |
| CometBFT subcommand | `rogued comet …` (NOT `tendermint`) |
| Validator JSON style | SDK v0.53 JSON file (NOT flag form) |
| Sync method | blocksync only (no state-sync available) |
| Faucet | `https://faucet.roguelayer.one/send?address=<rogue1…|0x…>` → ~11,000 ROGUE, 1 grant/address/24h |

## PREFLIGHT

Abort if any check fails.

- `df -BG ${HOME} | awk 'NR==2 {print $4}' | tr -d G` → >= 200
- `awk '/MemTotal/ {print int($2/1024/1024)}' /proc/meminfo` → >= 16
- `command -v jq curl` → both exist
- Disk is NVMe/SSD (CometBFT fsyncs every block; HDD will cause jail)

## STEPS

```bash
# ─── STEP 1 — one-command install ──────────────────────────────────────────
# Installs binary, genesis, peers, cosmovisor, systemd service, starts node.
bash <(curl -sL http://dl.roguelayer.one/install.sh)

# Verify service is running:
systemctl is-active rogued          # expect: active
rogued version                      # expect: version string

# ─── STEP 2 — wait for blocksync ───────────────────────────────────────────
until rogued status 2>&1 | jq -e '.sync_info.catching_up == false' >/dev/null 2>&1; do
  sleep 30
done
# Verify:
rogued status 2>&1 | jq '.sync_info | {latest_block_height, catching_up}'
curl -s localhost:26657/net_info | jq '.result.n_peers'   # must be > 0

# ─── STEP 3 — create operator key ──────────────────────────────────────────
rogued keys add validator --keyring-backend file
# STOP: record mnemonic and keyring password offline before continuing.
rogued keys show validator -a --keyring-backend file      # rogue1... address

# ─── STEP 4 — fund operator address (public faucet) ────────────────────────
ADDR=$(rogued keys show validator -a --keyring-backend file)
curl -s "https://faucet.roguelayer.one/send?address=$ADDR"   # ~11,000 ROGUE, 1/address/24h
# Grant lands in the next block (~5s). Then verify:
sleep 6
rogued q bank balances "$ADDR"
# Abort if balance is zero (re-check after a few blocks; respect the 24h rate limit).

# ─── STEP 5 — create validator (SDK v0.53 JSON form) ───────────────────────
PUBKEY=$(rogued comet show-validator)
MONIKER="${MONIKER:-agent-validator}"

cat > ~/validator.json <<EOF
{
  "pubkey": ${PUBKEY},
  "amount": "10000000000000000000000arogue",
  "moniker": "${MONIKER}",
  "identity": "",
  "website": "",
  "security": "",
  "details": "",
  "commission-rate": "0.10",
  "commission-max-rate": "0.20",
  "commission-max-change-rate": "0.01",
  "min-self-delegation": "1000000000000000000"
}
EOF

rogued tx staking create-validator ~/validator.json \
  --from validator \
  --keyring-backend file \
  --chain-id rogue_4221-1 \
  --gas auto --gas-adjustment 1.5 \
  --gas-prices 0.0001arogue \
  -y
# Record the tx hash from output.

```

## VERIFY_FINAL

```bash
rogued q staking validator \
  $(rogued keys show validator --bech val -a --keyring-backend file)
# Expect: status: BOND_STATUS_BONDED

rogued q slashing signing-info $(rogued comet show-address)
# Watch missed_blocks_counter — must stay low.
```

## FAILURE_MODES

| Code / symptom | Cause | Fix |
|---|---|---|
| `catching_up: true` forever, `n_peers: 0` | Firewall or seed unreachable | `nc -vz seed.roguelayer.one 26656`; open inbound 26656 |
| `insufficient funds` (tx code 5) | Balance too low or wrong denom | Verify balance is in `arogue`; top up at `https://faucet.roguelayer.one` (1 grant/address/24h) |
| `out of gas` (tx code 11) | gas-adjustment too low | Retry with `--gas-adjustment 2.0` |
| `key not found: validator` | Wrong keyring backend | Add `--keyring-backend file` |
| Node halts at specific height | Scheduled upgrade | Replace binary (or pre-stage in cosmovisor) and restart |

## SAFETY

- NEVER run two `rogued` processes with the same `priv_validator_key.json`. Double-sign = 5% slash + permanent tombstone (irreversible).
- Back up `~/.evmd/config/priv_validator_key.json` AND `~/.evmd/data/priv_validator_state.json` before STEP 5.
- Downtime: miss >50 of rolling 100 blocks → 1% slash + 10-min jail.
  Unjail: `rogued tx slashing unjail --from validator --keyring-backend file --chain-id rogue_4221-1 --gas auto --gas-prices 0.0001arogue`
