Skip to content

feat(local_testnet): archive-exporter node for the aetheria (boole) Step 12 consensus check - #47

Merged
iurii-ssv merged 2 commits into
mainfrom
feat/boole-archive-exporter
Aug 13, 2026
Merged

feat(local_testnet): archive-exporter node for the aetheria (boole) Step 12 consensus check#47
iurii-ssv merged 2 commits into
mainfrom
feat/boole-archive-exporter

Conversation

@iurii-ssv

Copy link
Copy Markdown
Contributor

Adds an optional archive-exporter node so the aetheria (boole) fork-transition suite's Step 12 can verify the post-Boole per-committee AggregatorCommitteeRunner reaches QBFT consensus.

Why

Step 12 reads committee duty traces at /v1/exporter/traces/committee — a route the ssv node registers only in archive exporter mode (EXPORTER_MODE=archivefullExporter). No devnet node ran in that mode, so the endpoint 404'd and Step 12 stayed INCONCLUSIVE (self-diagnosing). This runs one.

What

  • main.star — instantiate one ssv-exporter node, gated by nodes.exporter.count. Read-only: an empty operator key (it doesn't sign; its p2p network key auto-generates like every node's), auto-subscribes to all subnets.
  • nodes/ssv/node.star — set EXPORTER=true + EXPORTER_MODE=archive on the exporter service (archive is what registers the traces routes).
  • params-boole.yamlnodes.exporter.count: 1 (boole-only; Step 12 is boole-specific).

Validation

local_testnet_boole run: ssv-exporter comes up in archive mode and aetheria's Step 12 goes PASS — 47 AGGREGATOR_COMMITTEE decided quorums, 0 undecided; Steps 1-11 unchanged.

Pairs with ssvlabs/aetheria#169, which repoints Config.Exporter at ssv-exporter on boole (with a fallback to ssv-node-0 so the two repos can merge in any order).

…tep 12 consensus check

Adds an optional "ssv-exporter" node (nodes.exporter.count, enabled in params-boole) running in
archive exporter mode (EXPORTER_MODE=archive) — the mode that registers /v1/exporter/traces/*. It
records committee duty traces so the aetheria (boole) suite's Step 12 can verify the post-fork
AGGREGATOR_COMMITTEE runner reaches QBFT consensus. Read-only: empty operator key (it doesn't sign;
its p2p network key auto-generates), auto-subscribes to all subnets. Boole-only.
…V config

Rework the archive-exporter node (aetheria boole Step 12 consensus check)
per review feedback:

- nodes.exporter.count -> nodes.exporter.enabled. The `ssv-exporter`
  hostname is a cross-repo contract (aetheria pins it), so the node is
  singular by design; a boolean matches the monitor.enabled convention
  instead of a count that can only ever be 0 or 1.

- Configure the exporter through the rendered SSV config (exporter.Enabled
  / exporter.Mode) instead of EXPORTER / EXPORTER_MODE env vars. The flat
  `Exporter:` template field mapped to no struct field and was inert (the
  real key is `exporter:`), which is why the env vars were needed. The
  config file is now the single source of truth, consistent with every
  other SSV setting, and resolves identically (ApplyDefaults -> yaml -> env).

- Drop the now-unused is_exporter param from get_service_config and the
  dead ssv_node.start() helper.

- Rename monitor's misleading ssv_exporter_url param: it receives the first
  SSV node's API URL, not the exporter.
@iurii-ssv
iurii-ssv merged commit 97fca56 into main Aug 13, 2026
@iurii-ssv
iurii-ssv deleted the feat/boole-archive-exporter branch August 13, 2026 11:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants