This page documents the canonical local single-node workflow for c8ntinuum developers.

Canonical script

local_node.sh is at the root of the ctmd node source repository and is the canonical local-node script. The node source will be published in a public GitHub repository (repository TBA); the commands on this page run from the root of that repository:
There is no separate local-node repository for the default developer flow. For hosted deployment scripts and source attribution, see Deployment Scripts.

Prerequisites

  • Go matching go.mod
  • make
  • jq
  • A working C toolchain for CGO builds
  • Rust/SP1 build dependencies required by make install
local_node.sh installs ctmd by default with make install. The install directory is BINDIR if set, otherwise $GOPATH/bin when GOPATH is set, otherwise $HOME/go/bin. The script then runs whichever ctmd comes first on your PATH.

Install and start

Start from a clean local genesis and install the binary:
Use an existing installed binary without rebuilding:
Install into a custom binary directory and run that binary. Put the directory first on PATH, because the script runs the first ctmd it finds there:
Start the existing local node state without overwriting ~/.ctmd:
The script writes local chain data under:

Reset

The normal reset command is:
That removes the existing $HOME/.ctmd directory and creates a fresh local genesis. The manual equivalent is:
Stop the node with Ctrl-C.

Useful flags

--additional-users accepts only non-negative integers. Generated extra-user mnemonics are written to $HOME/.ctmd/mnemonics.yaml unless --mnemonic-file is provided.

Chain configuration

The local chain uses Cosmos chain ID c8ntinuum_8888888-1 and EVM chain ID 8888888, distinct from mainnet (c8ntinuum_8-1, EVM 8) and testnet (c8ntinuum_8888-1, EVM 8888). The script sets the EVM chain ID explicitly: a node started without it uses ctmd’s default of 8, the mainnet ID, and EVM transactions signed on it are valid on mainnet. Never use a key that holds real funds on a local chain.
For EVM tooling and wallets, use chain ID 8888888 (0x87a238) and confirm it with eth_chainId after startup.

Ports

The script enables the local app APIs and uses the default ctmd local addresses.

Default accounts

These accounts are deterministic local development accounts. They are public test keys and must never be used with real funds. Each default dev account receives:
That is 1,000 TEST: the local denom is atest, with 18 decimals. The default validator key is mykey. The validator account is funded with 100000000000000000000000000atest during genesis, and its genesis transaction self-delegates 888888000000000000000000atest with --min-self-delegation 888888000000000000000000. That is 888,888 TEST, the self-delegation floor that x/msdcheck enforces.

Active precompiles and local native wrapper

local_node.sh activates this static precompile set in genesis: The script also configures the native ERC-20 precompile/token pair for the local denom: A fresh local genesis also includes the default preinstall set described in Pre-deployed Contracts: ctmd init writes it into the EVM genesis state, and the script does not remove it.

Docker support

The canonical local development path is ./local_node.sh. Docker assets exist, but they are separate from the single-node script flow:
  • contrib/images/ctmd-env/Dockerfile builds a ctmd environment image.
  • docker-compose.yml defines a four-node cosmos/ctmd localnet (ctmdnode0 to ctmdnode3).
  • tests/jsonrpc/Dockerfile and tests/jsonrpc/docker-compose.yml support the JSON-RPC test infrastructure.
Use Docker for workflows that explicitly reference those files. For day-to-day local development against the node source, prefer ./local_node.sh.

Expected logs

On a fresh reset, expect logs like:
During shutdown with Ctrl-C, expect: