Skip to content

Commit 73edab4

Browse files
committed
fix: Update slash settings in helm templates
Updates the slasher variables used in helm templates to match the new ones defined in #16694 and #16625. Sets all values to be empty, so we rely on the defaults set in the node and don't have multiple places where we define default values. Also adds a `check_env_vars` script (authored by claude) that checks if we are using any env var not defined in the env_var list in ts, so the CI should shout if we update a variable in ts-land but forget to update it in helm.
1 parent d2ab3bc commit 73edab4

File tree

7 files changed

+378
-40
lines changed

7 files changed

+378
-40
lines changed

spartan/aztec-network/templates/validator.yaml

Lines changed: 56 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -191,30 +191,66 @@ spec:
191191
- name: BLOB_SINK_URL
192192
value: "{{ .Values.blobs.remoteBlobSinkUrl }}"
193193
{{- end }}
194-
- name: SLASH_PAYLOAD_TTL_SECONDS
195-
value: {{ .Values.aztec.slash.payloadTtlSeconds | quote }}
196-
- name: SLASH_PRUNE_ENABLED
197-
value: {{ .Values.aztec.slash.pruneEnabled | quote }}
194+
{{- if .Values.aztec.slash.minPenaltyPercentage }}
195+
- name: SLASH_MIN_PENALTY_PERCENTAGE
196+
value: {{ .Values.aztec.slash.minPenaltyPercentage | quote }}
197+
{{- end }}
198+
{{- if .Values.aztec.slash.maxPenaltyPercentage }}
199+
- name: SLASH_MAX_PENALTY_PERCENTAGE
200+
value: {{ .Values.aztec.slash.maxPenaltyPercentage | quote }}
201+
{{- end }}
202+
{{- if .Values.aztec.slash.validatorsAlways }}
203+
- name: SLASH_VALIDATORS_ALWAYS
204+
value: {{ join "," .Values.aztec.slash.validatorsAlways | quote }}
205+
{{- end }}
206+
{{- if .Values.aztec.slash.validatorsNever }}
207+
- name: SLASH_VALIDATORS_NEVER
208+
value: {{ join "," .Values.aztec.slash.validatorsNever | quote }}
209+
{{- end }}
210+
{{- if .Values.aztec.slash.prunePenalty }}
198211
- name: SLASH_PRUNE_PENALTY
199212
value: {{ .Values.aztec.slash.prunePenalty | quote }}
200-
- name: SLASH_PRUNE_MAX_PENALTY
201-
value: {{ .Values.aztec.slash.pruneMaxPenalty | quote }}
202-
- name: SLASH_INACTIVITY_ENABLED
203-
value: {{ .Values.aztec.slash.inactivityEnabled | quote }}
204-
- name: SLASH_INACTIVITY_CREATE_TARGET_PERCENTAGE
205-
value: {{ .Values.aztec.slash.inactivityCreateTargetPercentage | quote }}
206-
- name: SLASH_INACTIVITY_SIGNAL_TARGET_PERCENTAGE
207-
value: {{ .Values.aztec.slash.inactivitySignalTargetPercentage | quote }}
208-
- name: SLASH_INACTIVITY_CREATE_PENALTY
209-
value: {{ .Values.aztec.slash.inactivityCreatePenalty | quote }}
210-
- name: SLASH_INACTIVITY_MAX_PENALTY
211-
value: {{ .Values.aztec.slash.inactivityMaxPenalty | quote }}
212-
- name: SLASH_INVALID_BLOCK_ENABLED
213-
value: {{ .Values.aztec.slash.invalidBlockEnabled | quote }}
213+
{{- end }}
214+
{{- if .Values.aztec.slash.dataWithholdingPenalty }}
215+
- name: SLASH_DATA_WITHHOLDING_PENALTY
216+
value: {{ .Values.aztec.slash.dataWithholdingPenalty | quote }}
217+
{{- end }}
218+
{{- if .Values.aztec.slash.inactivityPenalty }}
219+
- name: SLASH_INACTIVITY_PENALTY
220+
value: {{ .Values.aztec.slash.inactivityPenalty | quote }}
221+
{{- end }}
222+
{{- if .Values.aztec.slash.inactivityTargetPercentage }}
223+
- name: SLASH_INACTIVITY_TARGET_PERCENTAGE
224+
value: {{ .Values.aztec.slash.inactivityTargetPercentage | quote }}
225+
{{- end }}
226+
{{- if .Values.aztec.slash.invalidBlockPenalty }}
214227
- name: SLASH_INVALID_BLOCK_PENALTY
215228
value: {{ .Values.aztec.slash.invalidBlockPenalty | quote }}
216-
- name: SLASH_INVALID_BLOCK_MAX_PENALTY
217-
value: {{ .Values.aztec.slash.invalidBlockMaxPenalty | quote }}
229+
{{- end }}
230+
{{- if .Values.aztec.slash.proposeInvalidAttestationsPenalty }}
231+
- name: SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY
232+
value: {{ .Values.aztec.slash.proposeInvalidAttestationsPenalty | quote }}
233+
{{- end }}
234+
{{- if .Values.aztec.slash.attestDescendantOfInvalidPenalty }}
235+
- name: SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY
236+
value: {{ .Values.aztec.slash.attestDescendantOfInvalidPenalty | quote }}
237+
{{- end }}
238+
{{- if .Values.aztec.slash.unknownPenalty }}
239+
- name: SLASH_UNKNOWN_PENALTY
240+
value: {{ .Values.aztec.slash.unknownPenalty | quote }}
241+
{{- end }}
242+
{{- if .Values.aztec.slash.gracePeriodL2Slots }}
243+
- name: SLASH_GRACE_PERIOD_L2_SLOTS
244+
value: {{ .Values.aztec.slash.gracePeriodL2Slots | quote }}
245+
{{- end }}
246+
{{- if .Values.aztec.slash.offenseExpirationRounds }}
247+
- name: SLASH_OFFENSE_EXPIRATION_ROUNDS
248+
value: {{ .Values.aztec.slash.offenseExpirationRounds | quote }}
249+
{{- end }}
250+
{{- if .Values.aztec.slash.maxPayloadSize }}
251+
- name: SLASH_MAX_PAYLOAD_SIZE
252+
value: {{ .Values.aztec.slash.maxPayloadSize | quote }}
253+
{{- end }}
218254
- name: SENTINEL_ENABLED
219255
value: "{{ .Values.validator.sentinelEnabled }}"
220256
{{- if .Values.web3signer.enabled }}

