These values are grounded in the current c8ntinuum genesis and node code.

Network constants

Prerequisites

  • A fully synced ctmd node. Install it with the manual mainnet install below. deploy.sh, described in Full Node Installation, is the install path for non-validator nodes; validators do not use it. Submit create-validator only after ctmd status reports catching_up as false.
  • The node home. Commands on this page use ~/.ctmd, the default home of ctmd. The manual install below puts the node home at /var/lib/ctmd, owned by the ctmd user, so run commands that read it, such as ctmd comet show-validator, as that user with --home /var/lib/ctmd.

Manual mainnet install

This route installs a mainnet ctmd node on Linux by hand. Each step does what deploy.sh install and deploy.sh state-sync do, so the host ends up with the same layout, service unit, and configuration as a deploy.sh host, without the script. Release binaries exist for linux-amd64, linux-arm64, and darwin-arm64; the systemd steps apply to Linux only. You need curl, jq, tar, sha256sum, and systemd. Run the commands in a root shell (sudo -i), as deploy.sh does, and keep one working directory for the downloaded files.

Download and verify the release

Release binaries are listed in metadata.json. Resolve the current version and the tarball and checksum URLs for your platform:
Download the tarball and its .sha256 file, then verify the tarball. The check must print OK:
The tarball unpacks to ctmd-<version>-<platform>/, which holds bin/ctmd and a lib/ directory of bundled shared libraries (RocksDB, the SP1 verifier, and their compression libraries). ctmd needs both.

Install the binary and libraries

Install into a versioned directory under /opt, then point the /opt/ctmd and /usr/local/bin/ctmd symlinks at it. This is the layout deploy.sh uses, so Rollback works the same way on this host.

Create the service user and node home

Check that the binary runs with its bundled libraries. It prints the release version:

Initialize the node

Initialize the node home as the ctmd user with the mainnet chain ID. Like deploy.sh, run it from inside the node home, in a subshell so your working directory does not change:
ctmd init also creates the validator consensus key at /var/lib/ctmd/config/priv_validator_key.json. Back it up securely, and see KMS and sentry architecture before you rely on the local file signer.

Install and verify genesis

Replace the generated genesis.json with the mainnet genesis, then check it against the SHA-256 that metadata.json publishes. The check must print OK:
The mainnet genesis SHA-256 is ebe6292aa5885b508b1d455c93564683c92e9cc3f80592ee615b1cffbc74a653.

Configure peers and chain IDs

Build the seed and persistent peer lists from the mainnet entry in peers.json:
Set these keys in /var/lib/ctmd/config/config.toml, using the two lists printed above:
Once your validator runs behind sentries, replace persistent_peers with your sentries, as described in KMS and sentry architecture. Set the EVM chain ID in /var/lib/ctmd/config/app.toml explicitly:
Set the client chain ID in /var/lib/ctmd/config/client.toml:

Configure state sync (optional)

State sync bootstraps the node from a recent snapshot instead of replaying from genesis. deploy.sh state-sync takes the trust height and hash from the first trusted RPC in peers.json, 2000 blocks below its latest height, and builds the persistent peers from the node IDs of the two trusted RPCs and the hosts of the first two persistent peers:
Put the printed values in /var/lib/ctmd/config/config.toml:
A node home that has never started holds no chain data. If this node has already run, stop it and clear its chain data first, as deploy.sh state-sync does. The reset needs write access to the node home, which the next step closes again:
Reset only before the node has signed blocks as a validator: unsafe-reset-all also resets the validator signing state (data/priv_validator_state.json). On a validator that has already signed, that can make it sign the same height twice, and a double sign is slashed 5% and permanently jails (tombstones) the validator. Skip this section to replay from genesis instead.

Set ownership

After editing, restore the ownership and modes that deploy.sh sets on the node home:

Run the node as a service

Create /etc/systemd/system/ctmd.service with the unit that deploy.sh generates. LD_LIBRARY_PATH points at the bundled libraries of the active install, and TMPDIR points at the node-owned temp directory that state sync writes to.
Linux service unit explains the fields that matter to an operator. Enable and start the service, then follow the logs:
Wait until the node reports catching_up as false:
If you configured state sync, turn it off once the node has caught up, as deploy.sh does: stop the service, set enable = false under [statesync] in config.toml, and start the service again.

Create validator

