Repository navigation
v0.2.0: Cosmos Node Process Type
What's New
Cosmos Node Support (type = "cosmos")
Full lifecycle management for Cosmos SDK blockchain nodes (monod, gaiad, etc.):
- CosmosRunner — Spawns nodes with
RLIMIT_NOFILEviapre_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
/statusfor sync state, block height, stale detection. Queries slashing module for missed blocks and jailed status - Upgrade Halt Detection — Detects
UPGRADE "name" NEEDED at heightmessages, setsupgrade_haltedstatus, 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_envsupport - 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 asroot— usesudofor 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 = 5Security
- 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_envpreferred overbot_tokendirect value- Run as a dedicated non-root user for defense in depth