treefmt-check
x86_64-linux.treefmt
· build #78
· raw
1treefmt v2.5.0traversed 71 files2emitted 69 files for processing3formatted 69 files (3 changed) in 496ms4 M DEFAULT_CONFIGS.md5 M clanServices/dvt/roles/ecl/lodestar.nix6 M clanServices/dvt/roles/ecl/nimbus.nix7diff --git a/DEFAULT_CONFIGS.md b/DEFAULT_CONFIGS.md8index e995885..522b7d5 1006449--- a/DEFAULT_CONFIGS.md10+++ b/DEFAULT_CONFIGS.md11@@ -12,35 +12,35 @@ reference for client configuration in research and testing environments.12 13 ### Universal settings14 15-| Setting | Value |16-|---------|-------|17-| Systemd stop timeout | 300 s |18-| EL P2P port | 30303 |19-| EL HTTP-RPC port | 8545 (localhost only) |20-| EL Engine API port | 8551 (localhost only) |21-| CL P2P port | 9000 |22-| Checkpoint sync URL | `https://beaconstate.ethstaker.cc` |23-| IPv6 | disabled |24-| MEV-Boost | disabled |25+| Setting | Value |26+| -------------------- | ---------------------------------- |27+| Systemd stop timeout | 300 s |28+| EL P2P port | 30303 |29+| EL HTTP-RPC port | 8545 (localhost only) |30+| EL Engine API port | 8551 (localhost only) |31+| CL P2P port | 9000 |32+| Checkpoint sync URL | `https://beaconstate.ethstaker.cc` |33+| IPv6 | disabled |34+| MEV-Boost | disabled |35 36 ### EL metrics ports37 38-| Client | Port |39-|--------|------|40-| Geth | 6060 |41-| Reth | 6060 |42-| Erigon | 6060 |43-| Besu | 9545 |44+| Client | Port |45+| ---------- | ---- |46+| Geth | 6060 |47+| Reth | 6060 |48+| Erigon | 6060 |49+| Besu | 9545 |50 | Nethermind | 6060 |51 52 ### CL REST and metrics ports53 54-| Client | REST port | Metrics port | P2P ports |55-|--------|-----------|-------------|-----------|56-| Nimbus | 5051 | 8008 | 9000 TCP+UDP |57-| Prysm | 3500 | 8080 | 13000 TCP / 12000 UDP |58-| Teku | 5051 | 8008 | 9000 TCP+UDP |59-| Lodestar | 9596 | 8008 | 9000 TCP+UDP |60+| Client | REST port | Metrics port | P2P ports |61+| -------- | --------- | ------------ | --------------------- |62+| Nimbus | 5051 | 8008 | 9000 TCP+UDP |63+| Prysm | 3500 | 8080 | 13000 TCP / 12000 UDP |64+| Teku | 5051 | 8008 | 9000 TCP+UDP |65+| Lodestar | 9596 | 8008 | 9000 TCP+UDP |66 67 ### Notable client-specific defaults68 69@@ -56,66 +56,66 @@ reference for client configuration in research and testing environments.70 71 ### Role-level options (`clanServices/dvt/roles/ecl.nix`)72 73-| Option | Default | Notes |74-|--------|---------|-------|75-| `executor.p2p.host` | `0.0.0.0` | all interfaces |76-| `executor.p2p.port` | 30303 | |77-| `executor.p2p.maxPeers` | 50 | ethpandaops leaves this at client default |78-| `executor.p2p.nat` | null | set to `extip:<IP>` for public nodes |79-| `beacon.p2p.host` | `0.0.0.0` | all interfaces |80-| `beacon.p2p.port` | 9000 | |81-| `beacon.p2p.maxPeers` | null | use client default |82-| `beacon.p2p.nat` | null | set to `extip:<IP>` for public nodes |83-| `beacon.rest.host` | `127.0.0.1` | overridden to `::` in DVT role for WireGuard access |84-| `beacon.rest.port` | 5052 | per-client default used in DVT role |85-| `beacon.checkpointSyncUrl` | null | no sane default set yet |86+| Option | Default | Notes |87+| -------------------------- | ----------- | --------------------------------------------------- |88+| `executor.p2p.host` | `0.0.0.0` | all interfaces |89+| `executor.p2p.port` | 30303 | |90+| `executor.p2p.maxPeers` | 50 | ethpandaops leaves this at client default |91+| `executor.p2p.nat` | null | set to `extip:<IP>` for public nodes |92+| `beacon.p2p.host` | `0.0.0.0` | all interfaces |93+| `beacon.p2p.port` | 9000 | |94+| `beacon.p2p.maxPeers` | null | use client default |95+| `beacon.p2p.nat` | null | set to `extip:<IP>` for public nodes |96+| `beacon.rest.host` | `127.0.0.1` | overridden to `::` in DVT role for WireGuard access |97+| `beacon.rest.port` | 5052 | per-client default used in DVT role |98+| `beacon.checkpointSyncUrl` | null | no sane default set yet |99 100 ### EL metrics ports101 102-| Client | Our port | Ethpandaops | Match? |103-|--------|----------|-------------|--------|104-| Geth | 6060 | 6060 | ✓ |105-| Reth | 9001 | 6060 | ✗ — inherits ethereum-nix upstream default |106-| Erigon | 6060 | 6060 | ✓ |107-| Besu | 9545 | 9545 | ✓ |108-| Nethermind | 9091 | 6060 | ✗ — hardcoded in our role |109+| Client | Our port | Ethpandaops | Match? |110+| ---------- | -------- | ----------- | ------------------------------------------ |111+| Geth | 6060 | 6060 | ✓ |112+| Reth | 9001 | 6060 | ✗ — inherits ethereum-nix upstream default |113+| Erigon | 6060 | 6060 | ✓ |114+| Besu | 9545 | 9545 | ✓ |115+| Nethermind | 9091 | 6060 | ✗ — hardcoded in our role |116 117 ### CL REST ports118 119-| Client | Our port | Ethpandaops | Notes |120-|--------|----------|-------------|-------|121-| Nimbus | 5052 | 5051 | intentional — set via `beacon.rest.port`; both work |122-| Prysm | 3500 | 3500 | ✓ |123-| Teku | 5051 | 5051 | ✓ |124-| Lodestar | 9596 | 9596 | ✓ |125+| Client | Our port | Ethpandaops | Notes |126+| -------- | -------- | ----------- | --------------------------------------------------- |127+| Nimbus | 5052 | 5051 | intentional — set via `beacon.rest.port`; both work |128+| Prysm | 3500 | 3500 | ✓ |129+| Teku | 5051 | 5051 | ✓ |130+| Lodestar | 9596 | 9596 | ✓ |131 132 ### Hardcoded DVT-specific behaviours (intentional — not targets for change)133 134 These are baked in because DVT correctness requires them:135 136-| Behaviour | Reason |137-|-----------|--------|138-| `subscribe-all-subnets = true` on all CLs | DVT attestation aggregation requires nodes to aggregate all subnets |139-| Engine API at `http://127.0.0.1:8551` via JWT | EL/CL co-location on same machine; localhost keeps the JWT channel short |140-| CL REST bound to `::` (all interfaces) | Validators reach beacon nodes over WireGuard overlay; localhost-only would break this |141-| Metrics always enabled, scraped by Alloy → Mimir | Observability pipeline is part of the DVT cluster definition |142-| Node keys deterministic per machine | Stable enode/ENR addresses across restarts; needed for static peer config |143+| Behaviour | Reason |144+| ------------------------------------------------ | ------------------------------------------------------------------------------------- |145+| `subscribe-all-subnets = true` on all CLs | DVT attestation aggregation requires nodes to aggregate all subnets |146+| Engine API at `http://127.0.0.1:8551` via JWT | EL/CL co-location on same machine; localhost keeps the JWT channel short |147+| CL REST bound to `::` (all interfaces) | Validators reach beacon nodes over WireGuard overlay; localhost-only would break this |148+| Metrics always enabled, scraped by Alloy → Mimir | Observability pipeline is part of the DVT cluster definition |149+| Node keys deterministic per machine | Stable enode/ENR addresses across restarts; needed for static peer config |150 151 ---152 153 ## § 3 — Gaps and discrepancies154 155-| # | Area | Ethpandaops | Ours | Priority |156-|---|------|-------------|------|----------|157-| 1 | Reth metrics port | 6060 | 9001 | Low — upstream ethereum-nix issue |158-| 2 | Nethermind metrics port | 6060 | 9091 | Medium — hardcoded in our role |159-| 3 | Nimbus REST port default | 5051 | 5052 | Low — intentional; both work |160-| 4 | Checkpoint sync URL | `beaconstate.ethstaker.cc` | null | High — production usability |161-| 5 | Teku storage mode | PRUNE | not set (archive) | Medium — bounds disk on non-archival nodes |162-| 6 | Besu NAT method | NONE | extip: | Low |163-| 7 | Reth WebSocket RPC | enabled on 8546 | not exposed | Low |164-| 8 | EL maxPeers default | client default | 50 | Low |165-| 9 | Systemd stop timeout | 300 s | not set explicitly | Low |166+| # | Area | Ethpandaops | Ours | Priority |167+| --- | ------------------------ | -------------------------- | ------------------ | ------------------------------------------ |168+| 1 | Reth metrics port | 6060 | 9001 | Low — upstream ethereum-nix issue |169+| 2 | Nethermind metrics port | 6060 | 9091 | Medium — hardcoded in our role |170+| 3 | Nimbus REST port default | 5051 | 5052 | Low — intentional; both work |171+| 4 | Checkpoint sync URL | `beaconstate.ethstaker.cc` | null | High — production usability |172+| 5 | Teku storage mode | PRUNE | not set (archive) | Medium — bounds disk on non-archival nodes |173+| 6 | Besu NAT method | NONE | extip: | Low |174+| 7 | Reth WebSocket RPC | enabled on 8546 | not exposed | Low |175+| 8 | EL maxPeers default | client default | 50 | Low |176+| 9 | Systemd stop timeout | 300 s | not set explicitly | Low |177 178 ---179 180diff --git a/clanServices/dvt/roles/ecl/lodestar.nix b/clanServices/dvt/roles/ecl/lodestar.nix181index 381ebb4..d94e5b8 100644182--- a/clanServices/dvt/roles/ecl/lodestar.nix183+++ b/clanServices/dvt/roles/ecl/lodestar.nix184@@ -91,9 +91,10 @@ in185 })186 // (lib.optionalAttrs (settings.network != null) {187 checkpointSyncUrl =188- if settings.beacon.checkpointSyncUrl != null189- then settings.beacon.checkpointSyncUrl190- else "https://beaconstate.ethstaker.cc";191+ if settings.beacon.checkpointSyncUrl != null then192+ settings.beacon.checkpointSyncUrl193+ else194+ "https://beaconstate.ethstaker.cc";195 });196 };197 198diff --git a/clanServices/dvt/roles/ecl/nimbus.nix b/clanServices/dvt/roles/ecl/nimbus.nix199index 1775208..098b73f 100644200--- a/clanServices/dvt/roles/ecl/nimbus.nix201+++ b/clanServices/dvt/roles/ecl/nimbus.nix202@@ -55,9 +55,12 @@ in203 # `trustedNodeSync`. Default to the ethpandaops community sync endpoint for204 # known public networks; devnets (network = null) skip checkpoint sync.205 checkpointSyncUrl =206- if settings.beacon.checkpointSyncUrl != null then settings.beacon.checkpointSyncUrl207- else if settings.network != null then "https://beaconstate.ethstaker.cc"208- else null;209+ if settings.beacon.checkpointSyncUrl != null then210+ settings.beacon.checkpointSyncUrl211+ else if settings.network != null then212+ "https://beaconstate.ethstaker.cc"213+ else214+ null;215 216 settings = {217 # for custom / private chains the deployer overrides `network` with a