spartan/aztec-network/values.yaml

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -108,19 +108,27 @@ aztec:
108108
## The number of extra accounts to prefund
109109
extraAccounts: 10
110110

111+
# All slashing settings are empty so we rely on the defaults set on ts-land
111112
slash:
112-
payloadTtlSeconds: "86400"
113-
pruneEnabled: false
114-
prunePenalty: "1"
115-
pruneMaxPenalty: "100"
116-
inactivityEnabled: false
117-
inactivityCreateTargetPercentage: 0.9
118-
inactivitySignalTargetPercentage: 0.6
119-
inactivityCreatePenalty: "1"
120-
inactivityMaxPenalty: "100"
121-
invalidBlockEnabled: false
122-
invalidBlockPenalty: "1"
123-
invalidBlockMaxPenalty: "100"
113+
# Penalty percentages for slashing offenses
114+
minPenaltyPercentage: ""
115+
maxPenaltyPercentage: ""
116+
# Validator allowlists/denylists
117+
validatorsAlways: []
118+
validatorsNever: []
119+
# Penalty amounts for different offense types
120+
prunePenalty: ""
121+
dataWithholdingPenalty: ""
122+
inactivityPenalty: ""
123+
inactivityTargetPercentage: ""
124+
invalidBlockPenalty: ""
125+
proposeInvalidAttestationsPenalty: ""
126+
attestDescendantOfInvalidPenalty: ""
127+
unknownPenalty: ""
128+
# Slasher behavior configuration
129+
gracePeriodL2Slots: ""
130+
offenseExpirationRounds: ""
131+
maxPayloadSize: ""
124132

125133
bootNode:
126134
enabled: true