Generate an operator key. eth_secp256k1 is the default account key algorithm for ctmd.
Get the node consensus public key from the validator home:
On a host set up with the manual mainnet install, run it as the ctmd user against /var/lib/ctmd:
Create validator.json. The pubkey must be the /cosmos.crypto.ed25519.PubKey output from ctmd comet show-validator.
Submit the transaction:
<fee> must be at least the gas limit multiplied by the chain’s minimum gas price, currently 222000000000ctm (222 gwei) per unit of gas, or by the current base fee if it is higher (ctmd query feemarket base-fee). To have ctmd compute the fee, pass that per-gas price with --gas-prices, for example --gas-prices 222000000000ctm, instead of --fees. See Gas on c8ntinuum for the fee market parameters. c8ntinuum enforces a validator creation floor of 888,888 CTM (888888000000000000000000ctm, 888888 * 10^18) for both the initial self-delegation amount and min-self-delegation. The six genesis validators use this minimum self-delegation and have between 999000000000000000000000ctm and 999912000000000000000000ctm self-bonded. For the module-level policy details and EVM staking precompile coverage, see Minimum Self-Delegation Check.

Commission bounds

The six genesis validators use: General staking validation still applies: commission values cannot be negative, rate <= max-rate, max-rate <= 1, max-change-rate <= max-rate, and commission can be changed (raised or lowered) at most once per 24 hours, with each increase capped at max-change-rate.

Keys and Ledger

  • Account/operator keys default to eth_secp256k1.
  • Supported account algorithms are eth_secp256k1 and secp256k1.
  • Consensus validator keys are CometBFT ed25519 keys exposed through ctmd comet show-validator.
  • The default coin type for ctmd is 60, with default path m/44'/60'/0'/0/0.
  • Ledger coin type 60 uses the Ethereum app and creates an eth_secp256k1 public key.
  • Ledger coin type 118 uses the Cosmos app and creates a Cosmos secp256k1 public key.
  • ctmd keys add --ledger rejects a custom --hd-path; use --coin-type, --account, and --index.

KMS and sentry architecture

c8ntinuum does not require a specific KMS or sentry topology; use these as operational recommendations.
  • Lowest-complexity signing uses the local CometBFT file signer under ~/.ctmd/config/priv_validator_key.json, but this has the largest key-exposure risk.
  • Remote signing can be implemented with TMKMS or Horcrux-compatible CometBFT remote signer setups.
  • For threshold signing or high availability, prefer Horcrux-style threshold signing over running duplicate live validator keys.
  • Never run the same validator consensus key in two active signers at once.
  • Keep the validator node private and connect it only to sentry nodes.
  • Public sentries should expose P2P and any intended public RPC surfaces; the validator should use sentries as persistent peers.
  • Recommended validator-side settings include pex = false, no public RPC, and firewall access limited to sentries and the signer.
  • Recommended sentry-side settings include pex = true, persistent_peers including the validator, and private_peer_ids including the validator node ID.

Ports and services

gRPC is enabled by default on localhost:9090. The REST API, JSON-RPC, and telemetry are disabled by default unless explicitly enabled in config or via start flags.

Monitoring

Monitor at least:
  • Process health and automatic restart behavior for ctmd.
  • Sync status from ctmd status; alert if catching_up is true on a validator.
  • Peer count and sentry connectivity from CometBFT RPC.
  • Block height progress, block time, disk usage, memory, file descriptors, and database growth.
  • Validator signing info from ctmd query slashing signing-info $(ctmd comet show-address).
  • Missed blocks well before the downtime threshold; alert before 4444 missed blocks in the 8888 block window.
  • JSON-RPC, gRPC, API, and indexer latency only on nodes intentionally serving those surfaces.
Validator incentive state is tracked by x/valrewards, including epoch reward settings, reward-pool funding, outstanding reward queries, and one-time validator reward claims. See Validator Rewards for CLI and precompile details.

Slashing, jailing, and unjail

Mainnet (c8ntinuum_8-1) slashing params, from ctmd query slashing params: A validator is jailed for downtime when it misses more than half of the 8888 block signing window after the slashing warm-up period. Downtime burns 1% and jails for 600s. Double-signing burns 5%, jails, and tombstones the validator; tombstoned validators cannot be unjailed. Unjail only after fixing the signer/node issue, waiting until jailed_until has passed, and confirming self-delegation is at least 888888000000000000000000ctm.

Upgrade flow and emergency contacts

Use Upgrade Instructions as the canonical upgrade runbook. Validators should layer signing-key safety, sentry topology, TMKMS, and double-sign protection checks on top of each release-specific upgrade notice.