feat(local_testnet): archive-exporter node for the aetheria (boole) Step 12 consensus check - #47
Merged
Merged
Conversation
…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.
ovidiu-ssv-labs
previously approved these changes
Aug 12, 2026
…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.
ovidiu-ssv-labs
approved these changes
Aug 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds an optional archive-exporter node so the aetheria
(boole)fork-transition suite's Step 12 can verify the post-Boole per-committeeAggregatorCommitteeRunnerreaches 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=archive→fullExporter). 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 onessv-exporternode, gated bynodes.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— setEXPORTER=true+EXPORTER_MODE=archiveon the exporter service (archive is what registers the traces routes).params-boole.yaml—nodes.exporter.count: 1(boole-only; Step 12 is boole-specific).Validation
local_testnet_boolerun:ssv-exportercomes up in archive mode and aetheria's Step 12 goes PASS — 47AGGREGATOR_COMMITTEEdecided quorums, 0 undecided; Steps 1-11 unchanged.Pairs with ssvlabs/aetheria#169, which repoints
Config.Exporteratssv-exporteron boole (with a fallback tossv-node-0so the two repos can merge in any order).