Skip to content

Quick Start (Docker)

Get the Optimum Gateway running with Docker.

Prerequisites: Requirements and Network Requirements.

Hardware Requirements

Minimum: 2+ vCPUs, 512MB RAM, 500MB+ disk
Recommended: 4+ vCPUs

Installation

sh
docker pull getoptimum/gateway:v0.0.1-rc12

Configuration

Create config/app_conf.yml:

yaml
log_level: debug
gateway_cluster_id: optimum_hoodi_v0_3
gateway_id: "your_unique_gateway_id"
partner_id: "your_partner_id"

sidecar_listen_port: 33211
agent_lib_p2p_port: 33212
agent_opt_p2p_port: 43213
identity_libp2p_dir: /tmp/libp2p
identity_optp2p_dir: /tmp/optp2p
telemetry_enable: true
telemetry_port: 48123
enable_aggregation: true

# Remote push observability (credentials shared separately by the team)
remote_push_enable: true
remote_push_client_id: "<shared by team>"
remote_push_client_secret: "<shared by team>"

eth_topics_subscribe:
  - beacon_block
  - beacon_attestation_0
  - beacon_attestation_1
  - beacon_attestation_2
  - beacon_attestation_3
  - beacon_attestation_4
  - beacon_attestation_5
  - beacon_attestation_6
  - beacon_attestation_7
  - beacon_attestation_8
  - beacon_attestation_9
  - beacon_attestation_10
  - beacon_attestation_11
  - beacon_attestation_12
  - beacon_attestation_13
  - beacon_attestation_14
  - beacon_attestation_15
  - beacon_attestation_16
  - beacon_attestation_17
  - beacon_attestation_18
  - beacon_attestation_19
  - beacon_attestation_20
  - beacon_attestation_21
  - beacon_attestation_22
  - beacon_attestation_23
  - beacon_attestation_24
  - beacon_attestation_25
  - beacon_attestation_26
  - beacon_attestation_27
  - beacon_attestation_28
  - beacon_attestation_29
  - beacon_attestation_30
  - beacon_attestation_31
  - beacon_attestation_32
  - beacon_attestation_33
  - beacon_attestation_34
  - beacon_attestation_35
  - beacon_attestation_36
  - beacon_attestation_37
  - beacon_attestation_38
  - beacon_attestation_39
  - beacon_attestation_40
  - beacon_attestation_41
  - beacon_attestation_42
  - beacon_attestation_43
  - beacon_attestation_44
  - beacon_attestation_45
  - beacon_attestation_46
  - beacon_attestation_47
  - beacon_attestation_48
  - beacon_attestation_49
  - beacon_attestation_50
  - beacon_attestation_51
  - beacon_attestation_52
  - beacon_attestation_53
  - beacon_attestation_54
  - beacon_attestation_55
  - beacon_attestation_56
  - beacon_attestation_57
  - beacon_attestation_58
  - beacon_attestation_59
  - beacon_attestation_60
  - beacon_attestation_61
  - beacon_attestation_62
  - beacon_attestation_63

Gateway ID format: yourorg-region-hoodi-xx (e.g. optimum-eu-hoodi-01)

Run

sh
mkdir -p config data/libp2p data/mump2p

docker run --name optimum-gateway --rm \
  -p 33211:33211/tcp \
  -p 33212:33212/tcp \
  -p 48123:48123/tcp \
  -v $(pwd)/config:/app/config \
  -v $(pwd)/data/libp2p:/tmp/libp2p \
  -v $(pwd)/data/mump2p:/tmp/optp2p \
  getoptimum/gateway:v0.0.1-rc12 \
  -config=/app/config/app_conf.yml

Verify

Health check:

sh
curl http://localhost:48123/health
json
{
  "status": "healthy",
  "gateway_id": "optimum-dev-hoodi-kubernetes-validator-lighthouse",
  "version": "v0.0.1-rc12",
  "commit_hash": "a0b2bc1",
  "uptime_seconds": 1639,
  "checks": {
    "cl_peers": {"status": "ok", "value": 1},
    "last_block_age_sec": {"status": "ok", "value": 1},
    "mump2p_peers": {"status": "ok", "value": 13},
    "subscribed_topics": {"status": "ok", "value": 65}
  }
}

Metrics with your gateway_id:

sh
curl http://localhost:48123/metrics | grep gateway_id
text
optp2p_gateway_optimum_gateway_app_build_info{commit="a0b2bc1",gateway_id="your-gateway-id",...} 1
optp2p_gateway_optimum_gateway_mump2p_peers{gateway_id="your-gateway-id"} 13
...

Startup logs (fork digest, topics):

sh
docker logs optimum-gateway
text
{"msg":"initialized fork digest from chain default","fork_digest":"c6ecb76c","chain":"hoodi"}
{"msg":"fork digest updated from bootstrap","fork_digest":"c6ecb76c"}
{"msg":"subscribed to topic","topic":"/eth2/c6ecb76c/beacon_block/ssz_snappy"}
{"msg":"subscribed to topic","topic":"/eth2/c6ecb76c/beacon_attestation_0/ssz_snappy"}
...

Note: "Failed to connect to bootstrap" during startup is normal. See Troubleshooting.

Connect CL Client

Get gateway peer info:

sh
curl -s http://localhost:48123/api/v1/self_info

Use libp2p.multiaddrs[0] (or another reachable multiaddr) for IP and peer_id for peer ID.

Prysm

sh
./beacon-chain \
  --peer=/ip4/YOUR_GATEWAY_IP/tcp/33212/p2p/YOUR_GATEWAY_PEER_ID \
  ...

Teku

sh
teku \
  --p2p-direct-peers=/ip4/YOUR_GATEWAY_IP/tcp/33212/p2p/YOUR_GATEWAY_PEER_ID \
  --p2p-static-peers=/ip4/YOUR_GATEWAY_IP/tcp/33212/p2p/YOUR_GATEWAY_PEER_ID \
  ...

Use --p2p-direct-peers (not just --p2p-static-peers) — static peers can be pruned. See Troubleshooting – Teku PeerDAS for details.

Lighthouse

Add your Lighthouse node as a direct peer in the gateway config so the gateway auto-reconnects after restarts:

yaml
direct_cl_peers:
  - /ip4/YOUR_LIGHTHOUSE_IP/tcp/9000/p2p/YOUR_LIGHTHOUSE_PEER_ID

See Troubleshooting – Lighthouse v8.x for additional required flags.

Nimbus

Point Nimbus at the gateway (multiaddr or ENR; multiaddr is typical):

sh
nimbus_beacon_node \
  --direct-peer=/ip4/YOUR_GATEWAY_IP/tcp/33212/p2p/YOUR_GATEWAY_PEER_ID \
  --netkey-file=/data/netkey \
  ...

Add your Nimbus node in the gateway config so the gateway reconnects after restarts:

yaml
direct_cl_peers:
  - /ip4/YOUR_NIMBUS_IP/tcp/YOUR_NIMBUS_P2P_PORT/p2p/YOUR_NIMBUS_PEER_ID

Use a stable --netkey-file (not random) — Nimbus requires it for privileged direct peers. See Troubleshooting – Nimbus for verification and common issues.

Next Steps