Prerequisites
What every host (validator, RPC / full node, seed) needs before you run bootstrap.sh or install the Helm chart. These apply to the public testnet (chain-id 473374); mainnet (47337) is identical.
For the per-role CPU / RAM / disk sizing and the cost / cheapest-baremetal guidance, see Hardware specs. This page is the software + host setup checklist.
Checklist
- Docker Engine + Compose v2. Verify with
docker --versionanddocker compose version— the space-separated v2 plugin, not the legacydocker-compose. The compose file uses the v2 schema (no top-levelversion:key). - NVMe mounted at
DATA_DIR. Format and mount the NVMe volume at the path you set asDATA_DIR(default/var/lib/krypton/data). Confirm withlsblk/df -hthat it is the fast device, not the root EBS/disk. - Time sync (NTP). CometBFT consensus is time-sensitive; clock skew causes missed proposals and peer rejection. Enable
chronyorsystemd-timesyncdand verify withtimedatectl(System clock synchronized: yes). - Firewall. Install the host firewall before exposing the node — nftables on baremetal or an AWS Security Group. See Ports & firewall.
- Non-root UID. Containers run as
KRYPTON_UID:KRYPTON_GID(default10000:10000), never root.bootstrap.shchownsDATA_DIRto it. Do not run the stack as root. - Tools:
jq(bootstrap uses it to assert the bundle chain-id),openssl(JWT generation), andgit/curl.cast(Foundry) is handy for verification.
NVMe is REQUIRED for the execution layer
bera-reth stores state in an MDBX database with heavy random-write / fsync patterns. On slow or wear-prone storage (SD cards, network EBS below gp3, spinning disk) MDBX corrupts or wears out the volume and the EL falls behind or dies. Use local NVMe on baremetal; on AWS use gp3 (or io2 for RPC/archive) — never standard / sc1 / st1. The DATA_DIR mount must be the NVMe volume.
What else you'll need
Beyond the host setup, joining a network requires:
- The network bundle —
eth-genesis.json+spec.toml+kzg-trusted-setup.json(aBUNDLE_URLor localBUNDLE_DIR). See Genesis & the network bundle. - Peer strings —
EL_BOOTNODES(enode) andCL_SEEDS(CometBFT node-id), from the bundle / launch coordinator. - A reachable public IP — set as
EXT_IP. A wrong value means no inbound peers. - Validators only: your
priv_validator_key.jsonfrom the genesis ceremony, placed atDATA_DIR/cl/config/priv_validator_key.jsonbefore running bootstrap.
Container path only
The supported install runs the clients as containers (Compose or Kubernetes / Helm). A non-Docker (raw systemd binaries) install is not provided.
Next: Quick start (spin up a node).