Skip to content

v0.2.0: Cosmos Node Process Type

Choose a tag to compare

@NayiemW NayiemW released this 28 Mar 08:02
· 24 commits to prod since this release

What's New

Cosmos Node Support (type = "cosmos")

Full lifecycle management for Cosmos SDK blockchain nodes (monod, gaiad, etc.):

  • CosmosRunner — Spawns nodes with RLIMIT_NOFILE via pre_exec, validates binary/key paths, warns on world-readable config dirs
  • Relay-Until-Synced — State machine that starts as relay, auto-enables validator key when synced, preventing jailing
  • Health Checks — Polls CometBFT /status for sync state, block height, stale detection. Queries slashing module for missed blocks and jailed status
  • Upgrade Halt Detection — Detects UPGRADE "name" NEEDED at height messages, sets upgrade_halted status, suppresses auto-restart, sends notification with required action
  • Restart-on-Crash — Implements the restart logic with RestartMode (on-crash/always/never), max restarts, delay
  • Notifications — 6 new event types (ValidatorActivated, CatchingUp, MissedBlocks, Jailed, StaleNode, UpgradeHalted) with severity filtering and bot_token_env support
  • CLI — New oxidepm cosmos-status <name> command
  • TUI — Cosmos details panel showing chain ID, node mode, lifecycle state, upgrade halt info

Config Example

Note: Always run node processes as a dedicated non-root user (e.g. monouser) with only the permissions it needs. Avoid running as root — use sudo for one-off privileged operations like binding low ports or adjusting system limits.

[[apps]]
name = "monod"
mode = "cosmos"
binary = "/usr/local/bin/monod"
args = ["start", "--home", "/home/monouser/.mono"]
cosmos_mode = "validator"
rpc_endpoint = "http://localhost:26657"
chain_id = "mono_6940-1"
relay_until_synced = true
validator_key_path = "/home/monouser/.mono/config/priv_validator_key.json"
nofile_limit = 65535
detect_upgrade_halt = true
restart = "on-crash"
max_restarts = 5

Security

  • Validator key operations only rename files, never read contents
  • Logs never contain key material or sensitive config
  • Telegram messages only include node name, status, heights — no paths/IPs
  • bot_token_env preferred over bot_token direct value
  • Run as a dedicated non-root user for defense in depth