Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions main.star
Original file line number Diff line number Diff line change
Expand Up @@ -192,14 +192,25 @@ def run(plan, args):
is_exporter = False
config = ssv_node.generate_config(plan, node_index, cl_url, el_ws, private_keys[node_index], enr, is_exporter, args)
service_name = "ssv-node-{}".format(node_index)
ssv_configs[service_name] = ssv_node.get_service_config(node_index, config, is_exporter, ssv_image)
ssv_configs[service_name] = ssv_node.get_service_config(node_index, config, ssv_image)
node_index += 1

# Optional archive-exporter node (enabled in params-boole). Read-only: an empty operator key —
# it doesn't sign, and its p2p identity auto-generates like every node's. generate_config renders
# it in archive mode, which serves the committee duty traces the aetheria (boole) Step 12 reads.
# Singular by design (the aetheria side pins the hostname `ssv-exporter`), hence a bool, not a count.
exporter_enabled = args["nodes"].get("exporter", {}).get("enabled", False)
if exporter_enabled:
exporter_config = ssv_node.generate_config(plan, node_index, cl_url, el_ws, "", enr, True, args)
ssv_configs["ssv-exporter"] = ssv_node.get_service_config(node_index, exporter_config, ssv_image)

ssv_services = plan.add_services(
ssv_configs,
description="Starting {} SSV nodes in parallel".format(ssv_node_count),
description="Starting {} SSV services in parallel".format(len(ssv_configs)),
)

# The exporter above reused node_index without incrementing it, so node_index is still
# anchor_node_count + ssv_node_count here — this resolves to the first SSV node.
first_ssv_name = "ssv-node-{}".format(node_index - ssv_node_count)
ssv_node_api_url = ssv_services[first_ssv_name].ports[ssv_node.SSV_API_PORT_NAME].url

Expand Down
8 changes: 4 additions & 4 deletions monitor/monitor.star
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ constants = import_module("../utils/constants.star")
postgres = import_module("postgres.star")
redis = import_module("redis.star")

def start(plan, ssv_exporter_url, cl_url, monitor_image, postgres_image, redis_image):
def start(plan, ssv_node_api_url, cl_url, monitor_image, postgres_image, redis_image):
postgres_service_name, postgres_port = postgres.start(plan, postgres_image)
redis_service_name, redis_port = redis.start(plan, redis_image)

env_vars = shared_envs(postgres_service_name, postgres_port, redis_service_name, redis_port, ssv_exporter_url, cl_url)
env_vars = shared_envs(postgres_service_name, postgres_port, redis_service_name, redis_port, ssv_node_api_url, cl_url)

plan.add_service(
name="monitor-daemon",
Expand Down Expand Up @@ -46,13 +46,13 @@ def shared_envs(
postgres_port,
redis_service_name,
redis_port,
ssv_exporter_url,
ssv_node_api_url,
cl_url):
return {
"NETWORK": "other",
"BEACON_ADDR": cl_url,
"DEFAULT_POOL": "ssv",
"POOLS": '[{{"id":1,"name":"ssv","indices":[],"endpoint":"{}/v1/validators"}}]'.format(ssv_exporter_url),
"POOLS": '[{{"id":1,"name":"ssv","indices":[],"endpoint":"{}/v1/validators"}}]'.format(ssv_node_api_url),
"POSTGRES_URL": "postgres://postgres:postgres@{}:{}/monitor?sslmode=disable".format(postgres_service_name, postgres_port),
"REDIS_URL": "redis://{}:{}".format(redis_service_name, redis_port),
"LOG_LEVEL": "debug",
Expand Down
6 changes: 4 additions & 2 deletions nodes/ssv/config.yml.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@ ssv:
Forks:
GasLimit36: 0
Boole: {{ .BooleEpoch }}
exporter:
Enabled: {{ .ExporterEnabled }}
Mode: "{{ .ExporterMode }}"
OperatorPrivateKey: "{{ .OperatorPrivateKey }}"
SSVAPIPort: {{ .SSVAPIPort }}
Exporter: "{{ .Exporter }}"
EnableTraces: {{ .EnableTraces }}
MetricsAPIPort: {{ .MetricsAPIPort }}
MetricsAPIPort: {{ .MetricsAPIPort }}
13 changes: 5 additions & 8 deletions nodes/ssv/node.star
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ def generate_config(
DiscoveryProtocolID = "0x737376647635", # ssvdv5
Discovery=discovery,
ENR=enr,
Exporter=is_exporter,
ExporterEnabled=is_exporter,
# archive (not standard) also registers /v1/exporter/traces/* — the committee duty traces the
# aetheria (boole) Step 12 reads; standard mode wouldn't. Inert for operator nodes (ExporterEnabled=False).
ExporterMode="archive" if is_exporter else "standard",
SSVAPIPort=SSV_API_PORT,
MetricsAPIPort=SSV_METRICS_PORT,
EnableTraces=True,
Expand All @@ -64,7 +67,7 @@ def generate_config(

SSV_CONFIG_DIR_PATH_ON_SERVICE = "/ssv-config"

def get_service_config(index, config_artifact, is_exporter, image):
def get_service_config(index, config_artifact, image):
"""Returns a ServiceConfig for an SSV node without starting it (for use with plan.add_services)."""
config_path = "{}/ssv-config-{}.yaml".format(SSV_CONFIG_DIR_PATH_ON_SERVICE, index)

Expand Down Expand Up @@ -96,9 +99,3 @@ def get_service_config(index, config_artifact, is_exporter, image):
SSV_CONFIG_DIR_PATH_ON_SERVICE: config_artifact,
},
)

def start(plan, index, config_artifact, is_exporter, image):
"""Starts a single SSV node. Use get_service_config + plan.add_services for parallel startup."""
service_name = "ssv-node-{}".format(index) if not is_exporter else "ssv-exporter"
service_config = get_service_config(index, config_artifact, is_exporter, image)
return plan.add_service(service_name, service_config)
5 changes: 5 additions & 0 deletions params-boole.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ nodes:
count: 4
anchor:
count: 0
# Archive-exporter node the aetheria (boole) Step 12 reads to verify AGGREGATOR_COMMITTEE consensus.
# Boole-only (Step 12 is boole-specific); see main.star / node.star for how it's run. Singular by
# design — the aetheria side pins the hostname `ssv-exporter` — so this is a boolean, not a count.
exporter:
enabled: true

images:
ssv: "node/ssv"
Expand Down