Skip to content

Quick Start

Get up and running with Containment Chamber in minutes

Get signing in under 5 minutes. This guide walks you through creating a minimal configuration, loading keys, and connecting to a validator client.

This quick start uses stateless Web3Signer-compatible mode: no signer_state, filesystem-loaded keys, and direct compatibility with validator clients that already support Web3Signer.

Create a config.yaml with the minimal stateless settings needed to run:

server:
listen_address: "0.0.0.0"
listen_port: 9000
key_sources:
filesystem:
paths:
- ./keystores
anti_slashing:
backend: sqlite
path: ./slashing_protection.sqlite
static_auth:
policies:
- name: anonymous
rules:
# Allow signing and key discovery, but never voluntary exits.
- effect: allow
scopes: [sign, public_keys]
- effect: deny
operations: [VOLUNTARY_EXIT]
anonymous:
policies: [anonymous]

Create the keystores directory and add your validator keys:

Terminal window
mkdir -p ./keystores

Place your key files in this directory. Containment Chamber supports multiple formats:

  • Raw hex — plain private key files
  • EIP-2335 keystores — PBKDF2 or Scrypt encrypted JSON keystores

See Filesystem Keystores for the descriptor format, directory structure, and password-file convention.

Launch Containment Chamber with your config file:

Terminal window
containment-chamber server -c config.yaml

You should see startup logs indicating the server is listening on port 9000 and your keys have been loaded.

Check the health endpoint and list loaded keys:

Terminal window
# Health check
curl http://localhost:9000/upcheck
# Expected: 200 OK
# List loaded validator public keys
curl http://localhost:9000/api/v1/eth2/publicKeys
# Expected: JSON array of loaded keys

Point your validator client at the signer. Here’s an example with Lighthouse:

Terminal window
lighthouse vc \
--beacon-node http://localhost:5052 \
--validators-dir ./validators \
--web3-signer-url http://localhost:9000