Operators

Public seed so miners can connect

One machine on the open internet listens on TCP 30333, publishes a bootnode multiaddr, and the rest of the network dials it. Same --chain for everyone.

Mainnet: --chain kohl · Testnet: kohl-ash · full runbook

1. Start the seed

shell
cargo build -p kohl-node --release
# For serious mining on this host: --features randomx

./scripts/setup-seed.sh

PUBLIC_ADDR=/ip4/YOUR.PUBLIC.IP/tcp/30333 \
MINING_SEED=<64-hex> \
  ./scripts/run-seed.sh

# Firewall
sudo ufw allow 30333/tcp
  • Listen on 0.0.0.0:30333; advertise a routable PUBLIC_ADDR.
  • Keep JSON-RPC on localhost — miners need P2P, not your RPC.
  • Fair launch: first mainnet miners define the live history.

2. Publish the bootnode string

shell
./target/release/kohl key inspect-node-key --file ./data/seed/node-key
# → 12D3KooW…

# Multiaddr to publish:
# /ip4/YOUR.PUBLIC.IP/tcp/30333/p2p/12D3KooW…

3. Miner joins

shell
BOOTNODE=/ip4/YOUR.PUBLIC.IP/tcp/30333/p2p/12D3KooW... \
MINING_SEED=<64-hex> \
  ./scripts/run-miner.sh

Same chain as the seed (kohl or a shared chainspecs/kohl.json). On the seed, system_peers should become non-empty.

4. Optional chainspec with bootnodes

shell
./scripts/make-chainspec.sh --chain kohl \
  --bootnode /ip4/YOUR.PUBLIC.IP/tcp/30333/p2p/12D3KooW... \
  --output chainspecs/kohl.json

# Miners:
./target/release/kohl --chain ./chainspecs/kohl.json \
  --validator --mining-seed <64-hex>

5. systemd (production)

Units live in the repo under scripts/systemd/ (kohl-seed.service, kohl-miner.service + env examples).

shell
sudo cp scripts/systemd/kohl-seed.service /etc/systemd/system/
sudo cp scripts/systemd/kohl-seed.env.example /etc/kohl/seed.env
# edit PUBLIC_ADDR + MINING_SEED, chmod 600
sudo systemctl enable --now kohl-seed
journalctl -u kohl-seed -f

More