This page covers deployment of a non-validator c8ntinuum ctmd node with the deploy.sh lifecycle script. For hosted deployment scripts and peer-list resources, see Deployment Scripts. Validator nodes need dedicated signing-key, TMKMS, sentry, and double-sign protection procedures.

Network defaults

Use this table as an operator quick reference. For the canonical network records, see Network Information - Mainnet and Network Information - Testnet.
ItemMainnetTestnet
Cosmos chain IDcontinuum_2184-1continuum_2185-1
EVM chain ID21842185
Native currencyCTMtCTM
Public EVM RPChttps://public-evm-rpc.c8ntinuum.comhttps://public-testnet-evm.c8ntinuum.link
Public CometBFT RPChttps://public-comet-rpc.c8ntinuum.comhttps://public-testnet-comet.c8ntinuum.link
Genesis URLhttps://resources.c8ntinuum.io/mainnet/genesis.jsonhttps://resources.c8ntinuum.io/testnet/genesis.json
Genesis SHA-256939cd10fe450f6826894f0d76e82ed5e90845d5f60aaae92f577cf50b83bb474f8b98ca1e364026eae17ff15ac133ac8c15fa6864a7e675e77642e8172f7943b
Peers URLhttps://resources.c8ntinuum.io/peers.jsonSame schema, selected by chain ID

Operating model

OSNode homeProcess model
Linux/var/lib/ctmdsystemd, via ctmd.service
macOS$HOME/.ctmddeploy.sh start background process with PID/log files
On Linux, deploy.sh install creates a ctmd service user/group, installs a hardened ctmd.service, enables the service, and leaves it stopped until you run deploy.sh state-sync or deploy.sh start. On macOS, it installs the binary and bootstraps the user-managed $HOME/.ctmd home without installing a service. Use the node profile that matches the workload. A normal application node should prioritize fast bootstrap, protected RPC surfaces, and bounded historical reads. An exchange, custodian, or indexer that must rebuild history from first principles should run archive infrastructure or consume a dedicated indexer.
WorkloadRecommended node shapeData modeNotes
Wallets and applicationsFull node behind a private RPC gatewayState sync bootstrap, default pruningBest for current blocks, balances, receipts, and recent logs.
Exchange depositsFull node plus indexed log pipelineState sync bootstrap plus durable scanner databaseUse bounded RPC scans and idempotent crediting. Add archive/indexer access for long backfills.
Complete historical replayArchive nodeReplay from genesis, pruning = "nothing"State sync does not provide pre-snapshot history.
Debug tracingArchive node with private debug RPCReplay from genesis, EVM indexer enabledKeep debug, txpool, and personal off public endpoints.
Recommended baseline:
  • Install Linux production nodes with deploy.sh install --moniker <your-node-moniker> and manage them with deploy.sh start, deploy.sh stop, and systemd.
  • Bootstrap new non-archive nodes with State Sync; replay archive nodes from genesis.
  • Keep RPC, REST, gRPC, WebSocket, and metrics endpoints on localhost or private interfaces unless a reverse proxy enforces TLS, authentication, rate limits, request size limits, and IP allowlists.
  • Use the default public EVM namespace shape eth,net,web3 for externally exposed RPC. Enable txpool or debug only on private archive or operations nodes.
  • For archive nodes, follow Archive Data Setup: set pruning = "nothing", keep ABCI responses, enable the transaction index, and enable the EVM indexer.
  • Monitor local height, catching-up state, peer count, process restarts, disk growth, RPC latency, HTTP 429 rates, and WebSocket reconnect storms.

Deploy script

To install or update ctmd, run the deploy.sh script. You can download and run the script manually:
curl -fsSL https://resources.c8ntinuum.io/deploy.sh -o deploy.sh
chmod +x deploy.sh
sudo ./deploy.sh install --moniker <your-node-moniker>
This download-first flow is the preferred operator path because it gives you a local script to inspect, rerun, and use for lifecycle commands.

Install from release