spartan/aztec-network/values/rc-1.yaml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ aztec:
99
realProofs: true
1010
testAccounts: true
1111
sponsoredFPC: true
12-
slash:
13-
pruneEnabled: true
14-
inactivityEnabled: true
15-
invalidBlockEnabled: true
1612

1713
images:
1814
aztec:

spartan/bootstrap.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ dump_fail "flock scripts/logs/install_deps.lock retry scripts/install_deps.sh >&
99

1010
function build {
1111
denoise "helm lint ./aztec-network/"
12+
denoise ./spartan/scripts/check_env_vars.sh
1213
}
1314

1415
function network_shaping {

spartan/scripts/check_env_vars.sh

Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
#!/bin/bash
2+
3+
# Script to check that all environment variables used in Helm templates and Terraform scripts
4+
# are defined in yarn-project/foundation/src/config/env_var.ts
5+
#
6+
# This script scans:
7+
# - Helm templates in spartan/aztec-network/templates/ for "- name: VAR_NAME" patterns
8+
# - Terraform files in spartan/terraform/ for "VAR_NAME = var.VAR_NAME" and variable definitions
9+
#
10+
# It then checks if each found environment variable is defined in the TypeScript EnvVar union type.
11+
# Variables in the exclusion list (system/k8s/deployment-specific vars) are ignored.
12+
#
13+
# Usage:
14+
# ./check-env-vars.sh # Basic check
15+
# VERBOSE=1 ./check-env-vars.sh # Show all found variables
16+
#
17+
# Exit codes:
18+
# 0 - All environment variables are properly defined
19+
# 1 - Some environment variables are missing from env_var.ts
20+
21+
set -euo pipefail
22+
23+
# Colors for output
24+
RED='\033[0;31m'
25+
GREEN='\033[0;32m'
26+
YELLOW='\033[1;33m'
27+
NC='\033[0m' # No Color
28+
29+
# Get the project root directory (assuming script is in spartan/scripts)
30+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
31+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
32+
33+
# Files to check
34+
ENV_VAR_FILE="$PROJECT_ROOT/yarn-project/foundation/src/config/env_var.ts"
35+
HELM_TEMPLATES_DIR="$PROJECT_ROOT/spartan/aztec-network/templates"
36+
TERRAFORM_DIR="$PROJECT_ROOT/spartan/terraform"
37+
38+
echo -e "${YELLOW}Checking environment variables in Helm templates and Terraform scripts...${NC}"
39+
40+
# Variables that are excluded from validation (system vars, k8s vars, deployment vars, etc.)
41+
# Build the regex pattern from an array for better readability
42+
EXCLUDED_VARS_ARRAY=(
43+
# Kubernetes injected variables
44+
"K8S_POD_NAME"
45+
"K8S_POD_UID"
46+
"K8S_NAMESPACE_NAME"
47+
"POD_IP"
48+
"POD_NAME"
49+
50+
# System environment variables
51+
"PATH"
52+
"HOME"
53+
"USER"
54+
"SHELL"
55+
56+
# Service/container specific vars that may not be in env_var.ts
57+
"OTEL_SERVICE_NAME"
58+
"OTEL_RESOURCE_ATTRIBUTES"
59+
"SERVICE_NAME"
60+
"NAMESPACE"
61+
"OTEL_COLLECTOR_ENDPOINT"
62+
63+
# Helm template variables (not actual env vars)
64+
"RELEASE_NAME"
65+
"CHART_NAME"
66+
67+
# External service variables that may not be managed by the app
68+
"ETH_BEACON_URL"
69+
"ETH_EXECUTION_URL"
70+
"ENGINE_PORT"
71+
"HTTP_PORT"
72+
"WS_PORT"
73+
"BEACON_HTTP_PORT"
74+
"MAX_TX_INPUT_SIZE_BYTES"
75+
76+
# Network/infrastructure variables
77+
"NETWORK_PUBLIC"
78+
"EXTERNAL_ETHEREUM_HOSTS"
79+
"EXTERNAL_ETHEREUM_CONSENSUS_HOST"
80+
"EXTERNAL_ETHEREUM_CONSENSUS_HOST_API_KEY"
81+
"EXTERNAL_ETHEREUM_CONSENSUS_HOST_API_KEY_HEADER"
82+
"EXTERNAL_BOOT_NODE_HOST"
83+
"EXTERNAL_FULL_NODE_HOST"
84+
"EXTERNAL_PROVER_NODE_HOST"
85+
"ETHEREUM_PORT"
86+
"ETHEREUM_CONSENSUS_PORT"
87+
"BOOT_NODE_PORT"
88+
"FULL_NODE_PORT"
89+
"PROVER_NODE_PORT"
90+
"PROVER_BROKER_PORT"
91+
"BOOT_NODE_HOST"
92+
"FULL_NODE_HOST"
93+
94+
# Deployment and CI/CD specific variables
95+
"ACCELERATED_TEST_DEPLOYMENTS"
96+
"ARCHIVE_NODE_VALUES"
97+
"AZTEC_DOCKER_IMAGE"
98+
"AZTEC_PROOF_SUBMISSION_WINDOW"
99+
"BLOCK_TIME"
100+
"BOOTNODE_IP_REGION"
101+
"BOT_VALUES"
102+
"CHAIN_ID"
103+
"CREATE_STATIC_IPS"
104+
"DEPLOYMENT_MNEMONIC"
105+
"ETH_DEVNET_VALUES"
106+
"EXPOSE_HTTPS_BOOTNODE"
107+
"GAS_LIMIT"
108+
"GCP_PROJECT"
109+
"GCP_REGION"
110+
"GKE_CLUSTER_CONTEXT"
111+
"GRAFANA_PASSWORD_SECRET_NAME"
112+
"HOSTNAME"
113+
"INIT_VALIDATORS"
114+
115+
# Job/workflow specific variables
116+
"JOB_BACKOFF_LIMIT"
117+
"JOB_NAME"
118+
"JOB_TTL_SECONDS_AFTER_FINISHED"
119+
"K8S_CLUSTER_CONTEXT"
120+
"K8S_MODE"
121+
"KEY_INDEX_START"
122+
"L1_DEPLOYMENT_MNEMONIC"
123+
"L1_DEPLOYMENT_PRIVATE_KEY"
124+
"L1_DEPLOYMENT_SALT"
125+
"L1_RPC_URLS"
126+
"LOGS"
127+
"METRICS_NAMESPACE"
128+
"MNEMONIC_SECRET_NAME"
129+
"NODE_OPTIONS"
130+
"NODE_RPC_VALUES"
131+
"NUMBER_OF_VALIDATOR_NODES"
132+
133+
# Resource and configuration variables
134+
"P2P_BOOTSTRAP_RESOURCE_PROFILE"
135+
"PREFUNDED_MNEMONIC_INDICES"
136+
"PROVER_KEY_START"
137+
"PROVER_MNEMONIC"
138+
"PROVER_MNEMONIC_START_INDEX"
139+
"PROVER_RESOURCE_PROFILE"
140+
"PROVER_VALUES"
141+
"REAL_VERIFIER"
142+
"RELEASE_PREFIX"
143+
"RESOURCE_PROFILE"
144+
"RESOURCES_FILE"
145+
"RPC_EXTERNAL_INGRESS"
146+
"RPC_HOSTNAME"
147+
"RPC_RESOURCE_PROFILE"
148+
"RPC_VALUES"
149+
"SALT"
150+
"SERVICE"
151+
"SLACK_WEBHOOK_SECRET_NAME"
152+
"SLASHER_KEY_INDEX_START"
153+
"SNAPSHOT_VALUES"
154+
155+
# Validator and node specific variables
156+
"VALIDATOR_KEY_START"
157+
"VALIDATOR_MNEMONIC"
158+
"VALIDATOR_MNEMONIC_START_INDEX"
159+
"VALIDATOR_REPLICAS"
160+
"VALIDATOR_RESOURCE_PROFILE"
161+
"VALIDATORS"
162+
"VALIDATORS_PER_NODE"
163+
"VALIDATOR_VALUES"
164+
"VALUES_FILE"
165+
)
166+
167+
# Join array elements with | for regex
168+
EXCLUDED_VARS=$(IFS='|'; echo "${EXCLUDED_VARS_ARRAY[*]}")
169+
170+
# Extract environment variables from Helm templates
171+
echo "Scanning Helm templates..."
172+
helm_vars=""
173+
if [[ -d "$HELM_TEMPLATES_DIR" ]]; then
174+
helm_vars=$(find "$HELM_TEMPLATES_DIR" -name "*.yaml" -o -name "*.yml" -o -name "*.tpl" | \
175+
xargs grep -hE "^\s*- name:\s+[A-Z][A-Z0-9_]*\s*$" 2>/dev/null | \
176+
sed -E 's/.*- name:\s+([A-Z][A-Z0-9_]*).*/\1/' | \
177+
sort -u || true)
178+
fi
179+
180+
# Extract environment variables from Terraform scripts
181+
echo "Scanning Terraform scripts..."
182+
terraform_vars=""
183+
if [[ -d "$TERRAFORM_DIR" ]]; then
184+
terraform_vars=$(find "$TERRAFORM_DIR" -name "*.tf" | \
185+
xargs grep -hE "(^\s*[A-Z][A-Z0-9_]*\s*=|^variable \"[A-Z][A-Z0-9_]*\")" 2>/dev/null | \
186+
sed -E 's/^\s*([A-Z][A-Z0-9_]*)\s*=.*/\1/; s/^variable "([A-Z][A-Z0-9_]*)".*/\1/' | \
187+
sort -u || true)
188+
fi
189+
190+
# Combine and deduplicate all found variables
191+
echo "Processing found variables..."
192+
all_vars=$(echo -e "$helm_vars\n$terraform_vars" | grep -v "^$" | sort -u)
193+
194+
# Extract defined variables from env_var.ts
195+
echo "Extracting defined variables..."
196+
if [[ ! -f "$ENV_VAR_FILE" ]]; then
197+
echo -e "${RED}Error: env_var.ts file not found: $ENV_VAR_FILE${NC}"
198+
exit 1
199+
fi
200+
201+
defined_vars=$(grep -E "^\s*\|\s+'[A-Z][A-Z0-9_]*'" "$ENV_VAR_FILE" | \
202+
sed -E "s/.*'([A-Z][A-Z0-9_]*)'.*/\1/" | \
203+
sort)
204+
205+
# Check for missing variables (excluding known system/k8s vars)
206+
echo "Checking for undefined variables..."
207+
missing_vars=""
208+
if [[ -n "$all_vars" ]]; then
209+
# Filter out excluded variables and check against defined vars
210+
filtered_vars=$(echo "$all_vars" | grep -vE "^($EXCLUDED_VARS)$" || true)
211+
212+
if [[ -n "$filtered_vars" ]]; then
213+
missing_vars=$(comm -23 <(echo "$filtered_vars") <(echo "$defined_vars"))
214+
fi
215+
fi
216+
217+
# Report results
218+
echo
219+
echo "=== RESULTS ==="
220+
found_count=$(echo "$all_vars" | wc -l)
221+
defined_count=$(echo "$defined_vars" | wc -l)
222+
223+
echo "Found $found_count unique environment variables in Helm templates and Terraform scripts"
224+
echo "Found $defined_count defined environment variables in env_var.ts"
225+
226+
if [[ -z "$missing_vars" ]]; then
227+
echo -e "${GREEN}✅ All environment variables are properly defined!${NC}"
228+
exit_code=0
229+
else
230+
missing_count=$(echo "$missing_vars" | wc -l)
231+
echo -e "${RED}❌ Found $missing_count undefined environment variables:${NC}"
232+
echo
233+
echo "$missing_vars" | while IFS= read -r var; do
234+
[[ -n "$var" ]] && echo -e "${RED} - $var${NC}"
235+
done
236+
echo
237+
echo -e "${YELLOW}These variables should be added to yarn-project/foundation/src/config/env_var.ts${NC}"
238+
exit_code=1
239+
fi
240+
241+
# Show debug info if verbose
242+
if [[ "${VERBOSE:-}" == "1" ]]; then
243+
echo
244+
echo "=== DEBUG INFO ==="
245+
echo "All found variables:"
246+
echo "$all_vars"
247+
fi
248+
249+
exit $exit_code

0 commit comments

Comments
 (0)