Recommended Linux install:
sudo ./deploy.sh install --moniker <your-node-moniker>
Recommended macOS install:
./deploy.sh install --moniker <your-node-moniker>
deploy.sh install reads metadata.json, resolves .ctmd.latest_version, selects the current artifact and SHA-256 URL for the host platform, downloads the tarball, verifies SHA-256, and installs the ctmd binary with bundled shared libraries. It then initializes the node home, downloads genesis, repairs chain ID settings, and patches seeds and persistent peers from https://resources.c8ntinuum.io/peers.json. For mainnet, the downloaded and local genesis.json files are verified against metadata.json field mainnet_genesis_sha256. If you pass a non-default --chain-id, the script skips the mainnet SHA-256 check. The installer creates these managed paths:
PathPurpose
/opt/ctmd-<version>/bin/ctmdVersioned binary
/opt/ctmd-<version>/lib/Bundled shared libraries
/opt/ctmdSymlink to the active version
/usr/local/bin/ctmdSymlink to the active binary
/etc/systemd/system/ctmd.serviceLinux systemd unit
/var/lib/ctmd/Linux node home
/var/cache/ctmd/Linux release download cache
$HOME/.ctmd/releases/ctmd-<version>/macOS versioned install
$HOME/.ctmd/currentmacOS symlink to the active version
$HOME/.ctmd/bin/ctmdmacOS CLI symlink
$HOME/.ctmd/cache/downloads/macOS release download cache

Build from source

If you are building locally instead of using a release, follow Build the Node, then verify the binary:
ctmd version
ctmd version --long | grep -i pebble

Start sync

State sync is recommended for new nodes because it avoids replaying from genesis:
sudo ./deploy.sh state-sync
On macOS:
./deploy.sh state-sync
To replay from genesis instead:
sudo ./deploy.sh start
sudo journalctl -u ctmd.service -f
On macOS:
./deploy.sh start
tail -f "$HOME/.ctmd/node.log"

Ports

PortServiceExposure
26656/tcpP2PPublic or peer-restricted
26657/tcpCometBFT RPCLocalhost or reverse proxy only
1317/tcpCosmos REST/LCDLocalhost or reverse proxy only
9090/tcpgRPCLocalhost or reverse proxy only
8545/tcpEVM JSON-RPC HTTPLocalhost or reverse proxy only
8546/tcpEVM JSON-RPC WebSocketLocalhost or reverse proxy only
26660/tcpCometBFT Prometheus metricsFirewall-restricted
6065/tcpEVM JSON-RPC metricsFirewall-restricted
Do not expose RPC, REST, gRPC, or EVM JSON-RPC directly to the public internet without a reverse proxy, firewall, and rate limiting.

Health checks

Check local status:
curl -s http://127.0.0.1:26657/status | jq
Check install and sync status:
./deploy.sh status
status reports the active install, binary version, node home, service state when present, latest height, catching-up state, and peer count.

Monitoring

Enable CometBFT metrics in config.toml:
[instrumentation]
prometheus = true
prometheus_listen_addr = "127.0.0.1:26660"
namespace = "ctm"
Optional EVM JSON-RPC metrics require --metrics on startup and this app config:
[json-rpc]
metrics-address = "127.0.0.1:6065"
Scrape http://127.0.0.1:26660/metrics for CometBFT metrics and http://127.0.0.1:6065/debug/metrics/prometheus for EVM JSON-RPC metrics. Run node_exporter alongside ctmd for disk, CPU, memory, and network metrics.

Common recovery

Use the managed lifecycle commands for normal start, stop, and inspection:
sudo ./deploy.sh stop
sudo ./deploy.sh start
./deploy.sh status
For a clean reinstall, use the destructive reset command:
sudo ./deploy.sh reset
reset deletes the managed install, node home, service, cache, and Linux system user/group so a later install --moniker <name> can start from scratch. Do not run it unless you intend to delete local chain data and key material in the managed node home. On macOS:
./deploy.sh reset